提交 12f455ab 作者: 17607474349

feat:

1、添加按键报警数据查询、导出
2、添加按键报警信息推送
3、添加推送信息数据查询
上级 6ceb4aca
......@@ -78,4 +78,6 @@ dependencies {
// xxl-job
implementation "com.xuxueli:xxl-job-core:${xxlJobVersion}"
// minio
implementation "io.minio:minio:${minioVersion}"
}
......@@ -6,14 +6,15 @@ import com.yiring.auth.domain.user.User;
import com.yiring.common.domain.BasicEntity;
import java.io.Serial;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
import org.locationtech.jts.geom.Point;
/**
*
......@@ -32,7 +33,7 @@ import org.hibernate.annotations.Comment;
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@Table(name = "BS_KEY_ALARM")
@Comment("按键报警规则")
@Comment("按键报警")
public class KeyAlarm extends BasicEntity implements Serializable {
@Serial
......@@ -47,6 +48,26 @@ public class KeyAlarm extends BasicEntity implements Serializable {
@Comment("负责人")
User leader;
@Comment("标签编号")
String code;
@Comment("x")
BigDecimal x;
@Comment("y")
BigDecimal y;
@Comment("z")
BigDecimal z;
@Comment("坐标点信息")
Point point;
@Comment("报警状态")
Boolean enable;
@Builder.Default
@OneToMany(mappedBy = "keyAlarm")
@Comment("推送消息记录")
Set<KeyAlarmLog> rules = new HashSet<>(0);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.key;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yiring.auth.domain.user.User;
import com.yiring.common.domain.BasicEntity;
import java.io.Serial;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
/**
* 报警规则推送记录
*
* @author LJ-2204
* @date 2022/5/12
*/
@Getter
@Setter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@Table(name = "BS_KEY_ALARM_LOG")
@Comment("报警规则推送记录")
public class KeyAlarmLog extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = 5837910859908195485L;
@ManyToOne
@JoinColumn(name = "alarm_id")
@JsonIgnore
@Comment("按键报警")
KeyAlarm keyAlarm;
@Comment("通知方式")
String types;
@Comment("接收状态")
Boolean status;
@ManyToOne
@JoinColumn(name = "leader_id")
@JsonIgnore
@Comment("负责人")
User user;
}
......@@ -13,5 +13,5 @@ import org.springframework.stereotype.Repository;
*/
@Repository
public interface KeyAlarmRulesRepository
extends JpaRepository<KeyAlarmRules, Serializable>, JpaSpecificationExecutor<KeyAlarmRules> {}
public interface KeyAlarmLogRepository
extends JpaRepository<KeyAlarmLog, Serializable>, JpaSpecificationExecutor<KeyAlarmLog> {}
......@@ -33,13 +33,13 @@ import org.hibernate.annotations.Comment;
@Entity
@Table(name = "BS_KEY_ALARM_RULES")
@Comment("按键报警规则")
public class KeyAlarmRules extends BasicEntity implements Serializable {
public class KeyAlarmRule extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = -302167871277966250L;
@Comment("所属部门")
@ManyToOne
@OneToOne
@JsonIgnore
@JoinColumn(name = "department_id")
Department department;
......@@ -47,12 +47,7 @@ public class KeyAlarmRules extends BasicEntity implements Serializable {
@JsonIgnore
@Builder.Default
@Comment("用户集合")
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "BS_KEY_ALARM_RULES_USERS",
joinColumns = { @JoinColumn(name = "key_id") },
inverseJoinColumns = { @JoinColumn(name = "user_id") }
)
@OneToMany
Set<User> users = new HashSet<>(0);
@Comment("推送类型")
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.key;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
*
* @author LJ-2204
* @date 2022/5/6
*/
@Repository
public interface KeyAlarmRuleRepository
extends JpaRepository<KeyAlarmRule, Serializable>, JpaSpecificationExecutor<KeyAlarmRule> {}
......@@ -47,7 +47,7 @@ public class LocationAlarmRule extends BasicEntity implements Serializable {
private LocationFence locationFence;
@Comment("接收人集合")
@ManyToMany
@OneToMany
@ToString.Exclude
private Set<User> users;
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.key;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import com.yiring.app.domain.key.KeyAlarm;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.FieldDefaults;
/**
* 部门信息控制器
*
* @author LJ-2204
* @date 2022/5/11
*/
@ExcelModel
@Data
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class KeyAlarmExportExcel implements Serializable {
@Serial
private static final long serialVersionUID = -3703974403333845088L;
@ExcelColumn(title = "地图位置")
Long areaId;
@ExcelColumn(title = "报警人员")
String realName;
@ExcelColumn(title = "工号")
String uuid;
@ExcelColumn(title = "报警时间")
LocalDateTime createTime;
@ExcelColumn(title = "结束时间")
LocalDateTime endTime;
@ExcelColumn(title = "报警类型")
String type;
@ExcelColumn(title = "报警接收人")
String receiver;
@ExcelColumn(title = "报警状态")
Boolean enable;
public static KeyAlarmExportExcel transform(KeyAlarm keyAlarm) {
return KeyAlarmExportExcel
.builder()
.areaId(keyAlarm.getAreaId())
.createTime(keyAlarm.getCreateTime())
.endTime(keyAlarm.getUpdateTime())
.type("按键报警")
.enable(keyAlarm.getEnable())
.build();
}
}
......@@ -3,7 +3,7 @@ package com.yiring.app.excel.key;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import com.yiring.app.domain.key.KeyAlarmRules;
import com.yiring.app.domain.key.KeyAlarmRule;
import com.yiring.auth.domain.user.User;
import java.io.Serial;
import java.io.Serializable;
......@@ -21,7 +21,7 @@ import lombok.experimental.FieldDefaults;
@Data
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class KeyAlarmRulesExportExcel implements Serializable {
public class KeyAlarmRuleExportExcel implements Serializable {
@Serial
private static final long serialVersionUID = -800228727313291675L;
......@@ -35,8 +35,8 @@ public class KeyAlarmRulesExportExcel implements Serializable {
@ExcelColumn(title = "通知类型")
String types;
public static KeyAlarmRulesExportExcel transform(KeyAlarmRules keyAlarmRules) {
Set<User> users = keyAlarmRules.getUsers();
public static KeyAlarmRuleExportExcel transform(KeyAlarmRule keyAlarmRule) {
Set<User> users = keyAlarmRule.getUsers();
StringBuilder userNames = new StringBuilder();
for (User user : users) {
userNames.append(user.getRealName());
......@@ -44,11 +44,11 @@ public class KeyAlarmRulesExportExcel implements Serializable {
}
String substring = userNames.substring(0, userNames.length() - 1);
return KeyAlarmRulesExportExcel
return KeyAlarmRuleExportExcel
.builder()
.deptName(keyAlarmRules.getDepartment().getName())
.deptName(keyAlarmRule.getDepartment().getName())
.userNames(substring)
.types(keyAlarmRules.getTypes())
.types(keyAlarmRule.getTypes())
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.user;
import cn.hutool.core.util.StrUtil;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.yiring.auth.domain.user.User;
import java.io.Serial;
......@@ -49,10 +50,6 @@ public class UserImportExcel implements Serializable {
@ExcelColumn(title = "职位名称")
String postName;
// 标签号
@ExcelColumn(title = "标签编号")
String code;
// 性别
@ExcelColumn(title = "性别")
Boolean gender;
......@@ -66,7 +63,7 @@ public class UserImportExcel implements Serializable {
.builder()
.realName(userImportExcel.getRealName())
.uuid(userImportExcel.getUuid())
.type(User.Type.valueOf(userImportExcel.getType()))
.type(StrUtil.equals(userImportExcel.getType(), "员工") ? User.Type.EMPLOYEES : User.Type.GUEST)
.mobile(userImportExcel.getMobile())
.gender(userImportExcel.getGender())
.isSpecial(userImportExcel.getIsSpecial())
......
......@@ -132,7 +132,7 @@ public class MockZyMessageJob {
private JSONObject mockKeyWarningMessage() {
JSONObject params = new JSONObject();
params.put("tagId", mockTag());
params.put("entityId", "1522770547178475520");
params.put("entityId", "4376");
params.put("areaId", mockAreaId());
params.put("raiseTime", System.currentTimeMillis());
params.put("x", 100);
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.key;
import com.yiring.app.domain.key.KeyAlarm;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 按键报警
*
* @author LJ-2204
* @date 2022/5/12
*/
@ApiModel("KeyAlarmAddParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class KeyAlarmAddParam implements Serializable {
@Serial
private static final long serialVersionUID = 6914927126284215967L;
@ApiModelProperty(value = "标签编号", example = "BTT88888888")
String tagId;
@ApiModelProperty(value = "报警人ID", example = "14433")
Long entityId;
@ApiModelProperty(value = "地图总图", example = "1")
Long areaId;
@ApiModelProperty(value = "推送时间", example = "")
LocalDateTime raiseTime;
@ApiModelProperty(value = "x", example = "1")
BigDecimal x;
@ApiModelProperty(value = "y", example = "1")
BigDecimal y;
@ApiModelProperty(value = "z", example = "1")
BigDecimal z;
public static KeyAlarm transform(KeyAlarmAddParam param) {
return KeyAlarm
.builder()
.areaId(param.areaId)
.code(param.getTagId())
.x(param.getX())
.y(param.getY())
.z(param.getZ())
.build();
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.key;
import com.yiring.app.push.domain.PushMessage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 按键报警推送
*
* @author LJ-2204
* @date 2022/5/13
*/
@ApiModel("KeyAlarmLogFindParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class KeyAlarmLogFindParam implements Serializable {
@Serial
private static final long serialVersionUID = -7238582681776938388L;
@ApiModelProperty(value = "通知方式", example = "SMS/APP")
PushMessage.Type type;
@ApiModelProperty(value = "联系号码", example = "18888888888")
String mobile;
@ApiModelProperty(value = "接收状态", example = "T/F")
Boolean status;
}
......@@ -17,13 +17,13 @@ import lombok.experimental.FieldDefaults;
* @date 2022/5/6
*/
@ApiModel("KeyAlarmRulesAddParam")
@ApiModel("KeyAlarmRuleAddParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class KeyAlarmRulesAddParam implements Serializable {
public class KeyAlarmRuleAddParam implements Serializable {
@Serial
private static final long serialVersionUID = 758462772473378637L;
......
......@@ -15,13 +15,13 @@ import lombok.experimental.FieldDefaults;
* @date 2022/5/6
*/
@ApiModel("KeyAlarmRulesExportParam")
@ApiModel("KeyAlarmRuleExportParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class KeyAlarmRulesExportParam implements Serializable {
public class KeyAlarmRuleExportParam implements Serializable {
@Serial
private static final long serialVersionUID = -2940487513251067057L;
......
......@@ -16,13 +16,13 @@ import lombok.experimental.FieldDefaults;
* @date 2022/5/6
*/
@ApiModel("KeyAlarmRulesAddParam")
@ApiModel("KeyAlarmRuleAddParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class KeyAlarmRulesModifyParam implements Serializable {
public class KeyAlarmRuleModifyParam implements Serializable {
@Serial
private static final long serialVersionUID = 3526756145220971363L;
......
......@@ -15,13 +15,13 @@ import lombok.experimental.FieldDefaults;
* @date 2022/5/7
*/
@ApiModel("KeyAlarmRulesPageParam")
@ApiModel("KeyAlarmRulePageParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class KeyAlarmRulesPageParam implements Serializable {
public class KeyAlarmRulePageParam implements Serializable {
@Serial
private static final long serialVersionUID = 2876239519436815639L;
......
......@@ -2,6 +2,7 @@
package com.yiring.app.param.location.beacon;
import com.yiring.app.domain.location.LocationBeacon;
import com.yiring.app.util.GeoUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
......@@ -65,9 +66,13 @@ public class LocationBeaconAddParam implements Serializable {
.x(locationBeaconAddParam.getX())
.y(locationBeaconAddParam.getY())
.z(locationBeaconAddParam.getZ())
// .point(GeoUtils.xyzToPoint(
// locationBeaconAddParam.getPointX().doubleValue(),locationBeaconAddParam.getPointY().doubleValue(),locationBeaconAddParam.getPointZ().doubleValue()
// ))
.point(
GeoUtils.xyzToPoint(
locationBeaconAddParam.getX().doubleValue(),
locationBeaconAddParam.getY().doubleValue(),
locationBeaconAddParam.getZ().doubleValue()
)
)
.time(locationBeaconAddParam.getTime())
.volt(locationBeaconAddParam.getVolt())
.voltUnit(locationBeaconAddParam.getVoltUnit())
......
......@@ -6,11 +6,13 @@ import com.yiring.app.param.broadcast.BroadcastAudioFindParam;
import com.yiring.app.param.broadcast.BroadcastAudioModifyParam;
import com.yiring.app.vo.broadcast.BroadcastAudioIndexVo;
import com.yiring.app.vo.broadcast.BroadcastAudioVo;
import com.yiring.auth.param.IdsParam;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.IndexParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import javax.servlet.http.HttpServletResponse;
/**
* 播报语音
......@@ -55,4 +57,11 @@ public interface BroadcastAudioService {
* @return Result<PageVo<BroadcastAudioIndexVo>>
*/
Result<PageVo<BroadcastAudioIndexVo>> index(IndexParam indexParam);
/**
* 批量下载
* @param idsParam IdsParam
* @param response HttpServletResponse
*/
void download(IdsParam idsParam, HttpServletResponse response);
}
......@@ -2,6 +2,8 @@
package com.yiring.app.service.broadcast.impl;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ObjectUtil;
import com.yiring.app.domain.broadcast.BroadcastAudio;
import com.yiring.app.domain.broadcast.BroadcastAudioRepository;
......@@ -9,8 +11,11 @@ import com.yiring.app.param.broadcast.BroadcastAudioAddParam;
import com.yiring.app.param.broadcast.BroadcastAudioFindParam;
import com.yiring.app.param.broadcast.BroadcastAudioModifyParam;
import com.yiring.app.service.broadcast.BroadcastAudioService;
import com.yiring.app.util.ZipUtils;
import com.yiring.app.vo.broadcast.BroadcastAudioIndexVo;
import com.yiring.app.vo.broadcast.BroadcastAudioVo;
import com.yiring.auth.param.IdsParam;
import com.yiring.common.core.Minio;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.domain.BasicEntity;
......@@ -18,12 +23,17 @@ import com.yiring.common.param.IdParam;
import com.yiring.common.param.IndexParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import java.util.List;
import java.util.Optional;
import io.minio.GetObjectResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Predicate;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
......@@ -47,6 +57,9 @@ public class BroadcastAudioServiceImpl implements BroadcastAudioService {
@Resource
BroadcastAudioRepository broadcastAudioRepository;
@Resource
Minio minio;
@Override
public Result<String> save(BroadcastAudioAddParam param) {
broadcastAudioRepository.save(BroadcastAudioAddParam.transform(param));
......@@ -122,4 +135,37 @@ public class BroadcastAudioServiceImpl implements BroadcastAudioService {
return Result.ok(pageVo);
}
@Override
public void download(IdsParam idsParam, HttpServletResponse response) {
String[] split = idsParam.getIds().split(",");
Long[] ids = Convert.toLongArray(split);
List<BroadcastAudio> broadcastAudios = broadcastAudioRepository.findAllById(Arrays.asList(ids));
HashMap<String, File> map = new HashMap<>();
broadcastAudios.forEach(broadcastAudio -> {
String uri = broadcastAudio.getUri();
int i = uri.lastIndexOf("upload/");
uri = uri.substring(i);
try {
GetObjectResponse getObjectResponse = minio.getObject(uri);
File file = FileUtil.writeFromStream(getObjectResponse, FileUtil.createTempFile());
int j = uri.lastIndexOf(".");
uri = uri.substring(j);
map.put(broadcastAudio.getName() + uri, file);
} catch (Exception e) {
e.printStackTrace();
}
});
String fileName = URLEncoder.encode("音频文件.zip", StandardCharsets.UTF_8);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
try {
ZipUtils.packet(map, response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
}
......@@ -76,11 +76,11 @@ public class DepartmentServiceImpl implements DepartmentService {
@Override
public Result<String> addDepartment(DepartmentAddParam departmentAddParam) {
// 查询用户相关信息
Optional<User> userOptional = userRepository.findOne(
Example.of(User.builder().id(departmentAddParam.getLeaderId()).build())
);
Department department = DepartmentAddParam.transform(departmentAddParam);
userOptional.ifPresent(department::setLeader);
if (ObjectUtil.isNotEmpty(departmentAddParam.getLeaderId())) {
Optional<User> userOptional = userRepository.findById(departmentAddParam.getLeaderId());
userOptional.ifPresent(department::setLeader);
}
// 查询zy上级部门id
Optional<Department> departmentOptional = departmentRepository.findOne(
......@@ -157,13 +157,16 @@ public class DepartmentServiceImpl implements DepartmentService {
@Override
public void exportDepartment(DepartmentExportParam departmentExportParam, HttpServletResponse response) {
List<Department> departments = departmentRepository.findAll(
Example.of(Department.builder().enable(departmentExportParam.getEnable()).build())
);
List<DepartmentExportExcel> departmentExportExcels = departments
.stream()
.map(DepartmentExportExcel::transform)
.collect(Collectors.toList());
HashMap<String, Department> hashMap = getStringDepartmentHashMap();
List<DepartmentExportExcel> departmentExportExcels = ListUtil.toList();
hashMap.forEach((k, v) -> {
DepartmentExportExcel departmentExportExcel = DepartmentExportExcel.transform(v);
if (v.getEnable() == departmentExportParam.getEnable()) {
departmentExportExcel.setName(k);
departmentExportExcels.add(departmentExportExcel);
}
});
try (
DefaultStreamExcelBuilder<DepartmentExportExcel> streamExcelBuilder = DefaultStreamExcelBuilder
.of(DepartmentExportExcel.class)
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.key;
import com.yiring.app.param.key.KeyAlarmLogFindParam;
import com.yiring.app.vo.key.KeyAlarmLogVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
/**
* 按键报警推送
*
* @author LJ-2204
* @date 2022/5/13
*/
public interface KeyAlarmLogService {
/**
* 表格查询
* @param param KeyAlarmLogFindParam
* @param pageParam PageParam
* @return Result<PageVo<KeyAlarmLogVo>>
*/
Result<PageVo<KeyAlarmLogVo>> page(KeyAlarmLogFindParam param, PageParam pageParam);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.key;
import com.yiring.app.param.key.KeyAlarmRulesAddParam;
import com.yiring.app.param.key.KeyAlarmRulesExportParam;
import com.yiring.app.param.key.KeyAlarmRulesModifyParam;
import com.yiring.app.param.key.KeyAlarmRulesPageParam;
import com.yiring.app.vo.key.KeyAlarmRulesVo;
import com.yiring.app.param.key.KeyAlarmRuleAddParam;
import com.yiring.app.param.key.KeyAlarmRuleExportParam;
import com.yiring.app.param.key.KeyAlarmRuleModifyParam;
import com.yiring.app.param.key.KeyAlarmRulePageParam;
import com.yiring.app.vo.key.KeyAlarmRuleVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
......@@ -18,13 +18,13 @@ import javax.servlet.http.HttpServletResponse;
* @author LJ-2204
* @date 2022/5/6
*/
public interface KeyAlarmRulesService {
public interface KeyAlarmRuleService {
/**
* 添加报警类型
* @param keyAlarmRulesAddParam KeyAlarmRulesAddParam
* @param keyAlarmRuleAddParam KeyAlarmRuleAddParam
* @return Result<String>
*/
Result<String> add(KeyAlarmRulesAddParam keyAlarmRulesAddParam);
Result<String> add(KeyAlarmRuleAddParam keyAlarmRuleAddParam);
/**
* 删除报警规则
......@@ -35,23 +35,23 @@ public interface KeyAlarmRulesService {
/**
* 修改报警规则
* @param keyAlarmRulesModifyParam KeyAlarmRulesModifyParam
* @param keyAlarmRuleModifyParam KeyAlarmRuleModifyParam
* @return Result<String>
*/
Result<String> modify(KeyAlarmRulesModifyParam keyAlarmRulesModifyParam);
Result<String> modify(KeyAlarmRuleModifyParam keyAlarmRuleModifyParam);
/**
* 导出
* @param keyAlarmRulesExportParam KeyAlarmRulesExportParam
* @param keyAlarmRuleExportParam KeyAlarmRuleExportParam
* @param response HttpServletResponse
*/
void export(KeyAlarmRulesExportParam keyAlarmRulesExportParam, HttpServletResponse response);
void export(KeyAlarmRuleExportParam keyAlarmRuleExportParam, HttpServletResponse response);
/**
* 分页
* @param keyAlarmRulesPageParam KeyAlarmRulesPageParam
* @param keyAlarmRulePageParam KeyAlarmRulePageParam
* @param pageParam PageParam
* @return Result<PageVo<KeyAlarmRulesVo>>
* @return Result<PageVo<KeyAlarmRuleVo>>
*/
Result<PageVo<KeyAlarmRulesVo>> page(KeyAlarmRulesPageParam keyAlarmRulesPageParam, PageParam pageParam);
Result<PageVo<KeyAlarmRuleVo>> page(KeyAlarmRulePageParam keyAlarmRulePageParam, PageParam pageParam);
}
......@@ -6,6 +6,7 @@ import com.yiring.app.vo.key.KeyAlarmVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import javax.servlet.http.HttpServletResponse;
/**
* 部门信息控制器
......@@ -21,4 +22,11 @@ public interface KeyAlarmService {
* @return Result<PageVo<KeyAlarmVo>>
*/
Result<PageVo<KeyAlarmVo>> page(KeyAlarmFindParam param, PageParam pageParam);
/**
* 导出
* @param param KeyAlarmFindParam
* @param response HttpServletResponse
*/
void export(KeyAlarmFindParam param, HttpServletResponse response);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.key.impl;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjectUtil;
import com.yiring.app.domain.key.KeyAlarmLog;
import com.yiring.app.domain.key.KeyAlarmLogRepository;
import com.yiring.app.param.key.KeyAlarmLogFindParam;
import com.yiring.app.service.key.KeyAlarmLogService;
import com.yiring.app.vo.key.KeyAlarmLogVo;
import com.yiring.auth.domain.user.User;
import com.yiring.common.core.Result;
import com.yiring.common.domain.BasicEntity;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Predicate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
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 LJ-2204
* @date 2022/5/13
*/
@Transactional(rollbackFor = RuntimeException.class)
@Service
@Slf4j
public class KeyAlarmLogServiceImpl implements KeyAlarmLogService {
@Resource
KeyAlarmLogRepository keyAlarmLogRepository;
@Override
public Result<PageVo<KeyAlarmLogVo>> page(KeyAlarmLogFindParam param, PageParam pageParam) {
Specification<KeyAlarmLog> specification = (root, cq, cb) -> {
List<Predicate> predicates = ListUtil.toList();
if (ObjectUtil.isNotEmpty(param.getMobile())) {
predicates.add(
cb.like(root.get(KeyAlarmLog.Fields.user).get(User.Fields.mobile), "%" + param.getMobile() + "%")
);
}
if (ObjectUtil.isNotEmpty(param.getStatus())) {
predicates.add(cb.equal(root.get(KeyAlarmLog.Fields.status), param.getStatus()));
}
if (ObjectUtil.isNotEmpty(param.getType())) {
predicates.add(cb.equal(root.get(KeyAlarmLog.Fields.types), param.getType()));
}
Order order = cb.desc(root.get(BasicEntity.Fields.createTime));
return cq.orderBy(order).where(predicates.toArray(new Predicate[0])).getRestriction();
};
Pageable pageable = PageRequest.of(pageParam.getPageNo() - 1, pageParam.getPageSize());
Page<KeyAlarmLog> keyAlarmLogs = keyAlarmLogRepository.findAll(specification, pageable);
List<KeyAlarmLogVo> keyAlarmLogVos = keyAlarmLogs
.getContent()
.stream()
.map(KeyAlarmLogVo::transform)
.collect(Collectors.toList());
PageVo<KeyAlarmLogVo> pageVo = PageVo.build(keyAlarmLogVos, keyAlarmLogs.getTotalElements());
return Result.ok(pageVo);
}
}
......@@ -4,10 +4,12 @@ package com.yiring.app.service.key.impl;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder;
import com.yiring.app.domain.key.KeyAlarm;
import com.yiring.app.domain.key.KeyAlarmRepository;
import com.yiring.app.domain.key.KeyAlarmRules;
import com.yiring.app.domain.key.KeyAlarmRulesRepository;
import com.yiring.app.domain.key.KeyAlarmRule;
import com.yiring.app.domain.key.KeyAlarmRuleRepository;
import com.yiring.app.excel.key.KeyAlarmExportExcel;
import com.yiring.app.param.key.KeyAlarmFindParam;
import com.yiring.app.service.key.KeyAlarmService;
import com.yiring.app.vo.key.KeyAlarmVo;
......@@ -17,14 +19,20 @@ import com.yiring.common.core.Result;
import com.yiring.common.domain.BasicEntity;
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.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.Order;
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.PageRequest;
import org.springframework.data.domain.Pageable;
......@@ -48,7 +56,7 @@ public class KeyAlarmServiceImpl implements KeyAlarmService {
KeyAlarmRepository keyAlarmRepository;
@Resource
KeyAlarmRulesRepository keyAlarmRulesRepository;
KeyAlarmRuleRepository keyAlarmRuleRepository;
@Override
public Result<PageVo<KeyAlarmVo>> page(KeyAlarmFindParam param, PageParam pageParam) {
......@@ -101,13 +109,13 @@ public class KeyAlarmServiceImpl implements KeyAlarmService {
.build();
keyAlarmVo.setUser(userVo);
}
Optional<KeyAlarmRules> keyAlarmRulesOptional = keyAlarmRulesRepository.findById(
Optional<KeyAlarmRule> keyAlarmRuleOptional = keyAlarmRuleRepository.findById(
leader.getDepartment().getId()
);
if (keyAlarmRulesOptional.isPresent()) {
KeyAlarmRules keyAlarmRules = keyAlarmRulesOptional.get();
Set<User> users = keyAlarmRules.getUsers();
if (keyAlarmRuleOptional.isPresent()) {
KeyAlarmRule keyAlarmRule = keyAlarmRuleOptional.get();
Set<User> users = keyAlarmRule.getUsers();
List<String> names = users.stream().map(User::getRealName).collect(Collectors.toList());
keyAlarmVo.setReceiver(StrUtil.join(",", names));
}
......@@ -119,4 +127,94 @@ public class KeyAlarmServiceImpl implements KeyAlarmService {
return Result.ok(pageVo);
}
@Override
public void export(KeyAlarmFindParam param, HttpServletResponse response) {
Specification<KeyAlarm> specification = (root, cq, cb) -> {
List<Predicate> predicates = ListUtil.toList();
if (ObjectUtil.isNotEmpty(param.getAreaId())) {
predicates.add(cb.equal(root.get(KeyAlarm.Fields.areaId), param.getAreaId()));
}
if (ObjectUtil.isNotEmpty(param.getName())) {
predicates.add(
cb.like(root.get(KeyAlarm.Fields.leader).get(User.Fields.realName), "%" + param.getName() + "%")
);
}
if (ObjectUtil.isNotEmpty(param.getEnable())) {
predicates.add(cb.equal(root.get(KeyAlarm.Fields.enable), param.getEnable()));
}
if (ObjectUtil.isNotEmpty(param.getCreateTime())) {
predicates.add(cb.lessThan(root.get(BasicEntity.Fields.createTime), param.getCreateTime()));
}
if (ObjectUtil.isNotEmpty(param.getEndTime())) {
predicates.add(cb.greaterThan(root.get(BasicEntity.Fields.updateTime), param.getEndTime()));
}
Order order = cb.desc(root.get(BasicEntity.Fields.createTime));
return cq.orderBy(order).where(predicates.toArray(new Predicate[0])).getRestriction();
};
List<KeyAlarm> keyAlarms = keyAlarmRepository.findAll(specification);
List<KeyAlarmExportExcel> keyAlarmExportExcels = keyAlarms
.stream()
.map(keyAlarm -> {
KeyAlarmExportExcel keyAlarmExportExcel = KeyAlarmExportExcel.transform(keyAlarm);
User leader = keyAlarm.getLeader();
if (ObjectUtil.isNotEmpty(leader)) {
keyAlarmExportExcel.setRealName(leader.getRealName());
keyAlarmExportExcel.setUuid(leader.getUuid());
}
Optional<KeyAlarmRule> keyAlarmRuleOptional = keyAlarmRuleRepository.findById(
leader.getDepartment().getId()
);
if (keyAlarmRuleOptional.isPresent()) {
KeyAlarmRule keyAlarmRule = keyAlarmRuleOptional.get();
Set<User> users = keyAlarmRule.getUsers();
List<String> names = users.stream().map(User::getRealName).collect(Collectors.toList());
keyAlarmExportExcel.setReceiver(StrUtil.join(",", names));
}
return keyAlarmExportExcel;
})
.collect(Collectors.toList());
try (
DefaultStreamExcelBuilder<KeyAlarmExportExcel> streamExcelBuilder = DefaultStreamExcelBuilder
.of(KeyAlarmExportExcel.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(keyAlarmExportExcels);
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());
}
}
}
......@@ -4,17 +4,22 @@ package com.yiring.app.service.message.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yiring.app.domain.key.*;
import com.yiring.app.domain.location.*;
import com.yiring.app.domain.log.ZyRealtimeLog;
import com.yiring.app.domain.log.ZyRealtimeLogRepository;
import com.yiring.app.param.key.KeyAlarmAddParam;
import com.yiring.app.service.message.ZyMessageService;
import com.yiring.app.util.GeoUtils;
import com.yiring.auth.domain.dept.Department;
import com.yiring.auth.domain.user.User;
import com.yiring.auth.domain.user.UserRepository;
import com.yiring.common.annotation.Times;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
......@@ -51,6 +56,18 @@ public class ZyMessageServiceImpl implements ZyMessageService {
@Resource
ZyRealtimeLogRepository zyRealtimeLogRepository;
@Resource
KeyAlarmRepository keyAlarmRepository;
@Resource
KeyAlarmLogRepository keyAlarmLogRepository;
@Resource
KeyAlarmRuleRepository keyAlarmRuleRepository;
@Resource
UserRepository userRepository;
@Times
@Override
public void consume(String message) {
......@@ -196,5 +213,57 @@ public class ZyMessageServiceImpl implements ZyMessageService {
public void processKeyWarningMessage(JSONObject data) {
// TODO
log.info("KeyWarning Message: {}", data);
KeyAlarmAddParam keyAlarmAddParam = data.toJavaObject(KeyAlarmAddParam.class);
KeyAlarm keyAlarm = KeyAlarmAddParam.transform(keyAlarmAddParam);
keyAlarm.setPoint(
GeoUtils.xyzToPoint(
keyAlarm.getX().doubleValue(),
keyAlarm.getY().doubleValue(),
keyAlarm.getZ().doubleValue()
)
);
Optional<User> userRepositoryOne = userRepository.findOne(
Example.of(User.builder().linkId(keyAlarmAddParam.getEntityId()).build())
);
if (userRepositoryOne.isEmpty()) {
// throw new RuntimeException("没找到该用户");
log.error("没找到该用户");
return;
}
User user = userRepositoryOne.get();
keyAlarm.setLeader(user);
keyAlarm.setEnable(true);
Optional<KeyAlarmRule> keyAlarmRuleOptional = keyAlarmRuleRepository.findOne(
Example.of(
KeyAlarmRule.builder().department(Department.builder().id(user.getDepartment().getId()).build()).build()
)
);
if (keyAlarmRuleOptional.isEmpty()) {
// throw new RuntimeException("该部门未设置报警规则");
log.error("该部门未设置报警规则");
return;
}
final KeyAlarm finalKeyAlarm = keyAlarmRepository.save(keyAlarm);
KeyAlarmRule keyAlarmRule = keyAlarmRuleOptional.get();
Set<User> users = keyAlarmRule.getUsers();
HashSet<KeyAlarmLog> keyAlarmLogs = new HashSet<>();
users.forEach(leader -> {
String[] split = keyAlarmRule.getTypes().split(",");
for (String type : split) {
keyAlarmLogs.add(
KeyAlarmLog.builder().status(false).user(leader).types(type).keyAlarm(finalKeyAlarm).build()
);
}
});
keyAlarmLogRepository.saveAll(keyAlarmLogs);
}
}
......@@ -435,12 +435,6 @@ public class UserAppServiceImpl implements UserAppService {
.filter(userImportExcel ->
userRepository.count(Example.of(User.builder().uuid(userImportExcel.getUuid()).build())) == 0
)
.filter(userImportExcel ->
locationTagRepository.count(
Example.of(LocationTag.builder().code(userImportExcel.getCode()).used(true).build())
) ==
0
)
.collect(Collectors.toList());
userImportExcels.forEach(userImportExcel -> {
......@@ -476,14 +470,11 @@ public class UserAppServiceImpl implements UserAppService {
Object id = JSONUtil.parseObj(records.get(0)).get("id");
Post post = postMap.get(userImportExcel.getPostName()).get(0);
user.setLinkId(Convert.toLong(id));
user.setDepartment(department);
user.setPost(post);
User saveUser = userRepository.save(user);
if (StrUtil.isNotEmpty(userImportExcel.getCode())) {
LocationTag locationTag = LocationTag.builder().code(userImportExcel.getCode()).user(saveUser).build();
locationTagRepository.save(locationTag);
}
userRepository.save(user);
});
return Result.ok();
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.util;
import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.LinkedList;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class ZipUtils {
/**
* 解压文件
* @param file 压缩文件
* @param targetDir 解压文件输出的目录
* @throws IOException IOException
*/
public static void unPacket(Path file, Path targetDir) throws IOException {
if (!Files.exists(targetDir)) {
Files.createDirectories(targetDir);
}
// 创建zip对象
try (ZipFile zipFile = new ZipFile(file.toFile())) {
// 读取zip流
try (ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(file))) {
ZipEntry zipEntry;
// 遍历每一个zip项
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
// 获取zip项目名称
String entryName = zipEntry.getName();
// 构建绝对路径
Path entryFile = targetDir.resolve(entryName);
if (zipEntry.isDirectory()) { // 文件夹
if (!Files.isDirectory(entryFile)) {
Files.createDirectories(entryFile);
}
} else { // 文件
// 读取zip项数据流
try (InputStream zipEntryInputStream = zipFile.getInputStream(zipEntry)) {
try (
OutputStream fileOutputStream = Files.newOutputStream(
entryFile,
StandardOpenOption.CREATE_NEW
)
) {
byte[] buffer = new byte[4096];
int length;
while ((length = zipEntryInputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, length);
}
fileOutputStream.flush();
}
}
}
}
}
}
}
/**
* 压缩指定的文件
* @param files Path[]
* @param zipFile Path
* @throws IOException IOException
*/
public static void packet(Path[] files, Path zipFile) throws IOException {
OutputStream outputStream = Files.newOutputStream(zipFile, StandardOpenOption.CREATE_NEW);
try (outputStream; ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream)) {
for (Path file : files) {
if (Files.isDirectory(file)) {
continue;
}
try (InputStream inputStream = Files.newInputStream(file)) {
// 创建一个压缩项,指定名称
ZipEntry zipEntry = new ZipEntry(file.getFileName().toString());
// 添加到压缩流
zipOutputStream.putNextEntry(zipEntry);
// 写入数据
int len;
byte[] buffer = new byte[1024 * 10];
while ((len = inputStream.read(buffer)) > 0) {
zipOutputStream.write(buffer, 0, len);
}
zipOutputStream.flush();
}
}
// 完成所有压缩项的添加
zipOutputStream.closeEntry();
}
}
/**
* 压缩指定的文件
* @param files Map<String, File>
* @param outputStream OutputStream
*/
public static void packet(Map<String, File> files, OutputStream outputStream) {
try (outputStream; ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream)) {
for (Map.Entry<String, File> file : files.entrySet()) {
String fileName = file.getKey();
File fileValue = file.getValue();
try (InputStream inputStream = new BufferedInputStream(new FileInputStream(fileValue))) {
// 创建一个压缩项,指定名称
ZipEntry zipEntry = new ZipEntry(fileName);
// 添加到压缩流
zipOutputStream.putNextEntry(zipEntry);
// 写入数据
int len;
byte[] buffer = new byte[1024 * 10];
while ((len = inputStream.read(buffer)) > 0) {
zipOutputStream.write(buffer, 0, len);
}
zipOutputStream.flush();
}
}
// 完成所有压缩项的添加
zipOutputStream.closeEntry();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 压缩指定的目录
* @param folder Path
* @param zipFile Path
* @throws IOException IOException
*/
public static void packet(Path folder, Path zipFile) throws IOException {
if (!Files.isDirectory(folder)) {
throw new IllegalArgumentException(folder + " 不是合法的文件夹");
}
OutputStream outputStream = Files.newOutputStream(zipFile, StandardOpenOption.CREATE_NEW);
LinkedList<String> path = new LinkedList<>();
try (outputStream; ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream)) {
Files.walkFileTree(
folder,
new FileVisitor<>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
if (!dir.equals(folder)) {
// 开始遍历目录
String folder = dir.getFileName().toString();
path.addLast(folder);
// 写入目录
ZipEntry zipEntry = new ZipEntry(path.stream().collect(Collectors.joining("/", "", "/")));
try {
zipOutputStream.putNextEntry(zipEntry);
zipOutputStream.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
// 开始遍历文件
try (InputStream inputStream = Files.newInputStream(file)) {
// 创建一个压缩项,指定名称
String fileName = path.size() > 0
? path.stream().collect(Collectors.joining("/", "", "")) +
"/" +
file.getFileName().toString()
: file.getFileName().toString();
ZipEntry zipEntry = new ZipEntry(fileName);
// 添加到压缩流
zipOutputStream.putNextEntry(zipEntry);
// 写入数据
int len;
byte[] buffer = new byte[1024 * 10];
while ((len = inputStream.read(buffer)) > 0) {
zipOutputStream.write(buffer, 0, len);
}
zipOutputStream.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
// 结束遍历目录
if (!path.isEmpty()) {
path.removeLast();
}
return FileVisitResult.CONTINUE;
}
}
);
zipOutputStream.closeEntry();
}
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.key;
import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.domain.key.KeyAlarmLog;
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.time.LocalDateTime;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 按键报警推送
*
* @author LJ-2204
* @date 2022/5/13
*/
@ApiModel("KeyAlarmLogVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class KeyAlarmLogVo implements Serializable {
@Serial
private static final long serialVersionUID = 9135155632502530938L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "主键", example = "111")
Long id;
@ApiModelProperty(value = "用户", example = "111")
UserVo userVo;
@ApiModelProperty(value = "通知方式", example = "SMS/APP")
String type;
@ApiModelProperty(value = "接收状态", example = "T/F")
Boolean status;
@ApiModelProperty(value = "接收时间", example = "2011-11-11 22:22:22")
LocalDateTime updateTime;
public static KeyAlarmLogVo transform(KeyAlarmLog keyAlarmLog) {
KeyAlarmLogVo keyAlarmLogVo = KeyAlarmLogVo
.builder()
.id(keyAlarmLog.getId())
.type(keyAlarmLog.getTypes())
.status(keyAlarmLog.getStatus())
.updateTime(keyAlarmLog.getUpdateTime())
.build();
if (ObjectUtil.isNotEmpty(keyAlarmLog.getUser())) {
User user = keyAlarmLog.getUser();
keyAlarmLogVo.setUserVo(
UserVo.builder().id(user.getId()).realName(user.getRealName()).mobile(user.getMobile()).build()
);
}
return keyAlarmLogVo;
}
}
......@@ -3,7 +3,7 @@ package com.yiring.app.vo.key;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.domain.key.KeyAlarmRules;
import com.yiring.app.domain.key.KeyAlarmRule;
import com.yiring.app.vo.user.UserInfoVo;
import com.yiring.auth.domain.user.User;
import io.swagger.annotations.ApiModel;
......@@ -23,13 +23,13 @@ import lombok.experimental.FieldDefaults;
* @date 2022/5/7
*/
@ApiModel("KeyAlarmRulesVo")
@ApiModel("KeyAlarmRuleVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class KeyAlarmRulesVo implements Serializable {
public class KeyAlarmRuleVo implements Serializable {
@Serial
private static final long serialVersionUID = 5083435104462641333L;
......@@ -51,17 +51,17 @@ public class KeyAlarmRulesVo implements Serializable {
@ApiModelProperty(value = "推送类型", example = "111")
String[] types;
public static KeyAlarmRulesVo transform(KeyAlarmRules keyAlarmRules) {
Set<User> users = keyAlarmRules.getUsers();
public static KeyAlarmRuleVo transform(KeyAlarmRule keyAlarmRule) {
Set<User> users = keyAlarmRule.getUsers();
List<UserInfoVo> userInfoVos = users.stream().map(UserInfoVo::transform).collect(Collectors.toList());
return KeyAlarmRulesVo
return KeyAlarmRuleVo
.builder()
.id(keyAlarmRules.getId())
.deptId(keyAlarmRules.getDepartment().getId())
.deptName(keyAlarmRules.getDepartment().getName())
.id(keyAlarmRule.getId())
.deptId(keyAlarmRule.getDepartment().getId())
.deptName(keyAlarmRule.getDepartment().getName())
.users(userInfoVos)
.types(keyAlarmRules.getTypes().split(","))
.types(keyAlarmRule.getTypes().split(","))
.build();
}
}
......@@ -7,6 +7,7 @@ import com.yiring.app.param.broadcast.BroadcastAudioModifyParam;
import com.yiring.app.service.broadcast.BroadcastAudioService;
import com.yiring.app.vo.broadcast.BroadcastAudioIndexVo;
import com.yiring.app.vo.broadcast.BroadcastAudioVo;
import com.yiring.auth.param.IdsParam;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.IndexParam;
......@@ -15,8 +16,10 @@ 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.*;
......@@ -67,7 +70,9 @@ public class BroadcastAudioController {
return broadcastAudioService.index(indexParam);
}
@ApiOperation("批量下载")
@ApiOperation(value = "批量下载", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@GetMapping("download")
public void download() {}
public void download(@Valid IdsParam idsParam, HttpServletResponse response) {
broadcastAudioService.download(idsParam, response);
}
}
......@@ -18,6 +18,7 @@ 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.*;
import org.springframework.web.multipart.MultipartFile;
......@@ -56,7 +57,7 @@ public class DepartmentController {
return departmentService.findDepartmentInfo(idParam);
}
@ApiOperation("部门导出")
@ApiOperation(value = "部门导出", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@GetMapping("exportDepartment")
public void exportDepartment(@Valid DepartmentExportParam departmentExportParam, HttpServletResponse response) {
departmentService.exportDepartment(departmentExportParam, response);
......
......@@ -10,6 +10,7 @@ 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 lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
......@@ -38,4 +39,10 @@ public class KeyAlarmController {
public Result<PageVo<KeyAlarmVo>> page(KeyAlarmFindParam param, PageParam pageParam) {
return keyAlarmService.page(param, pageParam);
}
@ApiOperation("导出")
@GetMapping
public void export(KeyAlarmFindParam param, HttpServletResponse response) {
keyAlarmService.export(param, response);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.key;
import com.yiring.app.param.key.KeyAlarmLogFindParam;
import com.yiring.app.service.key.KeyAlarmLogService;
import com.yiring.app.vo.key.KeyAlarmLogVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 按键报警推送信息
*
* @author LJ-2204
* @date 2022/5/13
*/
@Slf4j
@Validated
@Api(tags = "按键报警推送")
@RestController
@RequestMapping("/key/alarm/log")
public class KeyAlarmLogController {
@Resource
KeyAlarmLogService keyAlarmLogService;
@ApiOperation("表格查询")
@GetMapping("page")
public Result<PageVo<KeyAlarmLogVo>> page(KeyAlarmLogFindParam param, PageParam pageParam) {
return keyAlarmLogService.page(param, pageParam);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.key;
import com.yiring.app.param.key.KeyAlarmRulesAddParam;
import com.yiring.app.param.key.KeyAlarmRulesExportParam;
import com.yiring.app.param.key.KeyAlarmRulesModifyParam;
import com.yiring.app.param.key.KeyAlarmRulesPageParam;
import com.yiring.app.service.key.KeyAlarmRulesService;
import com.yiring.app.vo.key.KeyAlarmRulesVo;
import com.yiring.app.param.key.KeyAlarmRuleAddParam;
import com.yiring.app.param.key.KeyAlarmRuleExportParam;
import com.yiring.app.param.key.KeyAlarmRuleModifyParam;
import com.yiring.app.param.key.KeyAlarmRulePageParam;
import com.yiring.app.service.key.KeyAlarmRuleService;
import com.yiring.app.vo.key.KeyAlarmRuleVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
......@@ -31,38 +31,38 @@ import org.springframework.web.bind.annotation.*;
@Api(tags = "按键报警规则")
@RestController
@RequestMapping("/key/alarm/rules")
public class KeyAlarmRulesController {
public class KeyAlarmRuleController {
@Resource
KeyAlarmRulesService keyAlarmRulesService;
KeyAlarmRuleService keyAlarmRuleService;
@ApiOperation("新增报警规则")
@PostMapping("add")
public Result<String> add(KeyAlarmRulesAddParam keyAlarmRulesAddParam) {
return keyAlarmRulesService.add(keyAlarmRulesAddParam);
public Result<String> add(KeyAlarmRuleAddParam keyAlarmRuleAddParam) {
return keyAlarmRuleService.add(keyAlarmRuleAddParam);
}
@ApiOperation("删除报警规则")
@DeleteMapping("delete")
public Result<String> delete(IdParam idParam) {
return keyAlarmRulesService.delete(idParam);
return keyAlarmRuleService.delete(idParam);
}
@ApiOperation("更新报警规则")
@PutMapping("modify")
public Result<String> modify(KeyAlarmRulesModifyParam keyAlarmRulesModifyParam) {
return keyAlarmRulesService.modify(keyAlarmRulesModifyParam);
public Result<String> modify(KeyAlarmRuleModifyParam keyAlarmRuleModifyParam) {
return keyAlarmRuleService.modify(keyAlarmRuleModifyParam);
}
@ApiOperation("导出")
@GetMapping("export")
public void export(KeyAlarmRulesExportParam keyAlarmRulesExportParam, HttpServletResponse response) {
keyAlarmRulesService.export(keyAlarmRulesExportParam, response);
public void export(KeyAlarmRuleExportParam keyAlarmRuleExportParam, HttpServletResponse response) {
keyAlarmRuleService.export(keyAlarmRuleExportParam, response);
}
@ApiOperation("表格查询")
@GetMapping("page")
public Result<PageVo<KeyAlarmRulesVo>> page(KeyAlarmRulesPageParam keyAlarmRulesPageParam, PageParam pageParam) {
return keyAlarmRulesService.page(keyAlarmRulesPageParam, pageParam);
public Result<PageVo<KeyAlarmRuleVo>> page(KeyAlarmRulePageParam keyAlarmRulePageParam, PageParam pageParam) {
return keyAlarmRuleService.page(keyAlarmRulePageParam, pageParam);
}
}
......@@ -17,6 +17,7 @@ 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.*;
import org.springframework.web.multipart.MultipartFile;
......@@ -69,7 +70,7 @@ public class UserAppController {
return userService.deleteUser(idsParam);
}
@ApiOperation("用户导出")
@ApiOperation(value = "用户导出", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@GetMapping("exportUser")
public void exportUser(@Valid UserFindParam userFindParam, HttpServletResponse response) {
userService.exportUser(userFindParam, response);
......
......@@ -5,6 +5,7 @@ import com.yiring.auth.param.user.UserFindParam;
import com.yiring.auth.param.user.UserSaveParam;
import com.yiring.auth.vo.user.UserVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
......@@ -29,4 +30,11 @@ public interface UserService {
* @return Result<PageVo<UserVo>>
*/
Result<PageVo<UserVo>> page(UserFindParam param, PageParam pageParam);
/**
* 重置密码
* @param idParam IdParam
* @return Result<String>
*/
Result<String> reset(IdParam idParam);
}
......@@ -12,10 +12,13 @@ import com.yiring.auth.param.user.UserSaveParam;
import com.yiring.auth.service.user.UserService;
import com.yiring.auth.vo.user.UserVo;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.domain.BasicEntity;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaBuilder;
......@@ -87,4 +90,18 @@ public class UserServiceImpl implements UserService {
PageVo<UserVo> pageVo = PageVo.build(userVos, users.getTotalElements());
return Result.ok(pageVo);
}
@Override
public Result<String> reset(IdParam idParam) {
Optional<User> userOptional = userRepository.findById(idParam.getId());
if (userOptional.isPresent()) {
User user = userOptional.get();
user.setPassword("123456");
userRepository.save(user);
return Result.ok();
}
return Result.no(Status.BAD_REQUEST);
}
}
......@@ -145,4 +145,10 @@ public class UserController {
public Result<String> add(@Valid UserSaveParam param) {
return userService.add(param);
}
@ApiOperation("重置密码")
@PostMapping("reset")
public Result<String> reset(@Valid IdParam idParam) {
return userService.reset(idParam);
}
}
......@@ -15,10 +15,7 @@ import java.time.format.DateTimeFormatter;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
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.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
/**
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论