提交 0671e98d 作者: 方治民

Merge branch 'dev_tml' of https://gitlab.yiring.com/chemical-kesai/kshg-api into dev_fzm

 Conflicts:
	app/src/main/java/com/yiring/app/web/map/MapController.java
<?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
......@@ -6,6 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@EnableJpaRepositories(basePackages = Application.BASE_PACKAGES)
......@@ -14,6 +15,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
basePackages = Application.BASE_PACKAGES
)
@EnableFeignClients
@EnableJpaAuditing
@SpringBootApplication(scanBasePackages = Application.BASE_PACKAGES)
public class Application {
......
......@@ -12,4 +12,9 @@ public interface RedisKey {
* STOMP 在线用户关键数据
*/
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.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)
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.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.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> {}
/* (C) 2022 YiRing, Inc. */
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 java.io.Serial;
import java.io.Serializable;
......@@ -9,11 +9,11 @@ import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
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;
/**
......@@ -32,47 +32,62 @@ import org.locationtech.jts.geom.Geometry;
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@Where(clause = "deleted = false")
@Entity
@Table(name = "BS_LOCATION_FENCE", indexes = { @Index(columnList = "mode") })
@Table(name = "BS_LOCATION_FENCE")
@Comment("围栏")
public class LocationFence extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = 4155868702188991300L;
@Comment("地图 ID")
Long areaId;
@Comment("围栏名称")
private String name;
@FieldMapping("entityTypes")
@Comment("围栏模型")
@Enumerated(EnumType.STRING)
Mode mode;
@Comment("地图ID")
private Long mapId;
@Comment("地图名称")
private String mapName;
@Comment("摄像头")
@ManyToOne
@JoinColumn(name = "video_id")
private Video video;
@Comment("围栏类别")
private Integer fenceType;
@Comment("空间信息")
@Type(type = "jts_geometry")
@Column(columnDefinition = "geometry")
Geometry geometry;
private Geometry geometry;
@Comment("滞留时间(秒)")
private Integer residenceTime;
@Comment("超时时间(秒)")
Integer overtime;
@Comment("消抖时间(秒)")
private Integer threshold;
@Comment("消抖时间(秒)")
Integer threshold;
@Comment("是否启用")
private Boolean enable;
@Comment(value = "是否删除")
@Column(nullable = false)
Boolean deleted;
@Comment("信标集合")
@Builder.Default
@ManyToMany
@ToString.Exclude
Set<LocationBeacon> beacons = new HashSet<>(0);
private Set<LocationBeacon> beacons = new HashSet<>(0);
@Comment("围栏规则集合")
@Builder.Default
@OneToMany(mappedBy = "fence")
@ToString.Exclude
Set<LocationFenceRule> rules = new HashSet<>(0);
@SuppressWarnings({ "unused" })
private Set<LocationFenceRule> rules = new HashSet<>(0);
/*@SuppressWarnings({ "unused" })
public enum Mode {
NORMAL("常规区域"),
DANGER("危险源区域");
......@@ -83,5 +98,5 @@ public class LocationFence extends BasicEntity implements Serializable {
Mode(String 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%")
List<LocationFence> findLikeName(String name);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.location;
import com.yiring.app.domain.alarm.AlarmType;
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 java.util.Objects;
import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder;
import org.hibernate.Hibernate;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.Where;
/**
* 围栏规则
......@@ -25,11 +26,11 @@ import org.hibernate.annotations.Comment;
@Getter
@Setter
@ToString
@Builder
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@Where(clause = "deleted = false")
@Entity
@Table(name = "BS_LOCATION_FENCE_RULE")
@Comment("围栏规则")
......@@ -41,10 +42,33 @@ public class LocationFenceRule extends BasicEntity implements Serializable {
@Comment("围栏")
@ManyToOne
@JoinColumn(name = "fence_id")
LocationFence fence;
// TODO
// 字段补充
// 关联表补充(报警规则)
// 关联表配置值补充
private LocationFence fence;
@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> {}
......@@ -13,4 +13,13 @@ import org.springframework.stereotype.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. */
package com.yiring.app.domain.car;
package com.yiring.app.domain.visitor;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
......@@ -48,24 +48,6 @@ public class Car implements Serializable {
@Comment("车辆类型")
String carType;
@Comment("司机名称")
String driverName;
@Comment("司机电话")
String driverMobile;
@Comment("标签卡")
String labelCard;
@Comment("所属单位id")
String orgId;
@Comment("被访人id")
String intervieweeId;
@Comment("来访原因")
String reason;
@Comment("收卡时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime cardRecTime;
......@@ -77,6 +59,6 @@ public class Car implements Serializable {
@Comment("发卡时间")
LocalDateTime cardSendTime;
@Comment("备用字段")
String reserve4;
@Comment("标签卡")
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 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.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
@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("访客id")
// Long visitorId;
@Comment("被邀请访客")
@JsonIgnore
@OneToOne
@JoinColumn(name = "visitor_id", referencedColumnName = "id")
Visitor visitor;
}
/* (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.stereotype.Repository;
/**
* @author tzl
* 2022/4/24 16:53
*/
@Repository
public interface InvitationRepository
extends JpaRepository<Invitation, Serializable>, JpaSpecificationExecutor<Invitation> {}
......@@ -6,11 +6,13 @@ import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.*;
import javax.persistence.CascadeType;
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.GenericGenerator;
import org.hibernate.annotations.*;
import org.hibernate.snowflake.SnowflakeId;
/**
......@@ -26,6 +28,8 @@ import org.hibernate.snowflake.SnowflakeId;
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@DynamicInsert
@DynamicUpdate
@Table(name = "BS_VISITOR")
@Comment("访客信息")
public class Visitor implements Serializable {
......@@ -49,10 +53,10 @@ public class Visitor implements Serializable {
String visitorCarNum;
@Comment("是否特殊作业")
boolean taskType;
String taskType;
@Comment("邀请人数")
Integer numOfVisitor;
// @Comment("邀请人数")
// Integer numOfVisitor;
@Comment("访客来源")
String visitorSource;
......@@ -69,7 +73,7 @@ public class Visitor implements Serializable {
@Comment("被访人id")
String intervieweeId;
@Comment("来访原因")
@Comment("来访原因/邀请原因")
String reason;
@Comment("收卡时间")
......@@ -89,11 +93,19 @@ public class Visitor implements Serializable {
LocalDateTime cardSendTime;
@Comment("备用字段")
String reserve1;
Long reserve1;
@Comment("备用字段")
String reserve2;
@Comment("是否已删除:Y是 N否")
@Column(columnDefinition = "VARCHAR DEFAULT 'N'")
String deleted;
@Comment("主访人员id")
Long mainVisitorId;
@Comment("备用字段")
String reserve3;
@Comment("访客车辆")
@OneToOne(cascade = { CascadeType.ALL })
Car car;
}
......@@ -11,4 +11,6 @@ import org.springframework.stereotype.Repository;
* 2022/4/19 14:06
*/
@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);
}
/* (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.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.car;
package com.yiring.app.excel.visitor;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
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 = "邀请方式")
String InvitationMethod;
@ExcelColumn(title = "邀请人数")
Integer numOfVisitor;
@ExcelColumn(title = "所属单位")
String orgId;
@ExcelColumn(title = "到访人姓名")
String visitorName;
@ExcelColumn(title = "到访人电话")
String visitorMobile;
@ExcelColumn(title = "是否特殊任务")
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;
}
/* (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.district;
import com.yiring.app.domain.district.District;
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 org.hibernate.validator.constraints.Length;
import org.locationtech.jts.geom.Geometry;
/**
*
* @author tml
* @version 1.0
* @date 2022/4/26 10:40
*/
@ApiModel("DistrictAddParam(添加区域param)")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DistrictAddParam implements Serializable {
@Serial
private static final long serialVersionUID = 2936786907836076236L;
@ApiModelProperty(value = "区域名称", example = "工作区域", required = true)
@NotEmpty(message = "区域名称不能为空")
@Length(max = 10, message = "区域名称不能超过10个字符")
private String name;
@ApiModelProperty(value = "风险等级", example = "1", required = true)
@NotEmpty(message = "风险等级不能为空")
@Length(min = 6, max = 7, message = "请选择正确的颜色")
private String riskGrade;
@ApiModelProperty(value = "消抖时间(秒)", example = "10", required = true)
@NotNull(message = "消抖时间不能为空")
private Integer debouncingDuration;
@ApiModelProperty(value = "超时时间(秒)", example = "100", required = true)
@NotNull(message = "超时时间不能为空")
private Integer timeoutDuration;
@ApiModelProperty(value = "区域信息", example = "100", required = true)
@NotNull(message = "区域信息不能为空")
private Geometry geometry;
public District transform() {
return District
.builder()
.name(name)
.deleted(false)
.riskGrade(riskGrade)
.debouncingDuration(debouncingDuration)
.timeoutDuration(timeoutDuration)
.geometry(geometry)
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.district;
import com.yiring.app.domain.district.District;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
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.locationtech.jts.geom.Geometry;
/**
*
* @author tml
* @version 1.0
* @date 2022/4/26 10:40
*/
@ApiModel("DistrictAddParam(添加区域param)")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DistrictModifyParam implements Serializable {
@Serial
private static final long serialVersionUID = 2936786907836076236L;
@ApiModelProperty(value = "id", example = "1", required = true)
@NotNull(message = "id不能为空")
private Long id;
@ApiModelProperty(value = "区域名称", example = "工作区域", required = true)
@Length(max = 10, message = "区域名称不能超过10个字符")
private String name;
@ApiModelProperty(value = "风险等级", example = "1", required = true)
@Length(min = 6, max = 7, message = "请选择正确的颜色")
private String riskGrade;
@ApiModelProperty(value = "消抖时间(秒)", example = "10", required = true)
private Integer debouncingDuration;
@ApiModelProperty(value = "超时时间(秒)", example = "100", required = true)
private Integer timeoutDuration;
@ApiModelProperty(value = "区域信息", example = "100", required = true)
private Geometry geometry;
public District transform() {
return District
.builder()
.id(id)
.name(name)
.riskGrade(riskGrade)
.debouncingDuration(debouncingDuration)
.timeoutDuration(timeoutDuration)
.geometry(geometry)
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.location.fence;
import com.yiring.app.constant.alarm.FenceTypeEnum;
import com.yiring.app.domain.location.LocationFence;
import com.yiring.app.domain.video.Video;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
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;
import org.locationtech.jts.geom.Geometry;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 10:52
*/
@ApiModel("LocationFenceAddParam(添加围栏信息的param)")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class LocationFenceAddParam {
@ApiModelProperty(value = "围栏名称", example = "1")
@NotEmpty(message = "围栏名称不能为空")
@Length(max = 10, message = "围栏名称不能超过10个字符")
private String name;
@ApiModelProperty(value = "地图ID", example = "1")
@NotNull(message = "地图不能为空")
private Long mapId;
@ApiModelProperty(value = "地图名称", example = "1")
@NotNull(message = "地图名称不能为空")
private String mapName;
@ApiModelProperty(value = "摄像头ID", example = "1")
@NotNull(message = "关联摄像头不能为空")
private Long videoId;
@ApiModelProperty(value = "围栏类别", example = "1")
@NotNull(message = "围栏类别不能为空")
@Range(min = FenceTypeEnum.MIN, max = FenceTypeEnum.MAX, message = "请选择正确的围栏类别")
private Integer fenceType;
@ApiModelProperty(value = "空间信息", example = "1")
@NotNull(message = "区域信息不能为空")
private Geometry geometry;
@ApiModelProperty(value = "滞留时间(秒)", example = "1")
@NotNull(message = "滞留时间不能为空")
private Integer residenceTime;
@ApiModelProperty(value = "消抖时间(秒)", example = "1")
@NotNull(message = "消抖时间不能为空")
private Integer threshold;
public LocationFence transform() {
Video video = Video.builder().id(videoId).build();
return LocationFence
.builder()
.name(name)
.mapId(mapId)
.mapName(mapName)
.video(video)
.fenceType(fenceType)
.geometry(geometry)
.residenceTime(residenceTime)
.threshold(threshold)
.enable(false)
.deleted(false)
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.location.fence;
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;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 13:35
*/
@ApiModel("LocationFenceConditionParam(查询围栏信息的条件param)")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class LocationFenceConditionParam implements Serializable {
@Serial
private static final long serialVersionUID = 6711068412873775138L;
@ApiModelProperty(value = "地图id", example = "1")
private Long mapId;
@ApiModelProperty(value = "围栏类型", example = "1")
private Long fenceType;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.location.fence;
import com.yiring.app.constant.alarm.FenceTypeEnum;
import com.yiring.app.domain.location.LocationFence;
import com.yiring.app.domain.video.Video;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
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;
import org.locationtech.jts.geom.Geometry;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 10:52
*/
@ApiModel("LocationFenceModifyParam(修改围栏信息的param)")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class LocationFenceModifyParam {
@ApiModelProperty(value = "围栏ID", example = "1")
@NotNull(message = "围栏id不能为空")
private Long id;
@ApiModelProperty(value = "围栏名称", example = "1")
@Length(max = 10, message = "围栏名称不能超过10个字符")
private String name;
@ApiModelProperty(value = "地图ID", example = "1")
private Long mapId;
@ApiModelProperty(value = "地图名称", example = "1")
private String mapName;
@ApiModelProperty(value = "摄像头ID", example = "1")
private Long videoId;
@ApiModelProperty(value = "围栏类别", example = "1")
@Range(min = FenceTypeEnum.MIN, max = FenceTypeEnum.MAX, message = "请选择正确的围栏类别")
private Integer fenceType;
@ApiModelProperty(value = "空间信息", example = "1")
private Geometry geometry;
@ApiModelProperty(value = "滞留时间(秒)", example = "1")
private Integer residenceTime;
@ApiModelProperty(value = "消抖时间(秒)", example = "1")
private Integer threshold;
public LocationFence transform() {
Video video = Video.builder().id(videoId).build();
return LocationFence
.builder()
.id(id)
.name(name)
.mapId(mapId)
.mapName(mapName)
.video(video)
.fenceType(fenceType)
.geometry(geometry)
.residenceTime(residenceTime)
.threshold(threshold)
.enable(false)
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.location.rule;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.domain.alarm.AlarmType;
import com.yiring.app.domain.location.LocationAlarmRule;
import com.yiring.app.domain.location.LocationFence;
import com.yiring.auth.domain.user.User;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.validation.constraints.NotEmpty;
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/5 15:41
*/
@ApiModel("添加配置报警类别的报警规则")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LocationAlarmRuleAddParam implements Serializable {
@Serial
private static final long serialVersionUID = 388296602724939033L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "地图id", example = "1", required = true)
@NotNull(message = "地图id不能为空")
private Long mapId;
@ApiModelProperty(value = "地图名称", example = "一层", required = true)
@NotEmpty(message = "地图名称不能为空")
private String mapName;
@ApiModelProperty(value = "电子围栏id", example = "1", required = true)
@NotNull(message = "电子围栏id不能为空")
private Long fenceId;
@ApiModelProperty(value = "报警类型id", example = "1", required = true)
@NotNull(message = "报警类型id不能为空")
private Long alarmId;
@ApiModelProperty(value = "接收人集合(id)", required = true)
@NotNull(message = "接收人id不能为空")
private Set<Long> users;
@ApiModelProperty(value = "通知方式集合", required = true)
@NotNull(message = "通知方式不能为空")
private Set<Integer> informManner;
public LocationAlarmRule transform() {
LocationFence locationFence = LocationFence.builder().id(fenceId).build();
HashSet<User> set = new HashSet<>();
for (Long item : this.users) {
set.add(User.builder().id(item).build());
}
AlarmType alarmType = AlarmType.builder().id(alarmId).build();
String json = JSON.toJSONString(informManner);
return LocationAlarmRule
.builder()
.mapId(mapId)
.mapName(mapName)
.locationFence(locationFence)
.users(set)
.alarmType(alarmType)
.informManner(json)
.deleted(false)
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.location.rule;
import com.alibaba.fastjson.JSON;
import com.yiring.app.domain.alarm.AlarmType;
import com.yiring.app.domain.location.LocationAlarmRule;
import com.yiring.app.domain.location.LocationFence;
import com.yiring.auth.domain.user.User;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.validation.constraints.NotEmpty;
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/5 15:41
*/
@ApiModel("修改配置报警类别的报警规则")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LocationAlarmRuleModifyParam implements Serializable {
@Serial
private static final long serialVersionUID = 388296602724939033L;
@ApiModelProperty(value = "id", example = "1", required = true)
@NotEmpty(message = "规则id不能为空")
private Long id;
@ApiModelProperty(value = "地图id", example = "1", required = true)
private Long mapId;
@ApiModelProperty(value = "地图名称", example = "一层", required = true)
private String mapName;
@ApiModelProperty(value = "报警类型id", example = "1", required = true)
@NotNull(message = "报警类型id不能为空")
private Long alarmId;
@ApiModelProperty(value = "电子围栏id", example = "1", required = true)
private Long fenceId;
@ApiModelProperty(value = "接收人集合", required = true)
private Set<Long> users;
@ApiModelProperty(value = "通知方式集合", required = true)
private Set<Integer> informManner;
public LocationAlarmRule transform() {
LocationFence locationFence = LocationFence.builder().id(fenceId).build();
HashSet<User> set = new HashSet<>();
for (Long item : this.users) {
set.add(User.builder().id(item).build());
}
AlarmType alarmType = AlarmType.builder().id(alarmId).build();
String json = JSON.toJSONString(informManner);
return LocationAlarmRule
.builder()
.id(id)
.mapId(mapId)
.mapName(mapName)
.locationFence(locationFence)
.users(set)
.alarmType(alarmType)
.informManner(json)
.deleted(false)
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.location.rule;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author tml
* @version 1.0
* @date 2022/5/5 15:17
*/
@ApiModel("电子围栏报警规则的条件参数")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LocationAlarmRuleParam implements Serializable {
@Serial
private static final long serialVersionUID = 6107090049902663508L;
@ApiModelProperty(value = "地图id", example = "1")
private Long mapId;
@ApiModelProperty(value = "围栏id", example = "1")
private Long fenceId;
@ApiModelProperty(value = "通知方式", example = "1")
private Set<Integer> informManner;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.location.rule;
import com.alibaba.fastjson.JSON;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.domain.alarm.AlarmType;
import com.yiring.app.domain.location.LocationFence;
import com.yiring.app.domain.location.LocationFenceRule;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
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/28 16:16
*/
@ApiModel("添加配置报警类别的报警规则,根据不同类型传入不同参数")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LocationFenceRuleAddParam implements Serializable {
@Serial
private static final long serialVersionUID = -7774789748161552583L;
@ApiModelProperty(value = "所属的围栏id", example = "1", required = true)
@NotNull(message = "所属的围栏id不能为空")
private Long fenceId;
@ApiModelProperty(value = "所属的围栏类别", example = "1", required = true)
@NotNull(message = "所属的围栏类别不能为空")
private Integer fenceType;
@ApiModelProperty(value = "所属的报警类别id", example = "1", required = true)
@NotNull(message = "所属的报警类别id不能为空")
private Long alarmTypeId;
@ApiModelProperty(value = "设置的关联参数类型", example = "1", required = true)
@NotNull(message = "所属的关联参数类别不能为空")
@Range(min = RelevanceParamEnum.MIN, max = RelevanceParamEnum.MAX, message = "关联参数类别异常")
private Integer relevanceParamType;
@NotNull(message = "所属的规则不能为空")
private RuleParam ruleParam;
public LocationFenceRule transform() {
LocationFence locationFence = LocationFence.builder().id(fenceId).fenceType(fenceType).build();
AlarmType alarmType = AlarmType.builder().id(alarmTypeId).relevanceParam(relevanceParamType).build();
String rule = JSON.toJSONString(ruleParam);
return LocationFenceRule
.builder()
.fence(locationFence)
.relevanceParamType(relevanceParamType)
.alarmType(alarmType)
.rule(rule)
.deleted(false)
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.location.rule;
import com.yiring.app.domain.location.LocationFenceRule;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import lombok.*;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:16
*/
@EqualsAndHashCode(callSuper = true)
@ApiModel("修改配置报警类别的报警规则,根据不同类型传入不同参数")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class LocationFenceRuleModifyParam extends LocationFenceRuleAddParam implements Serializable {
@Serial
private static final long serialVersionUID = -7774789748161552583L;
@ApiModelProperty(value = "规则id", example = "1", required = true)
@NotNull(message = "规则id不能为空")
private Long id;
@Override
public LocationFenceRule transform() {
LocationFenceRule transform = super.transform();
transform.setId(id);
return transform;
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.location.rule;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:28
*/
@ApiModel("报警类型中报警规则的用户信息")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class RelevanceUserParam implements Serializable {
@Serial
private static final long serialVersionUID = -8419550356739651935L;
@ApiModelProperty(value = "工号", example = "1888888888", required = true)
private String uuid;
@ApiModelProperty(value = "真实姓名", example = "张三", required = true)
private String realName;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.location.rule;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 14:12
*/
@ApiModel("报警规则,根据不同类型传入不同参数")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RuleParam implements Serializable {
@Serial
private static final long serialVersionUID = 441241201908785930L;
@ApiModelProperty(value = "选择的播放语音id", example = "1")
private Long voiceId;
@ApiModelProperty(value = "选择的播放语音名称", example = "紧急语音")
private String voiceName;
@ApiModelProperty(value = "选择的播放设备id", example = "1")
private Long playEquipmentId;
@ApiModelProperty(value = "选择的播放设备名称", example = "语音设备1")
private String playEquipmentName;
@ApiModelProperty(value = "静止时长或滞留时间(分钟)", example = "10")
private Integer duration;
@ApiModelProperty(value = "触发报警的距离(米)", example = "10")
private Integer distance;
private List<TimeAndNumberParam> timeAndNumber;
private List<TimeAndUserParam> timeAndUser;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.location.rule;
import com.yiring.common.constant.RegEx;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:24
*/
@ApiModel("报警类型中的最多人数或最小人数")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TimeAndNumberParam implements Serializable {
@Serial
private static final long serialVersionUID = -6796977663003158881L;
@ApiModelProperty(value = "起始时间", example = "星期一 08:00:00")
@Pattern(regexp = RegEx.TIME_RULE, message = "时间格式不正确")
private String beginTime;
@ApiModelProperty(value = "终止时间", example = "星期一 18:00:00")
@Pattern(regexp = RegEx.TIME_RULE, message = "时间格式不正确")
private String endTime;
@ApiModelProperty(value = "人数", example = "100")
private Integer number;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.location.rule;
import com.yiring.common.constant.RegEx;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.Set;
import javax.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:24
*/
@ApiModel("报警类型中的允许进入人员或不允许离开人员")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TimeAndUserParam implements Serializable {
@Serial
private static final long serialVersionUID = -7037620599825901175L;
@ApiModelProperty(value = "起始时间", example = "星期一 08:00:00")
@Pattern(regexp = RegEx.TIME_RULE, message = "时间格式不正确")
private String beginTime;
@ApiModelProperty(value = "终止时间", example = "星期一 18:00:00")
@Pattern(regexp = RegEx.TIME_RULE, message = "时间格式不正确")
private String endTime;
private Set<RelevanceUserParam> user;
}
......@@ -3,6 +3,7 @@ package com.yiring.app.param.video;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
......@@ -21,6 +22,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class VideoQueryParam implements Serializable {
@Serial
private static final long serialVersionUID = -330684070308585411L;
@ApiModelProperty(value = "编号", example = "88888888")
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.car;
package com.yiring.app.param.visitor;
import com.yiring.common.constant.RegEx;
import io.swagger.annotations.ApiModel;
......@@ -8,7 +8,6 @@ import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import lombok.*;
import lombok.experimental.FieldDefaults;
......@@ -35,25 +34,8 @@ public class CarParam implements Serializable {
@ApiModelProperty(value = "车辆类型", example = "1")
String carType;
@ApiModelProperty(value = "司机名称", example = "张三", required = true)
@NotEmpty(message = "司机名称不能为空")
String driverName;
@ApiModelProperty(value = "司机电话", example = "17688888888", required = true)
@NotEmpty(message = "司机电话不能为空")
@Pattern(regexp = RegEx.MOBILE, message = "手机号码格式不正确")
String driverMobile;
@ApiModelProperty(value = "所属单位id", example = "1", required = true)
@NotEmpty(message = "所属单位id不能为空")
String orgId;
@ApiModelProperty(value = "被访人id", example = "1", required = true)
@NotEmpty(message = "被访人id不能为空")
String intervieweeId;
@ApiModelProperty(value = "来访原因", example = "视察", required = true)
@NotEmpty(message = "来访原因不能为空")
@Size(min = 1, max = 20, message = "来访原因超出范围")
String reason;
@ApiModelProperty(value = "车辆类型", example = "1")
String labelCard;
// @ApiModelProperty(value = "对应访客id", example = "1", required = true)
// Long visitorId;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.car;
package com.yiring.app.param.visitor;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.visitor;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yiring.common.constant.RegEx;
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.NotEmpty;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 邀请信息入参
*
* @author tzl
* 2022/4/21 14:04
* @version 1.0
* @description: 邀请信息入参
* @date 2022/4/24 17:30
*/
@ApiModel("VisitorInfo")
@Data
......@@ -19,23 +28,47 @@ import lombok.experimental.FieldDefaults;
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class VisitorInfoParam implements Serializable {
public class InvitationParam implements Serializable {
@Serial
private static final long serialVersionUID = 3419577080791245488L;
private static final long serialVersionUID = 3394438557179083143L;
@ApiModelProperty(value = "邀请方式:个人 公司", example = "个人", required = true)
@NotEmpty(message = "邀请方式不能为空")
String InvitationMethod;
@ApiModelProperty(value = "邀请原因/来访原因", example = "随便看看", required = true)
@Size(min = 1, max = 20, message = "邀请原因")
String reason;
@ApiModelProperty(value = "到访人姓名", example = "张三", required = true)
@NotEmpty(message = "到访人姓名不能为空")
@NotEmpty(message = "到访人姓名")
String visitorName;
@ApiModelProperty(value = "到访人电话", example = "17688888888", required = true)
@Pattern(regexp = RegEx.MOBILE, message = "手机号码格式不正确")
@NotEmpty(message = "到访人电话不能为空")
String visitorMobile;
@ApiModelProperty(value = "到访人身份证", example = "430441190001255417", required = true)
@NotEmpty(message = "到访人身份证不能为空")
@ApiModelProperty(value = "到访人身份证", example = "430441190001255417")
String visitorCarNum;
@ApiModelProperty(value = "是否特殊作业", example = "fasle", required = true)
boolean taskType;
@ApiModelProperty(value = "是否特殊作业", example = "否", required = true)
String taskType;
// @ApiModelProperty(value = "访客来源", example = "外部邀请", required = true)
// String visitorSource;
@ApiModelProperty(value = "访客公司", example = "壹润科技")
String orgId;
@ApiModelProperty(value = "预约时间", example = "2022-04-19 14:28:00", required = true)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime appOfVisitTime;
@ApiModelProperty(value = "邀请人id", example = "1", required = true)
Long inviterId;
@ApiModelProperty(value = "邀请人数", example = "1")
Integer numOfVisitor;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.visitor;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
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 9:36
*/
@ApiModel("InvitationQueryParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class InvitationQueryParam implements Serializable {
@Serial
private static final long serialVersionUID = -8217270866091799814L;
@ApiModelProperty(value = "到访人姓名", example = "张三")
String visitorName;
@ApiModelProperty(value = "到访人电话", example = "17688888888")
String visitorMobile;
@ApiModelProperty(value = "访客公司", example = "壹润科技")
String orgId;
@ApiModelProperty(value = "是否特殊作业", example = "fasle")
String taskType;
@ApiModelProperty(value = "邀请人id", example = "1")
Long inviterId;
// @ApiModelProperty(value = "邀请人部门id", example = "1")
// Long deptId;
@ApiModelProperty(value = "预约到访时间(开始)", example = "2022-04-19 14:28:00")
LocalDateTime appOfVisitTimeStart;
@ApiModelProperty(value = "预约到访时间(结束)", example = "2022-04-19 14:28:00")
LocalDateTime appOfVisitTimeEnd;
@ApiModelProperty(value = "分页条数", example = "10")
Integer pageSize;
@ApiModelProperty(value = "当前页数", example = "1")
Integer pageNo;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.visitor;
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 java.util.List;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* 2022/4/21 13:51
*/
@ApiModel("VisitorParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class VisitorListParam implements Serializable {
@Serial
private static final long serialVersionUID = 6356324790945367160L;
@ApiModelProperty(value = "访客来源", example = "内部邀请", required = true)
String visitorSource;
@ApiModelProperty(value = "来访原因", example = "2022-04-19 14:28:00")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime appOfVisitTime;
@ApiModelProperty(value = "被访人id", example = "1", required = true)
String intervieweeId;
@ApiModelProperty(value = "来访原因", example = "看看", required = true)
String reason;
@ApiModelProperty(value = "访客所属公司", example = "壹润科技", required = true)
String orgId;
@ApiModelProperty(value = "邀请人数", example = "1", required = true)
Integer numOfVisitor;
List<VisitorInfoParam> visitorInfos;
}
......@@ -2,11 +2,14 @@
package com.yiring.app.param.visitor;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yiring.common.constant.RegEx;
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.NotEmpty;
import javax.validation.constraints.Pattern;
import lombok.*;
import lombok.experimental.FieldDefaults;
......@@ -22,6 +25,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class VisitorParam implements Serializable {
@Serial
private static final long serialVersionUID = 1444009404727514785L;
@ApiModelProperty(value = "到访人姓名", example = "张三", required = true)
......@@ -37,20 +41,11 @@ public class VisitorParam implements Serializable {
String visitorCarNum;
@ApiModelProperty(value = "是否特殊作业", example = "fasle", required = true)
boolean taskType;
// @Comment("邀请人数")
// Integer numOfVisitor;
String taskType;
@ApiModelProperty(value = "访客来源", example = "外部邀请", required = true)
String visitorSource;
// @Comment("标签卡")
// String labelCard;
//
// @Comment("标签卡状态")
// String labelCardStatus;
@ApiModelProperty(value = "访客所属公司", example = "壹润科技")
String orgId;
......@@ -60,19 +55,23 @@ public class VisitorParam implements Serializable {
@ApiModelProperty(value = "来访原因", example = "看看", required = true)
String reason;
// @ApiModelProperty(value = "发卡时间", example = "看看", required = true)
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// LocalDateTime cardRecTime;
@ApiModelProperty(value = "来访原因", example = "2022-04-19 14:28:00")
@ApiModelProperty(value = "来访时间", example = "2022-04-19 14:28:00")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime appOfVisitTime;
// @Comment("创建时间")
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// LocalDateTime createTime;
//
// @Comment("发卡时间")
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// LocalDateTime cardSendTime;
@ApiModelProperty(value = "是否有车(是 1 ,否 2)", example = "2")
Integer hasCar;
@ApiModelProperty(value = "车牌号码", example = "湘A99999")
@Pattern(regexp = RegEx.CARNUM, message = "车牌号码格式不正确")
String carNum;
@ApiModelProperty(value = "车辆类型", example = "货车")
String carType;
@ApiModelProperty(value = "车辆标签卡", example = "1")
String labelCard;
@ApiModelProperty(value = "主访人员id", example = "1")
Long mainVisitorId;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.alarm;
import com.yiring.app.param.alarm.AlarmConditionParam;
import com.yiring.app.param.alarm.AlarmTypeAddParam;
import com.yiring.app.param.alarm.AlarmTypeModifyParam;
import com.yiring.app.vo.alarm.AlarmTypeVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import javax.servlet.http.HttpServletResponse;
/**
* @author tml
* @version 1.0
* @date 2022/4/27 14:34
*/
public interface AlarmService {
/**
* 添加报警类型
* @param param 报警类型信息
* @return 是否成功
*/
Result<String> addAlarmType(AlarmTypeAddParam param);
/**
* 修改报警类型
* @param param 报警类型信息
* @return 是否成功
*/
Result<String> modifyAlarmType(AlarmTypeModifyParam param);
/**
* 删除报警类型
* @param param 报警类型id
* @return 是否成功
*/
Result<String> removeAlarmType(IdParam param);
/**
* 根据id查询报警类型
* @param param 报警类型id
* @return 报警类型
*/
Result<AlarmTypeVo> findById(IdParam param);
/**
* 根据条件查询
* @param conditionParam 条件
* @param pageParam 分页参数
* @return 报警类型列表
*/
Result<PageVo<AlarmTypeVo>> findByCondition(AlarmConditionParam conditionParam, PageParam pageParam);
/**
* 报警类型导出
* @param conditionParam 条件
* @param response response
*/
void exportAlarmType(AlarmConditionParam conditionParam, HttpServletResponse response, PageParam pageParam);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.alarm.impl;
import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder;
import com.yiring.app.domain.alarm.AlarmType;
import com.yiring.app.domain.alarm.AlarmTypeRepository;
import com.yiring.app.excel.alarm.AlarmTypeExcel;
import com.yiring.app.param.alarm.AlarmConditionParam;
import com.yiring.app.param.alarm.AlarmTypeAddParam;
import com.yiring.app.param.alarm.AlarmTypeModifyParam;
import com.yiring.app.service.alarm.AlarmService;
import com.yiring.app.util.JpaUtil;
import com.yiring.app.vo.alarm.AlarmTypeVo;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.persistence.criteria.Predicate;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author tml
* @version 1.0
* @date 2022/4/27 14:39
*/
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class AlarmServiceImpl implements AlarmService {
@Resource
private AlarmTypeRepository alarmTypeRepository;
@Override
public Result<String> addAlarmType(AlarmTypeAddParam param) {
Boolean exists = alarmTypeRepository.existsByName(param.getName());
if (exists) {
return Result.no(Status.EXPECTATION_FAILED, "名称已被占用");
}
alarmTypeRepository.saveAndFlush(param.transform());
return Result.ok();
}
@Override
public Result<String> modifyAlarmType(AlarmTypeModifyParam param) {
AlarmType alarmType = null;
List<AlarmType> allByName = alarmTypeRepository.findAllByName(param.getName());
if (allByName.size() > 1) {
log.warn("AlarmServiceImpl.modifyAlarmType时查询出两条报警类型名称相同的数据,param:[{}]", param);
}
for (AlarmType item : allByName) {
if (item.getId().equals(param.getId())) {
alarmType = item;
} else {
return Result.no(Status.EXPECTATION_FAILED, "名称已被占用");
}
}
if (alarmType == null) {
Optional<AlarmType> optional = alarmTypeRepository.findById(param.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "修改的报警类型不存在");
}
alarmType = optional.get();
}
JpaUtil.copyNotNullProperties(param, alarmType);
return Result.ok();
}
@Override
public Result<String> removeAlarmType(IdParam param) {
Optional<AlarmType> optional = alarmTypeRepository.findById(param.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "删除的报警类型不存在");
}
optional.get().setDeleted(true);
return Result.ok();
}
@Override
public Result<AlarmTypeVo> findById(IdParam param) {
Optional<AlarmType> optional = alarmTypeRepository.findById(param.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "查询的报警类型不存在");
}
AlarmTypeVo vo = AlarmTypeVo.transform(optional.get());
return Result.ok(vo);
}
@Override
public Result<PageVo<AlarmTypeVo>> findByCondition(AlarmConditionParam conditionParam, PageParam pageParam) {
Pageable pageable = PageParam.toPageable(pageParam);
Specification<AlarmType> specification = getSpecification(conditionParam);
Page<AlarmType> page = alarmTypeRepository.findAll(specification, pageable);
List<AlarmTypeVo> list = page.get().map(AlarmTypeVo::transform).collect(Collectors.toList());
PageVo<AlarmTypeVo> pageVo = PageVo.build(list, page.getTotalElements());
return Result.ok(pageVo);
}
@Override
public void exportAlarmType(AlarmConditionParam conditionParam, HttpServletResponse response, PageParam pageParam) {
Pageable pageable = PageParam.toPageable(pageParam);
Specification<AlarmType> specification = getSpecification(conditionParam);
Page<AlarmType> page = alarmTypeRepository.findAll(specification, pageable);
List<AlarmTypeExcel> list = page.get().map(AlarmTypeExcel::transform).collect(Collectors.toList());
try (
DefaultStreamExcelBuilder<AlarmTypeExcel> streamExcelBuilder = DefaultStreamExcelBuilder
.of(AlarmTypeExcel.class)
.threadPool(Executors.newFixedThreadPool(2))
.rowHeight(14)
.titleRowHeight(14)
.style(
"cell->vertical-align:center;text-align:center",
"title->vertical-align:center;text-align:center;font-weight:bold;font-family:等线"
)
.start()
) {
streamExcelBuilder.append(list);
String fileName = URLEncoder.encode("报警类型列表.xlsx", StandardCharsets.UTF_8);
response.setContentType("application/octet-stream");
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
OutputStream out = response.getOutputStream();
Workbook workbook = streamExcelBuilder.fixedTitles().build();
workbook.write(out);
workbook.close();
out.flush();
out.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new RuntimeException("报警类型列表导出失败: " + e.getMessage());
}
}
private Specification<AlarmType> getSpecification(AlarmConditionParam conditionParam) {
return (root, query, criteriaBuilder) -> {
List<Predicate> list = new ArrayList<>();
if (conditionParam.getFenceType() != null) {
list.add(criteriaBuilder.equal(root.get("fenceType"), conditionParam.getFenceType()));
}
if (conditionParam.getRelevanceParam() != null) {
list.add(criteriaBuilder.equal(root.get("relevanceParam"), conditionParam.getRelevanceParam()));
}
Predicate[] array = list.toArray(new Predicate[0]);
return criteriaBuilder.and(array);
};
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.analysis.history;
import com.yiring.app.param.analysis.history.HistoryRouteConditionParam;
import com.yiring.app.vo.analysis.history.HistoryRouteVo;
import com.yiring.common.core.Result;
import com.yiring.common.vo.PageVo;
import javax.servlet.http.HttpServletResponse;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 14:39
*/
public interface HistoryRouteService {
/**
* 根据条件查询历史轨迹信息
* @param param 地图、员工和时间条件
* @return 历史轨迹信息
*/
Result<PageVo<HistoryRouteVo>> findByCondition(HistoryRouteConditionParam param);
/**
* 导出历史轨迹信息
* @param param 地图、员工和时间条件
* @param response 历史轨迹信息
*/
void exportHistoryRoute(HistoryRouteConditionParam param, HttpServletResponse response);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.analysis.history.impl;
import com.alibaba.fastjson.JSONArray;
import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder;
import com.yiring.app.constant.RedisKey;
import com.yiring.app.domain.location.LocationLog;
import com.yiring.app.domain.location.LocationLogRepository;
import com.yiring.app.excel.analysis.history.HistoryRouteExcel;
import com.yiring.app.param.analysis.history.HistoryRouteConditionParam;
import com.yiring.app.service.analysis.history.HistoryRouteService;
import com.yiring.app.vo.analysis.history.HistoryRouteVo;
import com.yiring.app.vo.map.MapVo;
import com.yiring.common.core.Redis;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.vo.PageVo;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.persistence.criteria.Predicate;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 14:41
*/
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class HistoryRouteServiceImpl implements HistoryRouteService {
@Resource
private LocationLogRepository locationLogRepository;
@Resource
private Redis redis;
@Override
public Result<PageVo<HistoryRouteVo>> findByCondition(HistoryRouteConditionParam param) {
Specification<LocationLog> specification = getSpecification(param);
ArrayList<MapVo.MapVoReuslt> list1 = new ArrayList<>();
Object map = redis.get(RedisKey.ZY_MAP_AREAS);
String mapString = JSONArray.toJSONString(map);
List<MapVo.MapVoReuslt> mapVo = JSONArray.parseArray(mapString, MapVo.MapVoReuslt.class);
List<LocationLog> list = locationLogRepository.findAll(specification);
List<HistoryRouteVo> voList = list
.stream()
.map(e -> {
HistoryRouteVo routeVo = HistoryRouteVo.transform(e);
for (MapVo.MapVoReuslt item : mapVo) {
if (item.getId().equals(e.getAreaId().intValue())) {
routeVo.setMapName(item.getName());
break;
}
}
return routeVo;
})
.collect(Collectors.toList());
PageVo<HistoryRouteVo> pageVo = PageVo.build(voList, voList.size());
return Result.ok(pageVo);
}
@Override
public void exportHistoryRoute(HistoryRouteConditionParam param, HttpServletResponse response) {
Result<PageVo<HistoryRouteVo>> result = findByCondition(param);
if (Status.OK.value() != result.getStatus()) {
return;
}
List<HistoryRouteExcel> excelList = result
.getBody()
.getData()
.stream()
.map(HistoryRouteExcel::transform)
.collect(Collectors.toList());
try (
DefaultStreamExcelBuilder<HistoryRouteExcel> streamExcelBuilder = DefaultStreamExcelBuilder
.of(HistoryRouteExcel.class)
.threadPool(Executors.newFixedThreadPool(2))
.rowHeight(14)
.titleRowHeight(14)
.style(
"cell->vertical-align:center;text-align:center",
"title->vertical-align:center;text-align:center;font-weight:bold;font-family:等线"
)
.start()
) {
streamExcelBuilder.append(excelList);
String fileName = URLEncoder.encode("历史轨迹表.xlsx", StandardCharsets.UTF_8);
response.setContentType("application/octet-stream");
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
OutputStream out = response.getOutputStream();
Workbook workbook = streamExcelBuilder.fixedTitles().build();
workbook.write(out);
workbook.close();
out.flush();
out.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new RuntimeException("报警类型列表导出失败: " + e.getMessage());
}
}
private Specification<LocationLog> getSpecification(HistoryRouteConditionParam param) {
return (root, query, criteriaBuilder) -> {
ArrayList<Predicate> list = new ArrayList<>();
if (param.getMapId() != null) {
list.add(criteriaBuilder.equal(root.get("areaId"), param.getMapId()));
}
if (param.getUserId() != null) {
list.add(criteriaBuilder.equal(root.get("user"), param.getUserId()));
}
if (param.getBeginTime() != null) {
list.add(criteriaBuilder.greaterThanOrEqualTo(root.get("locationTime"), param.getBeginTime()));
}
if (param.getEndTime() != null) {
list.add(criteriaBuilder.lessThanOrEqualTo(root.get("locationTime"), param.getEndTime()));
}
Predicate[] array = list.toArray(new Predicate[0]);
return criteriaBuilder.and(array);
};
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.district;
import com.yiring.app.param.district.DistrictAddParam;
import com.yiring.app.param.district.DistrictModifyParam;
import com.yiring.app.vo.district.DistrictVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.vo.PageVo;
/**
* 区域信息service
* @author tml
* @version 1.0
* @date 2022/4/26 13:42
*/
public interface DistrictService {
/**
* 添加一个区域信息
* @param param 区域信息
* @return 是否成功
*/
Result<String> addDistrict(DistrictAddParam param);
/**
* 修改一条区域信息
* @param param 区域信息
* @return 是否成功
*/
Result<String> modifyDistrict(DistrictModifyParam param);
/**
* 删除一条区域信息
* @param idParam 区域id
* @return 是否成功
*/
Result<String> removeDistrict(IdParam idParam);
/**
* 根据名称模糊查询
* @param name 名称
* @return 区域信息
*/
Result<PageVo<DistrictVo>> findByNameLike(String name);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.district.impl;
import com.yiring.app.domain.district.District;
import com.yiring.app.domain.district.DistrictRepository;
import com.yiring.app.param.district.DistrictAddParam;
import com.yiring.app.param.district.DistrictModifyParam;
import com.yiring.app.service.district.DistrictService;
import com.yiring.app.util.JpaUtil;
import com.yiring.app.vo.district.DistrictVo;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam;
import com.yiring.common.util.Commons;
import com.yiring.common.vo.PageVo;
import java.util.List;
import java.util.Optional;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author tml
* @version 1.0
* @date 2022/4/26 13:53
*/
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class DistrictServiceImpl implements DistrictService {
@Resource
private DistrictRepository districtRepository;
@Override
public Result<String> addDistrict(DistrictAddParam param) {
Boolean exists = districtRepository.existsByName(param.getName());
if (exists) {
return Result.no(Status.EXPECTATION_FAILED, "区域名称已存在");
}
District district = param.transform();
districtRepository.save(district);
return Result.ok();
}
@Override
public Result<String> modifyDistrict(DistrictModifyParam param) {
List<District> list = districtRepository.findAllByName(param.getName());
District district = null;
if (list.size() > 1) {
log.warn("DistrictServiceImpl.modifyDistrict时查询出两条区域信息名称相同的数据,param:[{}]", param);
}
//校验名称是否重复
for (District item : list) {
if (item.getId().equals(param.getId())) {
district = item;
} else {
return Result.no(Status.EXPECTATION_FAILED, "区域名称已存在");
}
}
//如果上面查出来的数据没有这条要修改的数据,则根据id查询出来
if (district == null) {
Optional<District> optional = districtRepository.findById(param.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "修改的区域信息不存在");
}
district = optional.get();
}
//只修改要修改的值
JpaUtil.copyNotNullProperties(param, district);
return Result.ok();
}
@Override
public Result<String> removeDistrict(IdParam idParam) {
Optional<District> optional = districtRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "删除的区域信息不存在");
}
District district = optional.get();
district.setDeleted(true);
return Result.ok();
}
@Override
public Result<PageVo<DistrictVo>> findByNameLike(String name) {
List<District> list = districtRepository.findLikeName(name);
List<DistrictVo> voList = Commons.transform(list, DistrictVo.class);
PageVo<DistrictVo> pageVo = PageVo.build(voList, voList.size());
return Result.ok(pageVo);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.location.fence;
import com.yiring.app.param.location.fence.LocationFenceAddParam;
import com.yiring.app.param.location.fence.LocationFenceConditionParam;
import com.yiring.app.param.location.fence.LocationFenceModifyParam;
import com.yiring.app.vo.location.fence.LocationFenceSearchVo;
import com.yiring.app.vo.location.fence.LocationFenceVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import javax.validation.Valid;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 13:44
*/
public interface LocationFenceService {
/**
* 添加围栏信息
* @param param 围栏信息
* @return 是否成功
*/
Result<String> addLocationFence(LocationFenceAddParam param);
/**
* 修改围栏信息
* @param param 围栏信息
* @return 是否成功
*/
Result<String> modifyLocationFence(LocationFenceModifyParam param);
/**
* 删除围栏信息
* @param param 围栏id
* @return 是否成功
*/
Result<String> removeLocationFence(IdParam param);
/**
* 根据条件分页查询围栏信息
* @param conditionParam 条件
* @param pageParam 分页参数
* @return 是否成功
*/
Result<PageVo<LocationFenceVo>> findList(LocationFenceConditionParam conditionParam, PageParam pageParam);
/**
* 根据id查询围栏信息
* @param param id
* @return 详细信息
*/
Result<LocationFenceVo> findById(@Valid IdParam param);
/**
* 根据名称模糊查询围栏信息
* @param name 围栏名称
* @return 围栏信息
*/
Result<PageVo<LocationFenceSearchVo>> findByNameLike(String name);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.location.fence.impl;
import com.yiring.app.domain.location.LocationFence;
import com.yiring.app.domain.location.LocationFenceRepository;
import com.yiring.app.param.location.fence.LocationFenceAddParam;
import com.yiring.app.param.location.fence.LocationFenceConditionParam;
import com.yiring.app.param.location.fence.LocationFenceModifyParam;
import com.yiring.app.service.location.fence.LocationFenceService;
import com.yiring.app.util.JpaUtil;
import com.yiring.app.vo.location.fence.LocationFenceSearchVo;
import com.yiring.app.vo.location.fence.LocationFenceVo;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.persistence.criteria.Predicate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* 围栏信息service
* @author tml
* @version 1.0
* @date 2022/4/28 13:47
*/
@Service
@Transactional(rollbackFor = Exception.class)
@Slf4j
public class LocationFenceServiceImpl implements LocationFenceService {
@Resource
private LocationFenceRepository locationFenceRepository;
@Override
public Result<String> addLocationFence(LocationFenceAddParam param) {
Boolean exists = locationFenceRepository.existsByName(param.getName());
if (exists) {
return Result.no(Status.EXPECTATION_FAILED, "围栏名称已被占用");
}
LocationFence locationFence = param.transform();
locationFenceRepository.saveAndFlush(locationFence);
return Result.ok();
}
@Override
public Result<String> modifyLocationFence(LocationFenceModifyParam param) {
List<LocationFence> allByName = locationFenceRepository.findAllByName(param.getName());
if (allByName.size() > 1) {
log.warn("LocationFenceServiceImpl.modifyLocationFence时查询出两条围栏名称相同的数据,param:[{}]", param);
}
LocationFence locationFence = null;
for (LocationFence item : allByName) {
if (item.getId().equals(param.getId())) {
locationFence = item;
} else {
return Result.no(Status.EXPECTATION_FAILED, "围栏名称已被占用");
}
}
if (locationFence == null) {
Optional<LocationFence> optional = locationFenceRepository.findById(param.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "要修改的围栏信息不存在");
}
locationFence = optional.get();
}
JpaUtil.copyNotNullProperties(param, locationFence);
return Result.ok();
}
@Override
public Result<String> removeLocationFence(IdParam param) {
Optional<LocationFence> optional = locationFenceRepository.findById(param.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "要删除的围栏信息不存在");
}
optional.get().setDeleted(true);
return Result.ok();
}
@Override
public Result<PageVo<LocationFenceVo>> findList(LocationFenceConditionParam conditionParam, PageParam pageParam) {
Specification<LocationFence> specification = (root, query, criteriaBuilder) -> {
ArrayList<Predicate> list = new ArrayList<>();
if (conditionParam.getMapId() != null) {
list.add(criteriaBuilder.equal(root.get("mapId"), conditionParam.getMapId()));
}
if (conditionParam.getFenceType() != null) {
list.add(criteriaBuilder.equal(root.get("fenceType"), conditionParam.getFenceType()));
}
Predicate[] array = list.toArray(new Predicate[0]);
return criteriaBuilder.and(array);
};
Pageable pageable = PageParam.toPageable(pageParam);
Page<LocationFence> fencePage = locationFenceRepository.findAll(specification, pageable);
List<LocationFenceVo> voList = fencePage.get().map(LocationFenceVo::transform).collect(Collectors.toList());
PageVo<LocationFenceVo> pageVo = PageVo.build(voList, fencePage.getTotalElements());
return Result.ok(pageVo);
}
@Override
public Result<LocationFenceVo> findById(IdParam param) {
Optional<LocationFence> optional = locationFenceRepository.findById(param.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "查询的围栏信息不存在");
}
LocationFence fence = optional.get();
LocationFenceVo fenceVo = LocationFenceVo.transform(fence);
return Result.ok(fenceVo);
}
@Override
public Result<PageVo<LocationFenceSearchVo>> findByNameLike(String name) {
List<LocationFence> list = locationFenceRepository.findLikeName(name);
List<LocationFenceSearchVo> voList = list
.stream()
.map(LocationFenceSearchVo::transform)
.collect(Collectors.toList());
PageVo<LocationFenceSearchVo> pageVo = PageVo.build(voList, voList.size());
return Result.ok(pageVo);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.location.rule;
import com.yiring.app.param.location.rule.LocationAlarmRuleAddParam;
import com.yiring.app.param.location.rule.LocationAlarmRuleModifyParam;
import com.yiring.app.param.location.rule.LocationAlarmRuleParam;
import com.yiring.app.vo.IdNameVo;
import com.yiring.app.vo.location.rule.LocationAlarmRuleVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import javax.servlet.http.HttpServletResponse;
/**
* @author tml
* @version 1.0
* @date 2022/5/5 16:55
*/
public interface LocationAlarmRuleService {
/**
* 添加一条规则
* @param param 规则信息
* @return 是否成功
*/
Result<String> addRule(LocationAlarmRuleAddParam param);
/**
* 修改一条规则
* @param param 规则信息
* @return 是否成功
*/
Result<String> modifyRule(LocationAlarmRuleModifyParam param);
/**
* 删除一条规则
* @param idParam 规则id
* @return 是否成功
*/
Result<String> removeRule(IdParam idParam);
/**
* 根据id查询规则
* @param idParam 规则id
* @return 规则信息
*/
Result<LocationAlarmRuleVo> findById(IdParam idParam);
/**
* 根据条件查询规则信息
* @param param 条件
* @param pageParam 分页参数
* @return 规则信息
*/
Result<PageVo<LocationAlarmRuleVo>> findByCondition(LocationAlarmRuleParam param, PageParam pageParam);
/**
* 导出电子围栏规则
* @param param 条件
* @param response response
* @param pageParam 分页参数
*/
void exportAlarmRule(LocationAlarmRuleParam param, HttpServletResponse response, PageParam pageParam);
/**
* 根据电子围栏名称模糊查询围栏id和名称
* @param name 名称
* @return 围栏id和名称
*/
Result<PageVo<IdNameVo>> findFenceList(String name);
/**
* 查询报警类型下拉框
* @return 报警类型列表
*/
Result<PageVo<IdNameVo>> findAlarmTypeList();
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.location.rule;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.app.param.location.rule.LocationFenceRuleModifyParam;
import com.yiring.app.vo.location.rule.LocationFenceRuleVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 11:27
*/
public interface LocationFenceRuleService {
/**
* 添加一条规则
* @param param 规则信息
* @return 是否成功
*/
Result<String> addRule(LocationFenceRuleAddParam param);
/**
* 修改一条规则
* @param param 规则信息
* @return 是否成
*/
Result<String> modifyRule(LocationFenceRuleModifyParam param);
/**
* 删除一条规则
* @param idParam 规则id
* @return 是否成功
*/
Result<String> removeRule(IdParam idParam);
/**
* 根据id查询一条规则信息
* @param idParam 规则id
* @return 规则信息
*/
Result<LocationFenceRuleVo> findRule(IdParam idParam);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.location.rule.impl;
import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder;
import com.yiring.app.domain.alarm.AlarmType;
import com.yiring.app.domain.alarm.AlarmTypeRepository;
import com.yiring.app.domain.location.LocationAlarmRule;
import com.yiring.app.domain.location.LocationAlarmRuleRepository;
import com.yiring.app.domain.location.LocationFence;
import com.yiring.app.domain.location.LocationFenceRepository;
import com.yiring.app.excel.location.LocationAlarmRuleExcel;
import com.yiring.app.param.location.rule.LocationAlarmRuleAddParam;
import com.yiring.app.param.location.rule.LocationAlarmRuleModifyParam;
import com.yiring.app.param.location.rule.LocationAlarmRuleParam;
import com.yiring.app.service.location.rule.LocationAlarmRuleService;
import com.yiring.app.util.JpaUtil;
import com.yiring.app.vo.IdNameVo;
import com.yiring.app.vo.location.rule.LocationAlarmRuleVo;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.persistence.criteria.Predicate;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
/**
* @author tml
* @version 1.0
* @date 2022/5/5 16:59
*/
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class LocationAlarmRuleServiceImpl implements LocationAlarmRuleService {
@Resource
private LocationAlarmRuleRepository locationAlarmRuleRepository;
@Resource
private LocationFenceRepository locationFenceRepository;
@Resource
private AlarmTypeRepository alarmTypeRepository;
@Override
public Result<String> addRule(LocationAlarmRuleAddParam param) {
LocationAlarmRule locationAlarmRule = param.transform();
locationAlarmRuleRepository.saveAndFlush(locationAlarmRule);
return Result.ok();
}
@Override
public Result<String> modifyRule(LocationAlarmRuleModifyParam param) {
LocationAlarmRule locationAlarmRule = param.transform();
Optional<LocationAlarmRule> optional = locationAlarmRuleRepository.findById(param.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "要修改的规则不存在");
}
JpaUtil.copyNotNullProperties(locationAlarmRule, optional.get());
return Result.ok();
}
@Override
public Result<String> removeRule(IdParam idParam) {
Optional<LocationAlarmRule> optional = locationAlarmRuleRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "要修改的规则不存在");
}
optional.get().setDeleted(true);
return Result.ok();
}
@Override
public Result<LocationAlarmRuleVo> findById(IdParam idParam) {
Optional<LocationAlarmRule> optional = locationAlarmRuleRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "查询的规则不存在");
}
LocationAlarmRuleVo ruleVo = LocationAlarmRuleVo.transform(optional.get());
return Result.ok(ruleVo);
}
@Override
public Result<PageVo<LocationAlarmRuleVo>> findByCondition(LocationAlarmRuleParam param, PageParam pageParam) {
Pageable pageable = PageParam.toPageable(pageParam);
Specification<LocationAlarmRule> specification = getSpecification(param);
Set<Integer> informManner = param.getInformManner();
if (CollectionUtils.isEmpty(informManner)) {
Page<LocationAlarmRule> rulePage = locationAlarmRuleRepository.findAll(specification, pageable);
List<LocationAlarmRuleVo> voList = rulePage
.get()
.map(LocationAlarmRuleVo::transform)
.collect(Collectors.toList());
PageVo<LocationAlarmRuleVo> pageVo = PageVo.build(voList, rulePage.getTotalElements());
return Result.ok(pageVo);
}
List<LocationAlarmRule> list = locationAlarmRuleRepository.findAll(specification, pageable.getSort());
List<LocationAlarmRule> ruleList = list
.stream()
.filter(e -> {
for (Integer item : informManner) {
boolean contains = e.getInformManner().contains(item.toString());
if (!contains) {
return false;
}
}
return true;
})
.collect(Collectors.toList());
int pageBegin = (pageParam.getPageNo() - 1) * pageParam.getPageSize();
int pageEnd = pageBegin + 10;
if (pageBegin > ruleList.size()) {
return Result.no(Status.EXPECTATION_FAILED, "分页参数异常");
}
if (pageEnd > ruleList.size()) {
pageEnd = ruleList.size();
}
List<LocationAlarmRule> pageList = ruleList.subList(pageBegin, pageEnd);
List<LocationAlarmRuleVo> page = pageList
.stream()
.map(LocationAlarmRuleVo::transform)
.collect(Collectors.toList());
PageVo<LocationAlarmRuleVo> pageVo = PageVo.build(page, ruleList.size());
return Result.ok(pageVo);
}
@Override
public void exportAlarmRule(LocationAlarmRuleParam param, HttpServletResponse response, PageParam pageParam) {
Result<PageVo<LocationAlarmRuleVo>> result = findByCondition(param, pageParam);
if (Status.OK.value() != result.getStatus()) {
return;
}
List<LocationAlarmRuleExcel> excelList = result
.getBody()
.getData()
.stream()
.map(LocationAlarmRuleExcel::transform)
.collect(Collectors.toList());
try (
DefaultStreamExcelBuilder<LocationAlarmRuleExcel> streamExcelBuilder = DefaultStreamExcelBuilder
.of(LocationAlarmRuleExcel.class)
.threadPool(Executors.newFixedThreadPool(2))
.rowHeight(14)
.titleRowHeight(14)
.style(
"cell->vertical-align:center;text-align:center",
"title->vertical-align:center;text-align:center;font-weight:bold;font-family:等线"
)
.start()
) {
streamExcelBuilder.append(excelList);
String fileName = URLEncoder.encode("电子围栏报警规则表.xlsx", StandardCharsets.UTF_8);
response.setContentType("application/octet-stream");
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
OutputStream out = response.getOutputStream();
Workbook workbook = streamExcelBuilder.fixedTitles().build();
workbook.write(out);
workbook.close();
out.flush();
out.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new RuntimeException("报警类型列表导出失败: " + e.getMessage());
}
}
@Override
public Result<PageVo<IdNameVo>> findFenceList(String name) {
List<LocationFence> likeName = locationFenceRepository.findLikeName(name);
List<IdNameVo> voList = likeName
.stream()
.map(e -> new IdNameVo(e.getId(), e.getName()))
.collect(Collectors.toList());
PageVo<IdNameVo> pageVo = PageVo.build(voList, voList.size());
return Result.ok(pageVo);
}
@Override
public Result<PageVo<IdNameVo>> findAlarmTypeList() {
List<AlarmType> all = alarmTypeRepository.findAll();
List<IdNameVo> voList = all
.stream()
.map(e -> new IdNameVo(e.getId(), e.getName()))
.collect(Collectors.toList());
PageVo<IdNameVo> pageVo = PageVo.build(voList, voList.size());
return Result.ok(pageVo);
}
private Specification<LocationAlarmRule> getSpecification(LocationAlarmRuleParam param) {
return (root, query, criteriaBuilder) -> {
List<Predicate> list = new ArrayList<>();
if (param.getMapId() != null) {
list.add(criteriaBuilder.equal(root.get("mapId"), param.getMapId()));
}
if (param.getFenceId() != null) {
list.add(criteriaBuilder.equal(root.get("locationFence"), param.getFenceId()));
}
Predicate[] array = list.toArray(new Predicate[0]);
return criteriaBuilder.and(array);
};
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.location.rule.impl;
import com.yiring.app.domain.location.LocationFenceRule;
import com.yiring.app.domain.location.LocationFenceRuleRepository;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.app.param.location.rule.LocationFenceRuleModifyParam;
import com.yiring.app.service.location.rule.LocationFenceRuleService;
import com.yiring.app.util.JpaUtil;
import com.yiring.app.vo.location.rule.LocationFenceRuleVo;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam;
import java.util.Optional;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 11:39
*/
@Service
@Transactional(rollbackFor = Exception.class)
@Slf4j
public class LocationFenceRuleServiceImpl implements LocationFenceRuleService {
@Resource
private LocationFenceRuleRepository locationFenceRuleRepository;
@Override
public Result<String> addRule(LocationFenceRuleAddParam param) {
LocationFenceRule locationFenceRule = param.transform();
locationFenceRuleRepository.saveAndFlush(locationFenceRule);
return Result.ok();
}
@Override
public Result<String> modifyRule(LocationFenceRuleModifyParam param) {
LocationFenceRule locationFenceRule = param.transform();
Optional<LocationFenceRule> optional = locationFenceRuleRepository.findById(param.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "要修改的规则不存在");
}
JpaUtil.copyNotNullProperties(locationFenceRule, optional.get());
return Result.ok();
}
@Override
public Result<String> removeRule(IdParam idParam) {
Optional<LocationFenceRule> optional = locationFenceRuleRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "要删除的规则不存在");
}
optional.get().setDeleted(true);
return Result.ok();
}
@Override
public Result<LocationFenceRuleVo> findRule(IdParam idParam) {
Optional<LocationFenceRule> optional = locationFenceRuleRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.EXPECTATION_FAILED, "要删除的规则不存在");
}
LocationFenceRuleVo ruleVo = LocationFenceRuleVo.transform(optional.get());
return Result.ok(ruleVo);
}
}
......@@ -4,9 +4,11 @@ package com.yiring.app.service.video;
import com.yiring.app.domain.video.Video;
import com.yiring.app.param.video.VideoParam;
import com.yiring.app.param.video.VideoQueryParam;
import com.yiring.app.vo.video.VideoNameVo;
import com.yiring.app.vo.video.VideoVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.IndexParam;
import com.yiring.common.vo.PageVo;
import java.awt.*;
import javax.servlet.http.HttpServletResponse;
......@@ -88,4 +90,13 @@ public interface VideoService {
* @return 是否成功
*/
Result<String> importVideo(MultipartFile file);
/**
* 根据监控点位名称模糊查询
* @author tzl
* @date 2022/4/27 13:51
* @param indexParam 入参
* @return com.yiring.common.core.Result<com.yiring.app.vo.video.VideoNameVo>
*/
Result<VideoNameVo> findByVideoNameLike(IndexParam indexParam);
}
......@@ -16,10 +16,12 @@ import com.yiring.app.param.video.VideoParam;
import com.yiring.app.param.video.VideoQueryParam;
import com.yiring.app.service.video.VideoService;
import com.yiring.app.util.GeoUtils;
import com.yiring.app.vo.video.VideoNameVo;
import com.yiring.app.vo.video.VideoVo;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.IndexParam;
import com.yiring.common.vo.PageVo;
import feign.Response;
import java.io.IOException;
......@@ -358,6 +360,14 @@ public class VideoServiceImpl implements VideoService {
return Result.ok();
}
@Override
public Result<VideoNameVo> findByVideoNameLike(IndexParam indexParam) {
VideoNameVo videoNameVo = new VideoNameVo();
Video byVideoNameLike = videoRepository.findByVideoNameLike(indexParam.getStr());
BeanUtils.copyProperties(byVideoNameLike, videoNameVo);
return Result.ok(videoNameVo);
}
boolean has(String uuid) {
Video video = Video.builder().uuid(uuid).build();
return videoRepository.count(Example.of(video)) > 0;
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.car;
package com.yiring.app.service.visitor;
import com.yiring.app.domain.car.Car;
import com.yiring.app.param.car.CarParam;
import com.yiring.app.param.car.CarQueryParam;
import com.yiring.app.vo.car.CarVo;
import com.yiring.app.domain.visitor.Car;
import com.yiring.app.param.visitor.CarQueryParam;
import com.yiring.app.vo.visitor.CarVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.vo.PageVo;
......@@ -19,19 +18,18 @@ public interface CarService {
/**
* 添加车辆来访信息
*
* @param carParam CarParam
* @param car Car
* @return 车辆来访信息id
*/
Result<Long> saveCarInfo(CarParam carParam);
Result<Long> saveCarInfo(Car car);
/**
* 修改车辆来访信息
*
* @param carParam CarParam
* @param idParam IdParam
* @param car Car
* @return 修改的车辆来访信息id
*/
Result<Long> updateCarInfo(CarParam carParam, IdParam idParam);
Result<Long> updateCarInfo(Car car);
/**
* 收卡
......@@ -81,21 +79,21 @@ public interface CarService {
*/
void export(CarQueryParam carParam, HttpServletResponse response);
/**
* 检查是否存在相同车牌号登记
*
* @param param String 车牌号码
* @return 是否存在
*/
boolean hasCarInfoByCarNum(String param);
/**
* 检查是否存在相同手机号码登记
*
* @param param String 手机号码
* @return 是否存在
*/
boolean hasCarInfoByMobile(String param);
// /**
// * 检查是否存在相同车牌号登记
// *
// * @param param String 车牌号码
// * @return 是否存在
// */
// boolean hasCarInfoByCarNum(String param);
//
// /**
// * 检查是否存在相同手机号码登记
// *
// * @param param String 手机号码
// * @return 是否存在
// */
// boolean hasCarInfoByMobile(String param);
/**
* 筛选条件
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.visitor;
import com.yiring.app.param.visitor.InvitationParam;
import com.yiring.app.param.visitor.InvitationQueryParam;
import com.yiring.app.vo.visitor.InvitationVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.vo.PageVo;
import javax.servlet.http.HttpServletResponse;
/**
* @author tzl
* @date 2022/4/24 16:57
*/
public interface InvitationService {
/**
* 发起邀请
* @param invitationParam 新增邀请入参
* @return 是否成功
*/
Result<String> saveInv(InvitationParam invitationParam);
/**
* 修改邀请
* @date 2022/4/24 17:50
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> updateInv(InvitationParam invitationParam, IdParam idParam);
/**
* 删除邀请
* @date 2022/4/24 17:52
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> deleteInv(IdParam idParam);
/**
* 分页
* @date 2022/4/24 17:56
* @return com.yiring.common.core.Result<com.yiring.common.vo.PageVo<java.lang.String>>
*/
Result<PageVo<InvitationVo>> pageInv(InvitationQueryParam invitationQueryParam);
/**
* 撤回邀请
* @author tzl
* @date 2022/4/25 11:30
* @param idParam 主键id
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> recallInv(IdParam idParam);
/**
* 发送邀请
* @author tzl
* @date 2022/4/25 11:31
* @param idParam 主键id
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> sendInv(IdParam idParam);
/**
* 导出邀请信息
* @author tzl
* @date 2022/4/25 11:34
* @param invitationQueryParam 筛选条件
*/
void exportInv(InvitationQueryParam invitationQueryParam, HttpServletResponse response);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.visitor;
import com.yiring.app.param.visitor.VisitorListParam;
import com.yiring.app.param.visitor.VisitorParam;
import com.yiring.app.param.visitor.VisitorQueryParam;
import com.yiring.app.vo.visitor.VisitorVo;
......@@ -22,19 +21,12 @@ public interface VisitorService {
*/
Result<String> saveVisitor(VisitorParam visitorParam);
/**
* 访客批量新增
* @param visitorListParam 批量访客新增入参
* @return 是否成功
*/
Result<String> saveVisitor(VisitorListParam visitorListParam);
/**
* 访客删除
* @param idParam 主键id
* @return 是否成功
*/
Result<String> deleteVisitor(IdParam idParam);
// /**
// * 访客删除
// * @param idParam 主键id
// * @return 是否成功
// */
// Result<String> deleteVisitor(IdParam idParam);
/**
* 修改访客信息
......@@ -79,4 +71,13 @@ public interface VisitorService {
* @return 是否成功
*/
Result<String> cardRec(IdParam idParam);
/**
* 查看详情,并且带出该访客的随访人信息
* @author tzl
* @date 2022/4/25 16:48
* @param idParam 主键id
* @return com.yiring.common.core.Result<com.yiring.app.vo.visitor.VisitorVo>
*/
Result<VisitorVo> selectInfo(IdParam idParam);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.car.impl;
package com.yiring.app.service.visitor.impl;
import cn.hutool.core.util.StrUtil;
import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder;
import com.yiring.app.domain.car.Car;
import com.yiring.app.domain.car.CarRepository;
import com.yiring.app.excel.car.CarExportExcel;
import com.yiring.app.param.car.CarParam;
import com.yiring.app.param.car.CarQueryParam;
import com.yiring.app.service.car.CarService;
import com.yiring.app.vo.car.CarVo;
import com.yiring.app.domain.visitor.Car;
import com.yiring.app.domain.visitor.CarRepository;
import com.yiring.app.excel.visitor.CarExportExcel;
import com.yiring.app.param.visitor.CarQueryParam;
import com.yiring.app.service.visitor.CarService;
import com.yiring.app.vo.visitor.CarVo;
import com.yiring.auth.domain.role.Role;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
......@@ -49,50 +48,37 @@ public class CarServiceImpl implements CarService {
CarRepository carRepository;
@Override
public Result<Long> saveCarInfo(CarParam carParam) {
// 检查车牌号是否已存在
if (hasCarInfoByCarNum(carParam.getCarNum())) {
public Result<Long> saveCarInfo(Car car) {
// 检查车牌号车辆是否已经在园内
if (carRepository.hasCarInfoByCarNum(car.getCarNum()) > 0) {
return Result.no(Status.BAD_REQUEST, "您的车牌号已存在");
}
// 检查司机手机号码号是否已存在
if (hasCarInfoByMobile(carParam.getDriverMobile())) {
return Result.no(Status.BAD_REQUEST, "您的联系方式已存在");
}
Car car = Car
.builder()
.carNum(carParam.getCarNum())
.carType(carParam.getCarType())
.driverMobile(carParam.getDriverMobile())
.driverName(carParam.getDriverName())
.intervieweeId(carParam.getIntervieweeId())
.orgId(carParam.getOrgId())
.reason(carParam.getReason())
.createTime(LocalDateTime.now())
.build();
// Car car = Car
// .builder()
// .carNum(carParam.getCarNum())
// .carType(carParam.getCarType())
// .labelCard(carParam.getLabelCard())
// .createTime(LocalDateTime.now())
// // .visitorId(carParam.getVisitorId())
// .build();
Car carReuslt = carRepository.saveAndFlush(car);
return Result.ok(carReuslt.getId());
}
@Override
public Result<Long> updateCarInfo(CarParam carParam, IdParam idParam) {
Optional<Car> optional = carRepository.findById(idParam.getId());
public Result<Long> updateCarInfo(Car car) {
Optional<Car> optional = carRepository.findById(car.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Car car = optional.get();
if (!car.getCarNum().equals(carParam.getCarNum())) {
Car carOptional = optional.get();
if (!car.getCarNum().equals(carOptional.getCarNum())) {
// 当修改车牌号时才检查重复
if (hasCarInfoByCarNum(carParam.getCarNum())) {
return Result.no(Status.BAD_REQUEST, "您的车牌号信息已存在");
if (carRepository.hasCarInfoByCarNum(carOptional.getCarNum()) > 0) {
return Result.no(Status.BAD_REQUEST, "您的车牌号已在园区内");
}
}
if (!car.getDriverMobile().equals(carParam.getDriverMobile())) {
// 当修改联系方式时才检查重复
if (hasCarInfoByMobile(carParam.getDriverMobile())) {
return Result.no(Status.BAD_REQUEST, "您的联系方式已存在");
}
}
BeanUtils.copyProperties(carParam, car);
BeanUtils.copyProperties(car, car);
Car carReuslt = carRepository.saveAndFlush(car);
return Result.ok(carReuslt.getId());
}
......@@ -224,20 +210,6 @@ public class CarServiceImpl implements CarService {
}
@Override
public boolean hasCarInfoByCarNum(String param) {
Car entity = Car.builder().carNum(param).build();
long count = carRepository.count(Example.of(entity));
return count > 0;
}
@Override
public boolean hasCarInfoByMobile(String param) {
Car entity = Car.builder().driverMobile(param).build();
long count = carRepository.count(Example.of(entity));
return count > 0;
}
@Override
public Specification<Car> condition(CarQueryParam carParam) {
return (root, query, criteriaBuilder) -> {
List<Predicate> list = new ArrayList<>();
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.visitor.impl;
import cn.hutool.core.util.StrUtil;
import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder;
import com.yiring.app.domain.visitor.Invitation;
import com.yiring.app.domain.visitor.InvitationRepository;
import com.yiring.app.domain.visitor.Visitor;
import com.yiring.app.domain.visitor.VisitorRepository;
import com.yiring.app.excel.visitor.InvitationExportExcel;
import com.yiring.app.param.visitor.InvitationParam;
import com.yiring.app.param.visitor.InvitationQueryParam;
import com.yiring.app.service.visitor.InvitationService;
import com.yiring.app.vo.visitor.InvitationVo;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam;
import com.yiring.common.vo.PageVo;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.Predicate;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.*;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/4/24 17:05
*/
@Slf4j
@Transactional(rollbackFor = RuntimeException.class)
@Service
public class InvitationServiceImpl implements InvitationService {
@Resource
InvitationRepository invitationRepository;
@Resource
VisitorRepository visitorRepository;
@Override
public Result<String> saveInv(InvitationParam invitationParam) {
Visitor visitor = new Visitor();
BeanUtils.copyProperties(invitationParam, visitor);
visitor.setCreateTime(LocalDateTime.now());
//设置创建时间和默认状态
Invitation invitation = Invitation
.builder()
.createTime(LocalDateTime.now())
.status("已发送")
.visitor(visitor)
.InvitationMethod(invitationParam.getInvitationMethod())
.numOfVisitor(invitationParam.getNumOfVisitor())
.inviterId(invitationParam.getInviterId())
.build();
//添加一条访客未到访信息
if (invitationParam.getInvitationMethod().equals("个人")) {
visitor.setVisitorSource("邀请个人");
} else {
visitor.setVisitorSource("邀请公司");
}
visitorRepository.saveAndFlush(visitor);
invitationRepository.saveAndFlush(invitation);
//短信通知该手机用户
return Result.ok();
}
@Override
public Result<String> updateInv(InvitationParam invitationParam, IdParam idParam) {
Optional<Invitation> optional = invitationRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Invitation invitation = optional.get();
Visitor visitor2 = invitation.getVisitor();
BeanUtils.copyProperties(invitationParam, invitation);
invitationRepository.saveAndFlush(invitation);
//修改访客未到访信息
if (visitor2 == null) {
// 为空添加
visitor2 = new Visitor();
}
BeanUtils.copyProperties(invitationParam, visitor2);
visitorRepository.saveAndFlush(visitor2);
//短信通知该手机用户
//
//
return Result.ok();
}
@Override
public Result<String> deleteInv(IdParam idParam) {
Optional<Invitation> optional = invitationRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Invitation invitation = optional.get();
invitationRepository.delete(invitation);
visitorRepository.delete(invitation.getVisitor());
//短信通知该手机用户邀请取消
//
//
return Result.ok();
}
@Override
public Result<PageVo<InvitationVo>> pageInv(InvitationQueryParam invitationQueryParam) {
PageVo<InvitationVo> resultVo;
//排序
Sort sort = Sort.by(Sort.Order.desc(Visitor.Fields.createTime));
if (Objects.nonNull(invitationQueryParam.getPageNo()) && Objects.nonNull(invitationQueryParam.getPageSize())) {
//分页
Pageable pageable = PageRequest.of(
invitationQueryParam.getPageNo() - 1,
invitationQueryParam.getPageSize()
);
Page<Invitation> all = invitationRepository.findAll(condition(invitationQueryParam), pageable);
List<InvitationVo> data = all
.get()
.map(invitation -> {
InvitationVo vo = new InvitationVo();
BeanUtils.copyProperties(invitation, vo);
return vo;
})
.collect(Collectors.toList());
resultVo = PageVo.build(data, all.getTotalElements());
} else {
List<Invitation> all = invitationRepository.findAll(condition(invitationQueryParam), sort);
List<InvitationVo> data = all
.stream()
.map(invitation -> {
InvitationVo vo = new InvitationVo();
BeanUtils.copyProperties(invitation, vo);
return vo;
})
.collect(Collectors.toList());
resultVo = PageVo.build(data, data.size());
}
return Result.ok(resultVo);
}
@Override
public Result<String> recallInv(IdParam idParam) {
Optional<Invitation> optional = invitationRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Invitation invitation = optional.get();
if (invitation.getVisitor().getAppOfVisitTime().isBefore(LocalDateTime.now())) {
return Result.no(Status.BAD_REQUEST, "预约时间已过");
}
invitation.setStatus("已撤回");
Visitor visitor = invitation.getVisitor();
// 逻辑删除对应访客信息
if (visitor != null) {
visitor.setDeleted("Y");
visitorRepository.saveAndFlush(visitor);
}
invitationRepository.saveAndFlush(invitation);
return Result.ok();
}
@Override
public Result<String> sendInv(IdParam idParam) {
Optional<Invitation> optional = invitationRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Invitation invitation = optional.get();
if (invitation.getVisitor().getAppOfVisitTime().isBefore(LocalDateTime.now())) {
return Result.no(Status.BAD_REQUEST, "预约时间已过");
}
invitation.setStatus("已发送");
//添加访客信息
Visitor visitor = invitation.getVisitor();
// 逻辑删除对应访客信息
if (visitor != null) {
visitor.setDeleted("N");
visitorRepository.saveAndFlush(visitor);
}
invitationRepository.saveAndFlush(invitation);
return Result.ok();
}
@Override
public void exportInv(InvitationQueryParam invitationQueryParam, HttpServletResponse response) {
List<Invitation> invitations = invitationRepository.findAll(condition(invitationQueryParam));
List<InvitationExportExcel> invitationExportExcels = invitations
.stream()
.map(invitation -> {
InvitationExportExcel invitationExportExcel = new InvitationExportExcel();
BeanUtils.copyProperties(invitation, invitationExportExcel);
BeanUtils.copyProperties(invitation.getVisitor(), invitationExportExcel);
return invitationExportExcel;
})
.toList();
try (
DefaultStreamExcelBuilder<InvitationExportExcel> defaultStreamExcelBuilder = DefaultStreamExcelBuilder
.of(InvitationExportExcel.class)
.threadPool(Executors.newFixedThreadPool(2))
.rowHeight(14)
.titleRowHeight(14)
.widths(8)
.style(
"cell->vertical-align:center;text-align:center",
"title->vertical-align:center;text-align:center;font-weight:bold;font-family:等线"
)
.start()
) {
defaultStreamExcelBuilder.append(invitationExportExcels);
String fileName = URLEncoder.encode("邀请信息.xlsx", StandardCharsets.UTF_8);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
OutputStream out = response.getOutputStream();
Workbook workbook = defaultStreamExcelBuilder.fixedTitles().build();
workbook.write(out);
workbook.close();
out.flush();
out.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new RuntimeException("导出邀请信息失败: " + e.getMessage());
}
}
public Specification<Invitation> condition(InvitationQueryParam invitationQueryParam) {
return (root, query, criteriaBuilder) -> {
Join<Invitation, Visitor> join = root.join("visitor", JoinType.LEFT);
List<Predicate> list = new ArrayList<>();
if (StrUtil.isNotBlank(invitationQueryParam.getVisitorName())) {
list.add(
criteriaBuilder.like(
join.get(Visitor.Fields.visitorName).as(String.class),
"%" + invitationQueryParam.getVisitorName() + "%"
)
);
}
if (StrUtil.isNotBlank(invitationQueryParam.getVisitorMobile())) {
list.add(
criteriaBuilder.like(
join.get(Visitor.Fields.visitorMobile).as(String.class),
"%" + invitationQueryParam.getVisitorMobile() + "%"
)
);
}
if (StrUtil.isNotBlank(invitationQueryParam.getOrgId())) {
list.add(
criteriaBuilder.like(
join.get(Visitor.Fields.orgId).as(String.class),
"%" + invitationQueryParam.getOrgId() + "%"
)
);
}
if (StrUtil.isNotBlank(invitationQueryParam.getTaskType())) {
list.add(
criteriaBuilder.equal(
join.get(Visitor.Fields.taskType).as(String.class),
invitationQueryParam.getTaskType()
)
);
}
if (invitationQueryParam.getInviterId() != null) {
list.add(
criteriaBuilder.equal(
root.get(Invitation.Fields.inviterId).as(String.class),
invitationQueryParam.getInviterId()
)
);
}
if (
Objects.nonNull(invitationQueryParam.getAppOfVisitTimeStart()) &&
Objects.nonNull(invitationQueryParam.getAppOfVisitTimeEnd())
) {
//预约到访时间区间段查询
list.add(
criteriaBuilder.between(
join.get(Visitor.Fields.appOfVisitTime),
invitationQueryParam.getAppOfVisitTimeStart(),
invitationQueryParam.getAppOfVisitTimeEnd()
)
);
}
Predicate[] predicates = new Predicate[list.size()];
query.where(list.toArray(predicates));
return criteriaBuilder.and(list.toArray(predicates));
};
}
// /**
// * 查看被邀人手机号码是否已经发出邀请
// *
// * @param mobile 手机号码
// * @return boolean
// * @author tzl
// * @date 2022/4/24 17:27
// */
// public boolean hasVisitorMobile(String mobile) {
// Invitation invitation = Invitation.builder().visitorMobile(mobile).status("已发送").build();
// long count = invitationRepository.count(Example.of(invitation));
// return count > 0;
// }
}
......@@ -4,15 +4,16 @@ package com.yiring.app.service.visitor.impl;
import cn.hutool.core.util.StrUtil;
import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder;
import com.yiring.app.domain.appletUser.AppletUserRepository;
import com.yiring.app.domain.visitor.Car;
import com.yiring.app.domain.visitor.Visitor;
import com.yiring.app.domain.visitor.VisitorRepository;
import com.yiring.app.excel.visitor.VisitorExportExcel;
import com.yiring.app.param.visitor.VisitorInfoParam;
import com.yiring.app.param.visitor.VisitorListParam;
import com.yiring.app.param.visitor.VisitorParam;
import com.yiring.app.param.visitor.VisitorQueryParam;
import com.yiring.app.service.visitor.CarService;
import com.yiring.app.service.visitor.VisitorService;
import com.yiring.app.vo.visitor.VisitorVo;
import com.yiring.common.constant.RegEx;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam;
......@@ -51,97 +52,82 @@ public class VisitorServiceImpl implements VisitorService {
VisitorRepository visitorRepository;
@Resource
CarService carService;
@Resource
AppletUserRepository appletUserRepository;
@Override
public Result<String> saveVisitor(VisitorParam visitorParam) {
if (hasVisitorMobile(visitorParam.getVisitorMobile())) {
return Result.no(Status.BAD_REQUEST, "您输入的手机号码已经预约");
if (visitorParam.getMainVisitorId() != null) {
//如果主访人员id不为空,
Visitor optional = visitorRepository.findByIdAndDeleted(visitorParam.getMainVisitorId(), "N");
if (optional == null) {
return Result.no(Status.NOT_FOUND, "信息失效,请联系管理员");
}
if (hasCarNum(visitorParam.getVisitorCarNum())) {
return Result.no(Status.BAD_REQUEST, "您输入的身份证号码已经预约");
}
//设置创建时间和默认状态
Visitor visitor = Visitor.builder().createTime(LocalDateTime.now()).build();
BeanUtils.copyProperties(visitorParam, visitor);
visitorRepository.saveAndFlush(visitor);
return Result.ok();
}
@Override
public Result<String> saveVisitor(VisitorListParam visitorListParam) {
List<VisitorInfoParam> visitorInfos = visitorListParam.getVisitorInfos();
List<String> mobileList = new ArrayList<>();
List<String> carList = new ArrayList<>();
//如果存在重复身份证,电话号码,将其信息装入集合
visitorInfos.forEach(visitorInfoParam -> {
if (hasVisitorMobile(visitorInfoParam.getVisitorMobile())) {
mobileList.add(visitorInfoParam.getVisitorMobile());
}
if (hasCarNum(visitorInfoParam.getVisitorCarNum())) {
carList.add(visitorInfoParam.getVisitorCarNum());
}
});
if (mobileList.size() > 0) {
return Result.no(Status.BAD_REQUEST, mobileList + "手机号已经预约,请勿重复预约");
}
if (carList.size() > 0) {
return Result.no(Status.BAD_REQUEST, carList + "身份证已经预约,请勿重复预约");
}
List<Visitor> visitorList = new ArrayList<>();
//补全访客其他信息
visitorInfos.forEach(visitorInfoParam -> {
Visitor visitor = new Visitor();
BeanUtils.copyProperties(visitorInfoParam, visitor);
visitor.setOrgId(visitorListParam.getOrgId());
visitor.setNumOfVisitor(visitorListParam.getNumOfVisitor());
visitor.setReason(visitorListParam.getReason());
visitor.setIntervieweeId(visitorListParam.getIntervieweeId());
visitorList.add(visitor);
});
visitorRepository.saveAll(visitorList);
//通知用户登录微信小程序查看
//查看该手机是否已注册小程序
// visitorInfos.forEach(visitorInfoParam -> {
// if(appletUserRepository.countMobile(visitorInfoParam.getVisitorMobile())<1){
// 没有的情况下为qi
// }
// });
return Result.ok();
}
@Override
public Result<String> deleteVisitor(IdParam idParam) {
Optional<Visitor> optional = visitorRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
//如果有车, 填车辆信息,
if (visitorParam.getHasCar() == 1) {
//校验车辆必填信息
if (StrUtil.isBlank(visitorParam.getCarNum())) {
return Result.no(Status.BAD_REQUEST, "请输入车牌号码");
}
if (visitorParam.getCarNum().matches(RegEx.CARNUM)) {
return Result.no(Status.BAD_REQUEST, "请输入正确的车牌号码");
}
if (StrUtil.isBlank(visitorParam.getCarType())) {
return Result.no(Status.BAD_REQUEST, "请输入车辆类型");
}
if (StrUtil.isBlank(visitorParam.getLabelCard())) {
return Result.no(Status.BAD_REQUEST, "请输入车辆标签卡");
}
//需要判断标签卡是否有效
Car car = Car
.builder()
.carNum(visitorParam.getCarNum())
.carType(visitorParam.getCarType())
.labelCard(visitorParam.getLabelCard())
.createTime(LocalDateTime.now())
.build();
carService.saveCarInfo(car);
visitor.setCar(car);
}
visitorRepository.delete(optional.get());
visitorRepository.saveAndFlush(visitor);
return Result.ok();
}
@Override
public Result<String> updateVisitor(VisitorParam visitorParam, IdParam idParam) {
Optional<Visitor> optional = visitorRepository.findById(idParam.getId());
if (optional.isEmpty()) {
Visitor optional = visitorRepository.findByIdAndDeleted(idParam.getId(), "N");
if (optional == null) {
return Result.no(Status.NOT_FOUND);
}
Visitor visitor = optional.get();
if (!visitor.getVisitorCarNum().equals(visitorParam.getVisitorCarNum())) {
//当修改身份证时
if (hasCarNum(visitorParam.getVisitorCarNum())) {
return Result.no(Status.BAD_REQUEST, "您输入的身份证号码已经预约");
}
}
if (!visitor.getVisitorMobile().equals(visitorParam.getVisitorMobile())) {
//当修改手机号码时
if (hasVisitorMobile(visitorParam.getVisitorMobile())) {
return Result.no(Status.BAD_REQUEST, "您输入的手机号码已经预约");
//判断标签卡是否正确 生效
Car car = optional.getCar();
if (car != null) {
BeanUtils.copyProperties(visitorParam, car);
carService.updateCarInfo(car);
} else {
if (StrUtil.isNotBlank(visitorParam.getCarNum())) {
car =
Car
.builder()
.carNum(visitorParam.getCarNum())
.carType(visitorParam.getCarType())
.labelCard(visitorParam.getLabelCard())
.createTime(LocalDateTime.now())
.build();
optional.setCar(car);
carService.saveCarInfo(car);
} else {
optional.setCar(null);
}
}
BeanUtils.copyProperties(visitorParam, visitor);
visitorRepository.saveAndFlush(visitor);
BeanUtils.copyProperties(visitorParam, optional);
visitorRepository.saveAndFlush(optional);
return Result.ok();
}
......@@ -262,21 +248,26 @@ public class VisitorServiceImpl implements VisitorService {
return Result.ok();
}
public boolean hasCarNum(String carNum) {
Visitor visitor = Visitor.builder().visitorCarNum(carNum).labelCardStatus("1").build();
long count = visitorRepository.count(Example.of(visitor));
Visitor visitor1 = Visitor.builder().visitorCarNum(carNum).labelCardStatus("2").build();
long count1 = visitorRepository.count(Example.of(visitor1));
return count + count1 > 0;
@Override
public Result<VisitorVo> selectInfo(IdParam idParam) {
return null;
}
public boolean hasVisitorMobile(String mobile) {
Visitor visitor = Visitor.builder().visitorMobile(mobile).labelCardStatus("1").build();
long count = visitorRepository.count(Example.of(visitor));
Visitor visitor1 = Visitor.builder().visitorMobile(mobile).labelCardStatus("1").build();
long count1 = visitorRepository.count(Example.of(visitor1));
return count + count1 > 0;
}
// public boolean hasCarNum(String carNum) {
// Visitor visitor = Visitor.builder().visitorCarNum(carNum).labelCardStatus("1").build();
// long count = visitorRepository.count(Example.of(visitor));
// Visitor visitor1 = Visitor.builder().visitorCarNum(carNum).labelCardStatus("2").build();
// long count1 = visitorRepository.count(Example.of(visitor1));
// return count + count1 > 0;
// }
//
// public boolean hasVisitorMobile(String mobile) {
// Visitor visitor = Visitor.builder().visitorMobile(mobile).labelCardStatus("1").build();
// long count = visitorRepository.count(Example.of(visitor));
// Visitor visitor1 = Visitor.builder().visitorMobile(mobile).labelCardStatus("1").build();
// long count1 = visitorRepository.count(Example.of(visitor1));
// return count + count1 > 0;
// }
public Specification<Visitor> condition(VisitorQueryParam visitorQueryParam) {
return (root, query, criteriaBuilder) -> {
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.util;
import java.util.HashSet;
import java.util.Set;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
/**
* 复制非空属性值的工具类
*
* @author tml
* @version 0.1
* @date 2022/4/21 15:08
*/
public class JpaUtil {
public static void copyNotNullProperties(Object source, Object target) {
BeanUtils.copyProperties(source, target, getNullPropertyNames(source));
}
public static String[] getNullPropertyNames(Object source) {
final BeanWrapper src = new BeanWrapperImpl(source);
java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<>();
for (java.beans.PropertyDescriptor pd : pds) {
Object srcValue = src.getPropertyValue(pd.getName());
if (srcValue == null) {
emptyNames.add(pd.getName());
}
}
String[] result = new String[emptyNames.size()];
return emptyNames.toArray(result);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo;
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;
/**
* code-name格式数据Vo
* @author tml
* @version 1.0
* @date 2022/4/26 11:02
*/
@ApiModel("KeyValueVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CodeNameVo implements Serializable {
@Serial
private static final long serialVersionUID = -7565315836652536620L;
@ApiModelProperty(value = "code", example = "1", required = true)
private Integer code;
@ApiModelProperty(value = "name", example = "名称", required = true)
private String name;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo;
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;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 13:43
*/
@ApiModel("IdNameVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class IdNameVo implements Serializable {
@Serial
private static final long serialVersionUID = -8990274383112436122L;
@ApiModelProperty(value = "id", example = "1", required = true)
private Long id;
@ApiModelProperty(value = "name", example = "名称", required = true)
private String name;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.alarm;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
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 lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author tml
* @version 1.0
* @date 2022/4/27 11:55
*/
@ApiModel("AlarmTypeVo(报警信息)")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AlarmTypeVo implements Serializable {
@Serial
private static final long serialVersionUID = 4743016000753778197L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "报警类型id", example = "1518841086628335616")
private Long id;
@ApiModelProperty(value = "报警类型名称", example = "超员报警")
private String name;
@ApiModelProperty(value = "围栏类别code", example = "1")
private Integer fenceType;
@ApiModelProperty(value = "围栏类别名称", example = "普通围栏")
private String fenceTypeName;
@ApiModelProperty(value = "关联参数code", example = "1")
private Integer relevanceParam;
@ApiModelProperty(value = "关联参数名称", example = "最多人数")
private String relevanceParamName;
@ApiModelProperty(value = "备注", example = "备注")
private String comment;
public static AlarmTypeVo transform(AlarmType alarmType) {
return AlarmTypeVo
.builder()
.id(alarmType.getId())
.name(alarmType.getName())
.fenceType(alarmType.getFenceType())
.fenceTypeName(FenceTypeEnum.getByCode(alarmType.getFenceType()))
.relevanceParam(alarmType.getRelevanceParam())
.relevanceParamName(RelevanceParamEnum.getByCode(alarmType.getRelevanceParam()))
.comment(alarmType.getComment())
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.analysis.history;
import com.yiring.app.domain.location.LocationLog;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.locationtech.jts.geom.Point;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 14:18
*/
@Data
@Builder
@ApiModel("历史轨迹信息VO")
@NoArgsConstructor
@AllArgsConstructor
public class HistoryRouteVo implements Serializable {
@Serial
private static final long serialVersionUID = -5915541034872568334L;
@ApiModelProperty(value = "姓名", example = "张三")
private String name;
@ApiModelProperty(value = "工号", example = "ks2022")
private String uuid;
@ApiModelProperty(value = "经纬度")
private Point point;
@ApiModelProperty(value = "地图名称", example = "总图")
private String mapName;
@ApiModelProperty(value = "记录时间", example = "2022-05-06 14:00:00")
private LocalDateTime writeTime;
public static HistoryRouteVo transform(LocationLog locationLog) {
return HistoryRouteVo
.builder()
.name(locationLog.getUser().getRealName())
.uuid(locationLog.getUser().getUuid())
.point(locationLog.getPoint())
.writeTime(locationLog.getLocationTime())
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.district;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.domain.district.District;
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;
/**
* 区域信息VO
* @author tml
* @version 1.0
* @date 2022/4/27 9:10
*/
@ApiModel("DistrictVo(区域信息)")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DistrictVo implements Serializable {
@Serial
private static final long serialVersionUID = -4330628723553785529L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "区域id", example = "1518841086628335616")
private Long id;
@ApiModelProperty(value = "区域名称", example = "生产区域")
private String name;
@ApiModelProperty(value = "风险等级(区域颜色)", example = "f##0000")
private String riskGrade;
public static DistrictVo transform(District district) {
return DistrictVo
.builder()
.id(district.getId())
.name(district.getName())
.riskGrade(district.getRiskGrade())
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.location.fence;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.constant.alarm.FenceTypeEnum;
import com.yiring.app.domain.location.LocationFence;
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;
/**
* @author tml
* @version 1.0
* @date 2022/5/5 9:35
*/
@ApiModel("围栏信息检索VO")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class LocationFenceSearchVo implements Serializable {
@Serial
private static final long serialVersionUID = 5774168899957993687L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "id")
private Long id;
@ApiModelProperty(value = "围栏名称")
private String name;
@ApiModelProperty(value = "围栏类别code")
private Integer fenceType;
@ApiModelProperty(value = "围栏类别名称")
private String fenceTypeName;
public static LocationFenceSearchVo transform(LocationFence locationFence) {
return LocationFenceSearchVo
.builder()
.id(locationFence.getId())
.name(locationFence.getName())
.fenceType(locationFence.getFenceType())
.fenceTypeName(FenceTypeEnum.getByCode(locationFence.getFenceType()))
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.location.fence;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.constant.alarm.FenceTypeEnum;
import com.yiring.app.domain.location.LocationFence;
import com.yiring.app.domain.location.LocationFenceRule;
import com.yiring.app.vo.location.rule.LocationFenceRuleVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import java.util.Set;
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/28 11:07
*/
@ApiModel("围栏信息VO")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class LocationFenceVo implements Serializable {
@Serial
private static final long serialVersionUID = 3616144084051520412L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "id")
private Long id;
@ApiModelProperty(value = "围栏名称")
private String name;
@ApiModelProperty(value = "地图名称")
private String mapName;
@ApiModelProperty(value = "摄像头名称")
private String videoName;
@ApiModelProperty(value = "围栏类别code")
private Integer fenceType;
@ApiModelProperty(value = "围栏类别名称")
private String fenceTypeName;
@ApiModelProperty(value = "滞留时间(秒)")
private Integer residenceTime;
@ApiModelProperty(value = "消抖时间(秒)")
private Integer threshold;
@ApiModelProperty(value = "是否启用")
private Boolean enable;
@ApiModelProperty(value = "报警规则")
private Set<LocationFenceRuleVo> rules;
public static LocationFenceVo transform(LocationFence locationFence) {
Set<LocationFenceRule> rules = locationFence.getRules();
Set<LocationFenceRuleVo> collect = rules
.stream()
.map(LocationFenceRuleVo::transform)
.collect(Collectors.toSet());
return LocationFenceVo
.builder()
.id(locationFence.getId())
.name(locationFence.getName())
.mapName(locationFence.getMapName())
.videoName(locationFence.getVideo().getVideoName())
.fenceType(locationFence.getFenceType())
.fenceTypeName(FenceTypeEnum.getByCode(locationFence.getFenceType()))
.residenceTime(locationFence.getResidenceTime())
.threshold(locationFence.getThreshold())
.rules(collect)
.enable(locationFence.getEnable())
.build();
}
public static List<LocationFenceVo> transforms(List<LocationFence> locationFences) {
return locationFences.stream().map(LocationFenceVo::transform).collect(Collectors.toList());
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.location.rule;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.constant.alarm.InformMannerEnum;
import com.yiring.app.domain.location.LocationAlarmRule;
import com.yiring.app.vo.CodeNameVo;
import com.yiring.app.vo.user.UserVo;
import com.yiring.auth.domain.user.User;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author tml
* @version 1.0
* @date 2022/5/5 15:27
*/
@ApiModel("电子围栏报警规则信息")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LocationAlarmRuleVo implements Serializable {
@Serial
private static final long serialVersionUID = 8291558248133685661L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "id", example = "1", required = true)
private Long id;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "地图id", example = "1", required = true)
private Long mapId;
@ApiModelProperty(value = "地图名称", example = "一层", required = true)
private String mapName;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "电子围栏id", example = "1", required = true)
private Long fenceId;
@ApiModelProperty(value = "电子围栏名称", example = "1", required = true)
private String fenceName;
@ApiModelProperty(value = "接收人集合", required = true)
private List<UserVo> users;
@ApiModelProperty(value = "通知方式集合", required = true)
private List<CodeNameVo> informManner;
public static LocationAlarmRuleVo transform(LocationAlarmRule locationAlarmRule) {
Set<User> users = locationAlarmRule.getUsers();
List<UserVo> userVos = users.stream().map(UserVo::transformDept).collect(Collectors.toList());
String informManner = locationAlarmRule.getInformManner();
List<Integer> list = JSON.parseArray(informManner, Integer.class);
ArrayList<CodeNameVo> codeNameVos = new ArrayList<>();
for (Integer item : list) {
codeNameVos.add(new CodeNameVo(item, InformMannerEnum.getByCode(item)));
}
return LocationAlarmRuleVo
.builder()
.id(locationAlarmRule.getId())
.mapId(locationAlarmRule.getMapId())
.mapName(locationAlarmRule.getMapName())
.fenceId(locationAlarmRule.getLocationFence().getId())
.fenceName(locationAlarmRule.getLocationFence().getName())
.users(userVos)
.informManner(codeNameVos)
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.location.rule;
import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.constant.alarm.FenceTypeEnum;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.domain.location.LocationFenceRule;
import com.yiring.app.param.location.rule.RuleParam;
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;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:16
*/
@ApiModel("修改配置报警类别的报警规则,根据不同类型传入不同参数")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LocationFenceRuleVo implements Serializable {
@Serial
private static final long serialVersionUID = -7774789748161552583L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "规则id", example = "1", required = true)
private Long id;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "所属的围栏id", example = "1", required = true)
private Long fenceId;
@ApiModelProperty(value = "所属的围栏类别code", example = "1", required = true)
private Integer fenceType;
@ApiModelProperty(value = "所属的围栏类别名称", example = "重大危险源", required = true)
private String fenceTypeName;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "所属的报警类别id", example = "1", required = true)
private Long alarmTypeId;
@ApiModelProperty(
value = "设置的关联参数类型(1:最大人数,2:最小人数,3:允许进入人员,4:不允许离开人员,5:静止时长(分钟),6:滞留时长(分钟),7:触发报警距离)",
example = "1",
required = true
)
private Integer relevanceParamType;
@ApiModelProperty(value = "设置的关联参数类型名称", example = "最大人数", required = true)
private String relevanceParamTypeName;
private RuleVo ruleVo;
public static LocationFenceRuleVo transform(LocationFenceRule locationFenceRule) {
String rule = locationFenceRule.getRule();
RuleParam ruleParam = JSON.parseObject(rule, RuleParam.class);
RuleVo ruleVo = Convert.convert(RuleVo.class, ruleParam);
return LocationFenceRuleVo
.builder()
.id(locationFenceRule.getId())
.fenceId(locationFenceRule.getFence().getId())
.fenceType(locationFenceRule.getFence().getFenceType())
.fenceTypeName(FenceTypeEnum.getByCode(locationFenceRule.getFence().getFenceType()))
.alarmTypeId(locationFenceRule.getAlarmType().getId())
.relevanceParamType(locationFenceRule.getRelevanceParamType())
.relevanceParamTypeName(RelevanceParamEnum.getByCode(locationFenceRule.getRelevanceParamType()))
.ruleVo(ruleVo)
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.location.rule;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:28
*/
@ApiModel("报警类型中报警规则的用户信息")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class RelevanceUserVo implements Serializable {
@Serial
private static final long serialVersionUID = -8419550356739651935L;
@ApiModelProperty(value = "工号", example = "1888888888", required = true)
private String uuid;
@ApiModelProperty(value = "真实姓名", example = "张三", required = true)
private String realName;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.location.rule;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 14:12
*/
@ApiModel("报警规则,根据不同类型传入不同参数")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RuleVo implements Serializable {
@Serial
private static final long serialVersionUID = 441241201908785930L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "选择的播放语音id", example = "1")
private Long voiceId;
@ApiModelProperty(value = "选择的播放语音名称", example = "紧急语音")
private String voiceName;
@ApiModelProperty(value = "选择的播放设备id", example = "1")
private Long playEquipmentId;
@ApiModelProperty(value = "选择的播放设备名称", example = "语音设备1")
private String playEquipmentName;
@ApiModelProperty(value = "静止时长或滞留时间(分钟)", example = "10")
private Integer duration;
@ApiModelProperty(value = "触发报警的距离(米)", example = "10")
private Integer distance;
private List<TimeAndNumberVo> timeAndNumber;
private List<TimeAndUserVo> timeAndUser;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.location.rule;
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;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:24
*/
@ApiModel("报警类型中的最多人数或最小人数")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TimeAndNumberVo implements Serializable {
@Serial
private static final long serialVersionUID = -6796977663003158881L;
@ApiModelProperty(value = "起始时间", example = "星期一 08:00:00")
private String beginTime;
@ApiModelProperty(value = "终止时间", example = "星期一 18:00:00")
private String endTime;
@ApiModelProperty(value = "人数", example = "100")
private Integer number;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.location.rule;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 16:24
*/
@ApiModel("报警类型中的允许进入人员或不允许离开人员")
@Data
@SuperBuilder(toBuilder = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TimeAndUserVo implements Serializable {
@Serial
private static final long serialVersionUID = -7037620599825901175L;
@ApiModelProperty(value = "起始时间", example = "星期一 08:00:00")
private String beginTime;
@ApiModelProperty(value = "终止时间", example = "星期一 18:00:00")
private String endTime;
private Set<RelevanceUserVo> user;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.map;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* @version 1.0
* @description: 地图
* @date 2022/4/27 10:37
*/
@ApiModel("MapVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class MapVo implements Serializable {
@Serial
private static final long serialVersionUID = 1058997208992044029L;
@ApiModelProperty(value = "地图数据集合")
List<MapVoReuslt> data;
@ApiModel("MapVoReuslt")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public static class MapVoReuslt implements Serializable {
@Serial
private static final long serialVersionUID = 4115779013003587949L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "id", example = "1")
Integer id;
@ApiModelProperty(value = "父id", example = "1")
Integer parentId;
@ApiModelProperty(value = "地图名称")
String name;
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.video;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 监控名称模糊查询反参Vo
* @author tzl
* 2022/4/15 10:48
*/
@ApiModel("VideoNameVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class VideoNameVo implements Serializable {
@Serial
private static final long serialVersionUID = 3968078657827350557L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "id", example = "1548548545755")
Long id;
// @ApiModelProperty(value = "坐标点", example = "坐标点")
// Point point;
// @ApiModelProperty(value = "编号", example = "88888888")
// String uuid;
// @ApiModelProperty(value = "m3u8地址", example = "m3u8地址")
// String m3u8;
// @ApiModelProperty(value = "备注", example = "备注")
// String remark;
@ApiModelProperty(value = "摄像头名称", example = "摄像头1")
String videoName;
// @ApiModelProperty(value = "状态", example = "正常")
// String status;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.car;
package com.yiring.app.vo.visitor;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.*;
import lombok.experimental.FieldDefaults;
......@@ -40,8 +38,8 @@ public class CarVo implements Serializable {
/**
* 车辆类型翻译
*/
@ApiModelProperty(value = "车辆类型(字典翻译)", example = "货车")
String carTypeName;
// @ApiModelProperty(value = "车辆类型(字典翻译)", example = "货车")
// String carTypeName;
// public String getCarTypeName() {
// if (StrUtil.isNotBlank(carType)) {
......@@ -50,23 +48,13 @@ public class CarVo implements Serializable {
// return null;
// }
@ApiModelProperty(value = "司机名称", example = "张三")
String driverName;
@ApiModelProperty(value = "司机电话", example = "17688888888")
String driverMobile;
@ApiModelProperty(value = "标签卡", example = "DT8875666")
String labelCard;
@ApiModelProperty(value = "标签卡状态", example = "1")
String labelCardStatus;
/**
* 车辆类型翻译
*/
@ApiModelProperty(value = "标签卡状态", example = "未发卡")
String labelCardStatusName;
// /**
// * 车辆类型翻译
// */
// @ApiModelProperty(value = "标签卡状态", example = "未发卡")
// String labelCardStatusName;
// public String getLabelCardStatusName() {
// if (StrUtil.isNotBlank(carType)) {
......@@ -75,24 +63,24 @@ public class CarVo implements Serializable {
// return null;
// }
@ApiModelProperty(value = "单位id", example = "湖南壹润科技")
String orgId;
@ApiModelProperty(value = "被访人id", example = "1")
String intervieweeId;
@ApiModelProperty(value = "来访原因", example = "装货")
String reason;
@ApiModelProperty(value = "收卡时间", example = "2022-04-11 17:25:33")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime cardRecTime;
@ApiModelProperty(value = "创建时间", example = "2022-04-11 17:25:33")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime createTime;
@ApiModelProperty(value = "发卡时间", example = "2022-04-11 17:25:33")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime cardSendTime;
// @ApiModelProperty(value = "单位id", example = "湖南壹润科技")
// String orgId;
//
// @ApiModelProperty(value = "被访人id", example = "1")
// String intervieweeId;
//
// @ApiModelProperty(value = "来访原因", example = "装货")
// String reason;
//
// @ApiModelProperty(value = "收卡时间", example = "2022-04-11 17:25:33")
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// LocalDateTime cardRecTime;
// @ApiModelProperty(value = "创建时间", example = "2022-04-11 17:25:33")
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// LocalDateTime createTime;
//
// @ApiModelProperty(value = "发卡时间", example = "2022-04-11 17:25:33")
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// LocalDateTime cardSendTime;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.visitor;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.domain.visitor.Visitor;
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/25 11:14
*/
@ApiModel("InvitationVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class InvitationVo implements Serializable {
@Serial
private static final long serialVersionUID = 5496232471863298479L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "id", example = "1548548545755")
Long id;
@ApiModelProperty(value = "邀请原因/来访原因", example = "随便看看")
String reason;
@ApiModelProperty(value = "邀请方式:个人 公司", example = "个人")
String InvitationMethod;
@ApiModelProperty(value = "邀请人数", example = "1")
Integer numOfVisitor;
@ApiModelProperty(value = "邀请人id", example = "1")
Long inviterId;
@ApiModelProperty(value = "邀请人姓名", example = "李四")
String inviterName;
@ApiModelProperty(value = "邀请人所属部门", example = "开发部")
String inviterDept;
@ApiModelProperty(value = "状态", example = "撤回")
String status;
@ApiModelProperty(value = "被邀请访客")
Visitor visitor;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.visitor;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.domain.visitor.Car;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 访客详情反参
*
* @author tzl
* @version 1.0
* @description:
* @date 2022/4/27 15:25
*/
@ApiModel("VisitorDetailsVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class VisitorDetailsVo implements Serializable {
@Serial
private static final long serialVersionUID = 9004209982164273860L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "id", example = "1548548545755")
Long id;
@ApiModelProperty(value = "到访人姓名", example = "张三")
String visitorName;
@ApiModelProperty(value = "到访人电话", example = "17688888888")
String visitorMobile;
@ApiModelProperty(value = "到访人身份证", example = "430441190001255417")
String visitorCarNum;
@ApiModelProperty(value = "是否特殊作业", example = "true")
boolean taskType;
// @ApiModelProperty(value = "邀请人数", example = "1")
// Integer numOfVisitor;
@ApiModelProperty(value = "访客来源", example = "内部邀请")
String visitorSource;
@ApiModelProperty(value = "标签卡", example = "WE34421231")
String labelCard;
// @ApiModelProperty(value = "标签卡状态", example = "使用中")
// String labelCardStatus;
@ApiModelProperty(value = "所属单位id", example = "壹润科技")
String orgId;
@ApiModelProperty(value = "被访人id", example = "1")
Long intervieweeId;
@ApiModelProperty(value = "被访人姓名", example = "李四")
String intervieweeName;
@ApiModelProperty(value = "来访原因", example = "来访原因")
String reason;
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @ApiModelProperty(value = "收卡时间", example = "2022-04-19 14:28:00")
// LocalDateTime cardRecTime;
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @ApiModelProperty(value = "预约到访时间", example = "2022-04-19 14:28:00")
// LocalDateTime appOfVisitTime;
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @ApiModelProperty(value = "创建时间", example = "2022-04-19 14:28:00")
// LocalDateTime createTime;
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @ApiModelProperty(value = "发卡时间", example = "2022-04-19 14:28:00")
// LocalDateTime cardSendTime;
@ApiModelProperty(value = "车辆反参")
Car car;
@ApiModelProperty(value = "主访人id")
Long mainVisitorId;
List<VisitorResultVo> list;
@ApiModel("MapVoReuslt")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public static class VisitorResultVo implements Serializable {
@Serial
private static final long serialVersionUID = 4115779013003587949L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "id", example = "1")
Long id;
@ApiModelProperty(value = "到访人姓名", example = "张三")
String visitorName;
@ApiModelProperty(value = "到访人电话", example = "17688888888")
String visitorMobile;
@ApiModelProperty(value = "主访人id")
Long mainVisitorId;
}
}
......@@ -4,8 +4,10 @@ package com.yiring.app.vo.visitor;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.domain.visitor.Car;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.*;
......@@ -23,6 +25,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class VisitorVo implements Serializable {
@Serial
private static final long serialVersionUID = 9004209982164273860L;
@JsonSerialize(using = ToStringSerializer.class)
......@@ -77,4 +80,7 @@ public class VisitorVo implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "发卡时间", example = "2022-04-19 14:28:00")
LocalDateTime cardSendTime;
@ApiModelProperty(value = "车辆反参")
Car car;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.alarm;
import com.yiring.app.constant.alarm.FenceTypeEnum;
import com.yiring.app.constant.alarm.RelevanceParamEnum;
import com.yiring.app.domain.alarm.AlarmType;
import com.yiring.app.param.alarm.AlarmConditionParam;
import com.yiring.app.param.alarm.AlarmTypeAddParam;
import com.yiring.app.param.alarm.AlarmTypeModifyParam;
import com.yiring.app.service.alarm.AlarmService;
import com.yiring.app.vo.CodeNameVo;
import com.yiring.app.vo.alarm.AlarmTypeVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.Objects;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Sort;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 报警类型控制器
* @author tml
* @version 1.0
* @date 2022/4/27 14:18
*/
@Slf4j
@Validated
@Api(tags = "AlarmType(报警类型)")
@RestController
@RequestMapping("/alarm/type")
public class AlarmTypeController {
@Resource
private AlarmService alarmService;
@ApiOperation(value = "添加报警类型")
@PostMapping("/addAlarmType")
public Result<String> addAlarmType(@Valid AlarmTypeAddParam param) {
return alarmService.addAlarmType(param);
}
@ApiOperation(value = "修改报警类型")
@PostMapping("/modifyAlarmType")
public Result<String> modifyAlarmType(@Valid AlarmTypeModifyParam param) {
return alarmService.modifyAlarmType(param);
}
@ApiOperation(value = "删除报警类型")
@PostMapping("/removeAlarmType")
public Result<String> removeAlarmType(@Valid IdParam param) {
return alarmService.removeAlarmType(param);
}
@ApiOperation(value = "根据id查询报警类型")
@PostMapping("/findById")
public Result<AlarmTypeVo> findById(@Valid IdParam param) {
return alarmService.findById(param);
}
@ApiOperation(value = "根据条件查询")
@PostMapping("/findByCondition")
public Result<PageVo<AlarmTypeVo>> findByCondition(
@Valid AlarmConditionParam conditionParam,
@Valid PageParam pageParam
) {
if (Objects.isNull(pageParam.getSortField())) {
pageParam.setSortField(AlarmType.Fields.createTime);
pageParam.setSortOrder(Sort.Direction.DESC);
}
return alarmService.findByCondition(conditionParam, pageParam);
}
@ApiOperation(value = "获取所有围栏类别")
@GetMapping("/findAllFenceType")
public Result<PageVo<CodeNameVo>> findAllFenceType() {
PageVo<CodeNameVo> pageVo = PageVo.build(FenceTypeEnum.getAll(), FenceTypeEnum.TOTAL);
return Result.ok(pageVo);
}
@ApiOperation(value = "获取所有关联参数")
@GetMapping("/findAllRelevanceParam")
public Result<PageVo<CodeNameVo>> findAllRelevanceParam() {
PageVo<CodeNameVo> pageVo = PageVo.build(RelevanceParamEnum.getAll(), RelevanceParamEnum.TOTAL);
return Result.ok(pageVo);
}
@ApiOperation(value = "报警类型导出", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@PostMapping("/exportAlarmType")
public void exportAlarmType(
@Valid AlarmConditionParam conditionParam,
HttpServletResponse response,
@Valid PageParam pageParam
) {
alarmService.exportAlarmType(conditionParam, response, pageParam);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.analysis.history;
import com.yiring.app.param.analysis.history.HistoryRouteConditionParam;
import com.yiring.app.service.analysis.history.HistoryRouteService;
import com.yiring.app.vo.analysis.history.HistoryRouteVo;
import com.yiring.common.core.Result;
import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author tml
* @version 1.0
* @date 2022/5/6 10:36
*/
@Api(tags = "HistoryRoute(历史轨迹)")
@Validated
@RestController
@RequestMapping("/history/route")
public class HistoryRouteController {
@Resource
private HistoryRouteService historyRouteService;
@ApiOperation("根据条件查询历史轨迹")
@PostMapping("/findByCondition")
public Result<PageVo<HistoryRouteVo>> findByCondition(@Valid HistoryRouteConditionParam param) {
return historyRouteService.findByCondition(param);
}
@ApiOperation(value = "导出历史轨迹", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@PostMapping("/exportHistoryRoute")
public void exportHistoryRoute(@Valid HistoryRouteConditionParam param, HttpServletResponse response) {
historyRouteService.exportHistoryRoute(param, response);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.district;
import com.yiring.app.param.district.DistrictAddParam;
import com.yiring.app.param.district.DistrictModifyParam;
import com.yiring.app.service.district.DistrictService;
import com.yiring.app.vo.district.DistrictVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import javax.annotation.Resource;
import javax.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 区域管理控制器
* @author tml
* @version 1.0
* @date 2022/4/26 10:15
*/
@Slf4j
@Validated
@Api(tags = "District(区域管理)")
@RestController
@RequestMapping("/district/")
public class DistrictController {
@Resource
private DistrictService districtService;
@ApiOperation(value = "新增区域信息")
@PostMapping("/addDistrict")
public Result<String> addDistrict(@Valid @RequestBody DistrictAddParam param) {
return districtService.addDistrict(param);
}
@ApiOperation(value = "修改区域信息")
@PostMapping("/modifyDistrict")
public Result<String> modifyDistrict(@Valid @RequestBody DistrictModifyParam param) {
return districtService.modifyDistrict(param);
}
@ApiOperation(value = "删除区域信息")
@PostMapping("/removeDistrict")
public Result<String> removeDistrict(@Valid IdParam idParam) {
return districtService.removeDistrict(idParam);
}
@ApiOperation(value = "根据区域名称模糊查询区域信息")
@ApiImplicitParam(value = "区域名称", example = "生产", required = true, name = "name")
@GetMapping("/findByNameLike")
public Result<PageVo<DistrictVo>> findByNameLike(String name) {
if (name == null) {
name = "";
}
return districtService.findByNameLike(name);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.location.fence;
import com.yiring.app.domain.alarm.AlarmType;
import com.yiring.app.param.location.fence.LocationFenceAddParam;
import com.yiring.app.param.location.fence.LocationFenceConditionParam;
import com.yiring.app.param.location.fence.LocationFenceModifyParam;
import com.yiring.app.service.location.fence.LocationFenceService;
import com.yiring.app.vo.location.fence.LocationFenceSearchVo;
import com.yiring.app.vo.location.fence.LocationFenceVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import java.util.Objects;
import javax.annotation.Resource;
import javax.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Sort;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author tml
* @version 1.0
* @date 2022/4/28 11:50
*/
@RestController
@Api(tags = "Fence(围栏信息)")
@Validated
@Slf4j
@RequestMapping("location/fence")
public class LocationFenceController {
@Resource
private LocationFenceService locationFenceService;
@ApiOperation("添加围栏信息")
@PostMapping("/addLocationFence")
public Result<String> addLocationFence(@Valid @RequestBody LocationFenceAddParam param) {
return locationFenceService.addLocationFence(param);
}
@ApiOperation("修改围栏信息")
@PostMapping("/modifyLocationFence")
public Result<String> modifyLocationFence(@Valid @RequestBody LocationFenceModifyParam param) {
return locationFenceService.modifyLocationFence(param);
}
@ApiOperation("删除围栏信息")
@PostMapping("/removeLocationFence")
public Result<String> removeLocationFence(@Valid IdParam param) {
return locationFenceService.removeLocationFence(param);
}
@ApiOperation("根据条件分页查询围栏信息")
@PostMapping("/LocationFenceVo")
public Result<PageVo<LocationFenceVo>> findList(
@Valid LocationFenceConditionParam conditionParam,
@Valid PageParam pageParam
) {
if (Objects.isNull(pageParam.getSortField())) {
pageParam.setSortField(AlarmType.Fields.createTime);
pageParam.setSortOrder(Sort.Direction.DESC);
}
return locationFenceService.findList(conditionParam, pageParam);
}
@ApiOperation("根据条id查询围栏信息")
@PostMapping("/findById")
public Result<LocationFenceVo> findById(@Valid IdParam param) {
return locationFenceService.findById(param);
}
@ApiOperation("根据围栏名称模糊查询围栏信息")
@ApiImplicitParam(value = "围栏名称", example = "生产", required = true, name = "name")
@PostMapping("/findByNameLike")
public Result<PageVo<LocationFenceSearchVo>> findByNameLike(String name) {
if (name == null) {
name = "";
}
return locationFenceService.findByNameLike(name);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.location.rule;
import com.yiring.app.constant.alarm.InformMannerEnum;
import com.yiring.app.domain.alarm.AlarmType;
import com.yiring.app.param.location.rule.LocationAlarmRuleAddParam;
import com.yiring.app.param.location.rule.LocationAlarmRuleModifyParam;
import com.yiring.app.param.location.rule.LocationAlarmRuleParam;
import com.yiring.app.service.location.rule.LocationAlarmRuleService;
import com.yiring.app.vo.CodeNameVo;
import com.yiring.app.vo.IdNameVo;
import com.yiring.app.vo.location.rule.LocationAlarmRuleVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Objects;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Sort;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author tml
* @version 1.0
* @date 2022/5/5 14:19
*/
@Slf4j
@Validated
@Api(tags = "AlarmRule(电子围栏报警规则,配置报警给谁)")
@RestController
@RequestMapping("/alarm/rule")
public class LocationAlarmRuleController {
@Resource
private LocationAlarmRuleService locationAlarmRuleService;
@ApiOperation(value = "添加一条电子围栏报警规则")
@PostMapping("/addRule")
public Result<String> addRule(@Valid LocationAlarmRuleAddParam param) {
return locationAlarmRuleService.addRule(param);
}
@ApiOperation(value = "修改一条电子围栏报警规则")
@PostMapping("/modifyRule")
public Result<String> modifyRule(@Valid LocationAlarmRuleModifyParam param) {
return locationAlarmRuleService.modifyRule(param);
}
@ApiOperation(value = "删除一条电子围栏报警规则")
@PostMapping("/removeRule")
public Result<String> removeRule(@Valid IdParam idParam) {
return locationAlarmRuleService.removeRule(idParam);
}
@ApiOperation(value = "根据id查询一条电子围栏报警规则")
@PostMapping("/findById")
public Result<LocationAlarmRuleVo> findById(@Valid IdParam idParam) {
return locationAlarmRuleService.findById(idParam);
}
@ApiOperation(value = "根据条件查询电子围栏报警规则")
@PostMapping("/findByCondition")
public Result<PageVo<LocationAlarmRuleVo>> findByCondition(
@Valid LocationAlarmRuleParam param,
@Valid PageParam pageParam
) {
if (Objects.isNull(pageParam.getSortField())) {
pageParam.setSortField(AlarmType.Fields.createTime);
pageParam.setSortOrder(Sort.Direction.DESC);
}
return locationAlarmRuleService.findByCondition(param, pageParam);
}
@ApiOperation(value = "通知方式下拉框")
@GetMapping("/findAllInformManner")
public Result<PageVo<CodeNameVo>> findAllInformManner() {
List<CodeNameVo> list = InformMannerEnum.getAll();
PageVo<CodeNameVo> pageVo = PageVo.build(list, list.size());
return Result.ok(pageVo);
}
@ApiOperation(value = "导出电子围栏报警规则", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@PostMapping("/exportAlarmRule")
public void exportAlarmRule(
@Valid LocationAlarmRuleParam param,
HttpServletResponse response,
@Valid PageParam pageParam
) {
locationAlarmRuleService.exportAlarmRule(param, response, pageParam);
}
@ApiOperation("围栏信息下拉框")
@ApiImplicitParam(value = "围栏名称", example = "生产", name = "name")
@PostMapping("/findByNameLike")
public Result<PageVo<IdNameVo>> findFenceList(String name) {
if (name == null) {
name = "";
}
return locationAlarmRuleService.findFenceList(name);
}
@ApiOperation("报警类型下拉框")
@PostMapping("/findAlarmTypeList")
public Result<PageVo<IdNameVo>> findAlarmTypeList() {
return locationAlarmRuleService.findAlarmTypeList();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.location.rule;
import com.yiring.app.design.check.rule.LocationFenceRuleContext;
import com.yiring.app.param.location.rule.LocationFenceRuleAddParam;
import com.yiring.app.param.location.rule.LocationFenceRuleModifyParam;
import com.yiring.app.service.location.rule.impl.LocationFenceRuleServiceImpl;
import com.yiring.app.vo.location.rule.LocationFenceRuleVo;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.annotation.Resource;
import javax.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author tml
* @version 1.0
* @date 2022/4/29 9:05
*/
@Slf4j
@Validated
@Api(tags = "FenceRule(电子围栏报警规则,什么情况下会报警)")
@RestController
@RequestMapping("/location/rule")
public class LocationFenceRuleController {
@Resource
private LocationFenceRuleServiceImpl locationFenceRuleService;
@ApiOperation("添加一条电子围栏的报警规则")
@PostMapping("/addRule")
public Result<String> addRule(@Valid @RequestBody LocationFenceRuleAddParam param) {
Result<String> result = new LocationFenceRuleContext(param.getRelevanceParamType()).paramInit(param);
if (Status.OK.value() != result.getStatus()) {
return result;
}
return locationFenceRuleService.addRule(param);
}
@ApiOperation("修改一条电子围栏的报警规则")
@PostMapping("/modifyRule")
public Result<String> modifyRule(@Valid @RequestBody LocationFenceRuleModifyParam param) {
Result<String> result = new LocationFenceRuleContext(param.getRelevanceParamType()).paramInit(param);
if (Status.OK.value() != result.getStatus()) {
return result;
}
return locationFenceRuleService.modifyRule(param);
}
@ApiOperation("删除一条电子围栏的报警规则")
@PostMapping("/removeRule")
public Result<String> removeRule(@Valid IdParam idParam) {
return locationFenceRuleService.removeRule(idParam);
}
@ApiOperation("查询一条电子围栏的报警规则")
@PostMapping("/findRule")
public Result<LocationFenceRuleVo> findRule(@Valid IdParam idParam) {
return locationFenceRuleService.findRule(idParam);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.map;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yiring.app.feign.MapClient;
import com.yiring.app.util.zy.ZyUtil;
import com.yiring.app.vo.map.MapVo;
import com.yiring.auth.util.ZyUtil;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
......@@ -18,8 +22,10 @@ import org.springframework.web.bind.annotation.RestController;
/**
* 地图控制器
*
* @author Administrator
* @version 1.0
* @description: TODO
* @date 2022/4/24 13:48
*/
@Slf4j
......@@ -34,9 +40,23 @@ public class MapController {
@GetMapping("/mapSelect")
@ApiImplicitParams({ @ApiImplicitParam(value = "orgId", required = true, name = "orgId") })
public Result<Serializable> fail(String orgId) {
String login = ZyUtil.openLogin();
public Result<MapVo> fail(String orgId) {
String login = ZyUtil.login();
JSONObject jsonObject = mapClient.selectMap(orgId, "bearer " + login);
return Result.ok(jsonObject.get("data").toString());
// if (ObjectUtil.isNotNull(jsonObject.getJSONArray("data"))) {
// List<MapVo.MapVoReuslt> data = jsonObject.getJSONArray("data").toJavaList(MapVo.MapVoReuslt.class);
// MapVo mapVo = MapVo.builder().data(data).build();
// return Result.ok(mapVo);
// } else {
// return Result.no(Status.NOT_FOUND);
// }
if (ObjectUtil.isNotNull(jsonObject.get("data"))) {
ObjectMapper objectMapper = new ObjectMapper();
List data = objectMapper.convertValue(jsonObject.get("data"), List.class);
MapVo mapVo = MapVo.builder().data(data).build();
return Result.ok(mapVo);
} else {
return Result.no(Status.NOT_FOUND);
}
}
}
......@@ -4,9 +4,11 @@ package com.yiring.app.web.video;
import com.yiring.app.param.video.VideoParam;
import com.yiring.app.param.video.VideoQueryParam;
import com.yiring.app.service.video.VideoService;
import com.yiring.app.vo.video.VideoNameVo;
import com.yiring.app.vo.video.VideoVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.IndexParam;
import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
......@@ -83,4 +85,10 @@ public class VideoController {
public Result<String> importVideo(MultipartFile file) {
return videoService.importVideo(file);
}
@ApiOperation(value = "根据监控点位名称模糊查询")
@GetMapping("findByVideoNameLike")
public Result<VideoNameVo> findByVideoNameLike(@Valid IndexParam indexParam) {
return videoService.findByVideoNameLike(indexParam);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.car;
package com.yiring.app.web.visitor;
import com.yiring.app.param.car.CarParam;
import com.yiring.app.param.car.CarQueryParam;
import com.yiring.app.service.car.CarService;
import com.yiring.app.vo.car.CarVo;
import com.yiring.app.param.visitor.CarQueryParam;
import com.yiring.app.service.visitor.CarService;
import com.yiring.app.vo.visitor.CarVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.vo.PageVo;
......@@ -38,17 +37,17 @@ public class CarController {
@Resource
CarService carService;
@ApiOperation(value = "新增车辆来访信息")
@PostMapping("saveCarInfo")
public Result<Long> saveCarInfo(@Valid CarParam carParam) {
return carService.saveCarInfo(carParam);
}
// @ApiOperation(value = "新增车辆来访信息")
// @PostMapping("saveCarInfo")
// public Result<Long> saveCarInfo(@Valid CarParam carParam) {
// return carService.saveCarInfo(carParam);
// }
@ApiOperation(value = "修改车辆来访信息")
@PostMapping("updateCarInfo")
public Result<Long> updateCarInfo(@Valid CarParam carParam, @Valid IdParam idParam) {
return carService.updateCarInfo(carParam, idParam);
}
// @ApiOperation(value = "修改车辆来访信息")
// @PostMapping("updateCarInfo")
// public Result<Long> updateCarInfo(@Valid CarParam carParam, @Valid IdParam idParam) {
// return carService.updateCarInfo(carParam, idParam);
// }
@ApiOperation(value = "收卡")
@PostMapping("cardRec")
......@@ -63,17 +62,17 @@ public class CarController {
return carService.cardSend(idParam, labelCard);
}
@ApiOperation(value = "删除车辆来访信息")
@PostMapping("deleteCarInfo")
public Result<String> deleteCarInfo(@Valid IdParam idParam) {
return carService.deleteCarInfo(idParam);
}
// @ApiOperation(value = "删除车辆来访信息")
// @PostMapping("deleteCarInfo")
// public Result<String> deleteCarInfo(@Valid IdParam idParam) {
// return carService.deleteCarInfo(idParam);
// }
@ApiOperation(value = "查看车辆来访信息详情")
@GetMapping("getCarInfo")
public Result<CarVo> getCarInfo(@Valid IdParam idParam) {
return carService.getCarInfo(idParam);
}
// @ApiOperation(value = "查看车辆来访信息详情")
// @GetMapping("getCarInfo")
// public Result<CarVo> getCarInfo(@Valid IdParam idParam) {
// return carService.getCarInfo(idParam);
// }
@ApiOperation(value = "查看车辆来访信息(分页)")
@GetMapping("pageCarInfo")
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.visitor;
import com.yiring.app.param.visitor.InvitationParam;
import com.yiring.app.param.visitor.InvitationQueryParam;
import com.yiring.app.service.visitor.InvitationService;
import com.yiring.app.vo.visitor.InvitationVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/4/25 11:35
*/
@Slf4j
@Validated
@Api(tags = "Invitation(邀请)")
@RestController
@RequestMapping("/invitation/")
public class InvitationController {
@Resource
InvitationService invitationService;
@ApiOperation(value = "新增邀请信息")
@PostMapping("saveInv")
public Result<String> saveInv(@Valid InvitationParam invitationParam) {
return invitationService.saveInv(invitationParam);
}
@ApiOperation(value = "修改邀请信息")
@PostMapping("updateInv")
public Result<String> updateInv(@Valid InvitationParam invitationParam, @Valid IdParam idParam) {
return invitationService.updateInv(invitationParam, idParam);
}
@ApiOperation(value = "撤回")
@PostMapping("recallInv")
public Result<String> recallInv(@Valid IdParam idParam) {
return invitationService.recallInv(idParam);
}
@ApiOperation(value = "发起邀请")
@PostMapping("sendInv")
public Result<String> sendInv(@Valid IdParam idParam) {
return invitationService.sendInv(idParam);
}
@ApiOperation(value = "删除邀请")
@PostMapping("deleteInv")
public Result<String> deleteInv(@Valid IdParam idParam) {
return invitationService.deleteInv(idParam);
}
@ApiOperation(value = "查看邀请信息(分页)")
@GetMapping("pageInv")
public Result<PageVo<InvitationVo>> pageInv(@Valid InvitationQueryParam invitationQueryParam) {
return invitationService.pageInv(invitationQueryParam);
}
@ApiOperation(value = "导出邀请信息", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@PostMapping("exportInv")
public void exportInv(HttpServletResponse response, @Valid InvitationQueryParam invitationQueryParam) {
invitationService.exportInv(invitationQueryParam, response);
}
}
......@@ -61,11 +61,11 @@ public class VisitorController {
return visitorService.cardSend(labelCard, idParam);
}
@ApiOperation(value = "删除访客信息")
@PostMapping("deleteVisitor")
public Result<String> deleteVisitor(@Valid IdParam idParam) {
return visitorService.deleteVisitor(idParam);
}
// @ApiOperation(value = "删除访客信息")
// @PostMapping("deleteVisitor")
// public Result<String> deleteVisitor(@Valid IdParam idParam) {
// return visitorService.deleteVisitor(idParam);
// }
@ApiOperation(value = "查看访客信息详情")
@GetMapping("selectVisitor")
......
......@@ -9,6 +9,11 @@ spring:
profiles:
include: auth, conf-patch
active: dev
servlet:
multipart:
enabled: true
max-file-size: 10MB
max-request-size: 10MB
# DEBUG
debug: false
......@@ -19,4 +19,9 @@ public class RegEx {
//手机号码验证
public static final String MOBILE =
"^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(16[5,6])|(17[0-8])|(18[0-9])|(19[1、5、8、9]))\\d{8}$";
/**
* 报警规则的时间格式
*/
public static final String TIME_RULE = "^星期[一二三四五六日]\\ (2[0-4]|[0-1]\\d)(\\:[0-5]\\d){2}$";
}
......@@ -56,8 +56,8 @@ allprojects {
mavenCentral()
}
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
sourceCompatibility = JavaVersion.VERSION_16
targetCompatibility = JavaVersion.VERSION_16
}
subprojects {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论