提交 7773af7b 作者: Administrator

feat : 播报设备,图标基本功能实现

上级 35c83a1b
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.broadcast;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.UpdateTimestamp;
import org.hibernate.snowflake.SnowflakeId;
import org.locationtech.jts.geom.Point;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/5 17:06
*/
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@Comment("播报设备表")
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@Table(name = "BS_BROADCAST")
public class Broadcast implements Serializable {
@Serial
private static final long serialVersionUID = 2856845594409003209L;
@Comment("编号")
@Id
@GeneratedValue(generator = SnowflakeId.GENERATOR)
@GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.LONG)
Long id;
@Comment("播报设备编号")
String broadcastNum;
@Comment("播报设备名称")
String broadcastName;
@Comment("坐标点信息")
Point point;
@Comment("播报设备地址")
String broadcastAdd;
@Comment("备注")
String remark;
@Comment("是否启用")
String status;
@Comment("创建时间")
@CreationTimestamp
LocalDateTime createTime;
@Comment("修改时间")
@UpdateTimestamp
LocalDateTime updateTime;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.broadcast;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
* @author tzl
* 2022/5/5 17:13
*/
@Repository
public interface BroadcastRepository
extends JpaRepository<Broadcast, Serializable>, JpaSpecificationExecutor<Broadcast> {}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.icon;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
/**
*
* @author tzl
* @version 1.0
* @description: 图标
* @date 2022/4/29 11:08
*/
@Getter
@Setter
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@Table(name = "BS_ICON")
@Comment("图标")
public class Icon implements Serializable {
@Serial
private static final long serialVersionUID = 7848846860889883431L;
@Comment("编号")
@Id
@GeneratedValue(generator = SnowflakeId.GENERATOR)
@GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.LONG)
Long id;
@Comment("图标名称")
String iconName;
@Comment("图标类型")
String iconType;
@Comment("图标分类")
String iconSort;
@Comment("在线图标")
String iconOnline;
@Comment("离线图标")
String iconOffline;
@Comment("创建时间")
LocalDateTime createTime;
@Comment("修改时间")
LocalDateTime updateTime;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.icon;
import java.io.Serializable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**
* @author tzl
* 2022/4/29 13:49
*/
@Repository
public interface IconRepository extends JpaRepository<Icon, Serializable>, JpaSpecificationExecutor<Icon> {}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.broadcast;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
import org.locationtech.jts.geom.Point;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/6 9:04
*/
@ExcelModel
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BroadcastExportExcel implements Serializable {
@Serial
private static final long serialVersionUID = 2342047029622668894L;
@ExcelColumn(title = "编号", width = 10)
String broadcastNum;
@ExcelColumn(title = "设备名称", width = 10)
String broadcastName;
@ExcelColumn(title = "坐标点信息(经度,纬度)", width = 10)
Point point;
@ExcelColumn(title = "音柱地址", width = 10)
String broadcastAdd;
@ExcelColumn(title = "备注", width = 15)
String remark;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.broadcast;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* 2022/5/6 09:12
*/
@ExcelModel
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BroadcastImportExcel implements Serializable {
@Serial
private static final long serialVersionUID = 5422685189135254189L;
@ExcelColumn(title = "编号")
String broadcastNum;
@ExcelColumn(title = "设备名称")
String broadcastName;
@ExcelColumn(title = "经度")
double lon;
@ExcelColumn(title = "纬度")
double lat;
@ExcelColumn(title = "音柱地址")
String broadcastAdd;
@ExcelColumn(title = "备注")
String remark;
// String status;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.broadcast;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 播报设备入参
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/5 17:14
*/
@ApiModel("BroadcastParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BroadcastParam implements Serializable {
@Serial
private static final long serialVersionUID = -2629601722942495674L;
@ApiModelProperty(value = "编号", example = "1", required = true)
@NotNull(message = "编号")
String broadcastNum;
@ApiModelProperty(value = "经度", example = "1.00", required = true)
@NotNull(message = "经度")
Double lon;
@ApiModelProperty(value = "纬度", example = "1.00", required = true)
@NotNull(message = "纬度")
Double lat;
@ApiModelProperty(value = "备注", example = "厂区喇叭")
@Size(max = 100, message = "备注不能超过100字")
String remark;
@ApiModelProperty(value = "音柱地址", example = "音柱地址", required = true)
@NotEmpty(message = "音柱地址不能为空")
String broadcastAdd;
@ApiModelProperty(value = "播报设备地址名称", example = "喇叭1", required = true)
@NotEmpty(message = "播报设备地址名称不能为空")
String broadcastName;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.broadcast;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/5 17:22
*/
@ApiModel("BroadcastQueryParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BroadcastQueryParam implements Serializable {
@Serial
private static final long serialVersionUID = -7181714985511069309L;
@ApiModelProperty(value = "编号", example = "1")
String broadcastNum;
@ApiModelProperty(value = "播报设备地址名称", example = "喇叭1")
String broadcastName;
@ApiModelProperty(value = "状态", example = "1")
String status;
@ApiModelProperty(value = "分页条数", example = "10", required = true)
Integer pageSize;
@ApiModelProperty(value = "当前页数", example = "1", required = true)
Integer pageNo;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.icon;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/5 9:30
*/
@ApiModel("IconParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class IconParam implements Serializable {
@Serial
private static final long serialVersionUID = 666028441935810972L;
@ApiModelProperty(value = "图标名称", example = "访客头像", required = true)
@NotEmpty(message = "图标名称不能为空")
String iconName;
@ApiModelProperty(value = "图标类型", example = "1", required = true)
@NotEmpty(message = "图标类型不能为空")
String iconType;
@ApiModelProperty(value = "图标分类", example = "1", required = true)
@NotEmpty(message = "图标类型不能为空")
String iconSort;
@ApiModelProperty(value = "在线图标地址", required = true)
String iconOnline;
@ApiModelProperty(value = "离线图标地址", required = true)
String iconOffline;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.broadcast;
import com.yiring.app.param.broadcast.BroadcastParam;
import com.yiring.app.param.broadcast.BroadcastQueryParam;
import com.yiring.app.vo.broadcast.BroadcastVo;
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 javax.servlet.http.HttpServletResponse;
import org.locationtech.jts.geom.Point;
import org.springframework.web.multipart.MultipartFile;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/5 17:31
*/
public interface BroadcastService {
/**
* 新增播报设备
* @author tzl
* @date 2022/5/5 17:33
* @param broadcastParam BroadcastParam
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> saveBroadcast(BroadcastParam broadcastParam);
/**
* 修改播报设备
* @author tzl
* @date 2022/5/5 17:34
* @param broadcastParam BroadcastParam
* @param idParam IdParam
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> updateBroadcast(BroadcastParam broadcastParam, IdParam idParam);
/**
* 删除播报设备
* @author tzl
* @date 2022/5/5 17:35
* @param idParam IdParam
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> deleteBroadcast(IdParam idParam);
/**
* 查看设备位置
* @author tzl
* @date 2022/5/5 17:47
* @param idParam IdParam
* @return com.yiring.common.core.Result<org.locationtech.jts.geom.Point>
*/
Result<Point> selectPoint(IdParam idParam);
/**
* 分页查询设备
* @author tzl
* @date 2022/5/5 17:49
* @param broadcastQueryParam BroadcastQueryParam
* @return com.yiring.common.core.Result<com.yiring.app.vo.broadcast.BroadcastVo>
*/
Result<PageVo<BroadcastVo>> pageBroadcast(BroadcastQueryParam broadcastQueryParam);
/**
* 导出播报设备
* @author tzl
* @date 2022/5/6 8:56
* @param broadcastQueryParam BroadcastQueryParam
* @param response HttpServletResponse
*/
void exportBroadcast(BroadcastQueryParam broadcastQueryParam, HttpServletResponse response);
/**
* 播报设备导入
* @author tzl
* @date 2022/5/6 10:00
* @param file 文件
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> importBroadcast(MultipartFile file);
/**
* 根据名字检索
* @author tzl
* @date 2022/5/6 10:26
* @param indexParam 入参
* @return com.yiring.common.core.Result<com.yiring.common.vo.PageVo<com.yiring.app.vo.broadcast.BroadcastVo>>
*/
Result<PageVo<BroadcastVo>> selectBroadcastName(IndexParam indexParam);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.broadcast.impl;
import cn.hutool.core.util.StrUtil;
import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder;
import com.github.liaochong.myexcel.core.SaxExcelReader;
import com.yiring.app.domain.broadcast.Broadcast;
import com.yiring.app.domain.broadcast.BroadcastRepository;
import com.yiring.app.excel.broadcast.BroadcastExportExcel;
import com.yiring.app.excel.broadcast.BroadcastImportExcel;
import com.yiring.app.param.broadcast.BroadcastParam;
import com.yiring.app.param.broadcast.BroadcastQueryParam;
import com.yiring.app.service.broadcast.BroadcastService;
import com.yiring.app.util.GeoUtils;
import com.yiring.app.vo.broadcast.BroadcastVo;
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 java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.*;
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.locationtech.jts.geom.Point;
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;
import org.springframework.web.multipart.MultipartFile;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/5 17:32
*/
@Slf4j
@Transactional(rollbackFor = RuntimeException.class)
@Service
public class BroadcastServiceImpl implements BroadcastService {
@Resource
BroadcastRepository broadcastRepository;
@Override
public Result<String> saveBroadcast(BroadcastParam broadcastParam) {
if (has(broadcastParam.getBroadcastNum())) {
return Result.no(Status.BAD_REQUEST, "播报设备编号已存在");
}
Broadcast broadcast = new Broadcast();
BeanUtils.copyProperties(broadcastParam, broadcast);
broadcast.setPoint(GeoUtils.createPoint(broadcastParam.getLon(), broadcastParam.getLat()));
broadcastRepository.saveAndFlush(broadcast);
return Result.ok();
}
@Override
public Result<String> updateBroadcast(BroadcastParam broadcastParam, IdParam idParam) {
Optional<Broadcast> byId = broadcastRepository.findById(idParam.getId());
if (byId.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Broadcast broadcast = byId.get();
if (!broadcast.getBroadcastNum().equals(broadcastParam.getBroadcastNum())) {
if (has(broadcastParam.getBroadcastNum())) {
return Result.no(Status.BAD_REQUEST, "播报设备编号已存在");
}
}
BeanUtils.copyProperties(broadcastParam, broadcast);
broadcast.setPoint(GeoUtils.createPoint(broadcastParam.getLon(), broadcastParam.getLat()));
broadcastRepository.saveAndFlush(broadcast);
return Result.ok();
}
@Override
public Result<String> deleteBroadcast(IdParam idParam) {
Optional<Broadcast> byId = broadcastRepository.findById(idParam.getId());
if (byId.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Broadcast broadcast = byId.get();
broadcastRepository.delete(broadcast);
return Result.ok();
}
@Override
public Result<Point> selectPoint(IdParam idParam) {
Optional<Broadcast> byId = broadcastRepository.findById(idParam.getId());
if (byId.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Broadcast broadcast = byId.get();
return Result.ok(broadcast.getPoint());
}
@Override
public Result<PageVo<BroadcastVo>> pageBroadcast(BroadcastQueryParam broadcastQueryParam) {
PageVo<BroadcastVo> resultVo;
//排序
Sort sort = Sort.by(Sort.Order.desc(Broadcast.Fields.updateTime));
if (Objects.nonNull(broadcastQueryParam.getPageNo()) && Objects.nonNull(broadcastQueryParam.getPageSize())) {
//分页
Pageable pageable = PageRequest.of(broadcastQueryParam.getPageNo() - 1, broadcastQueryParam.getPageSize());
Page<Broadcast> all = broadcastRepository.findAll(condition(broadcastQueryParam), pageable);
List<BroadcastVo> data = all
.get()
.map(invitation -> {
BroadcastVo vo = new BroadcastVo();
BeanUtils.copyProperties(invitation, vo);
return vo;
})
.collect(Collectors.toList());
resultVo = PageVo.build(data, all.getTotalElements());
} else {
List<Broadcast> all = broadcastRepository.findAll(condition(broadcastQueryParam), sort);
List<BroadcastVo> data = all
.stream()
.map(invitation -> {
BroadcastVo vo = new BroadcastVo();
BeanUtils.copyProperties(invitation, vo);
return vo;
})
.collect(Collectors.toList());
resultVo = PageVo.build(data, data.size());
}
return Result.ok(resultVo);
}
@Override
public Result<String> importBroadcast(MultipartFile file) {
if (file.isEmpty()) {
throw new RuntimeException("请选择文件");
}
List<BroadcastImportExcel> broadcastImportExcels;
try (InputStream inputStream = file.getInputStream()) {
broadcastImportExcels =
SaxExcelReader
.of(BroadcastImportExcel.class)
.rowFilter(row -> row.getRowNum() > 0)
.ignoreBlankRow()
.read(inputStream);
} catch (IOException e) {
log.info(e.getMessage());
throw new RuntimeException("文件导入异常");
}
List<Broadcast> broadcasts = broadcastImportExcels
.stream()
.map(broadcastImportExcel -> {
Broadcast broadcast = new Broadcast();
BeanUtils.copyProperties(broadcastImportExcel, broadcast);
broadcast.setPoint(GeoUtils.createPoint(broadcastImportExcel.getLon(), broadcastImportExcel.getLat()));
broadcast.setCreateTime(LocalDateTime.now());
return broadcast;
})
.toList();
//检查是否有编号重复的数据
if (broadcasts != null) {
broadcasts.forEach(broadcast ->
broadcastRepository
.findOne((root, cq, cb) -> {
List<Predicate> predicates = new ArrayList<>();
if (StrUtil.isNotBlank(broadcast.getBroadcastNum())) {
predicates.add(
cb.equal(
root.get(Broadcast.Fields.broadcastNum).as(String.class),
broadcast.getBroadcastNum()
)
);
}
return cq.where(predicates.toArray(new Predicate[0])).getRestriction();
})
.ifPresent(one -> {
//如果存在则操作修改
broadcast.setId(one.getId());
})
);
//根据编号去重
broadcasts =
broadcasts
.stream()
.collect(
Collectors.collectingAndThen(
Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(Broadcast::getBroadcastNum))
),
ArrayList::new
)
);
broadcastRepository.saveAllAndFlush(broadcasts);
}
return Result.ok();
}
@Override
public Result<PageVo<BroadcastVo>> selectBroadcastName(IndexParam indexParam) {
Sort sort = Sort.by(Sort.Order.desc(Broadcast.Fields.updateTime));
List<Broadcast> all = broadcastRepository.findAll(
condition(BroadcastQueryParam.builder().broadcastName(indexParam.getStr()).build()),
sort
);
List<BroadcastVo> data = all
.stream()
.map(invitation -> {
BroadcastVo vo = new BroadcastVo();
BeanUtils.copyProperties(invitation, vo);
return vo;
})
.collect(Collectors.toList());
PageVo<BroadcastVo> resultVo = PageVo.build(data, data.size());
return Result.ok(resultVo);
}
@Override
public void exportBroadcast(BroadcastQueryParam broadcastQueryParam, HttpServletResponse response) {
List<Broadcast> broadcasts = broadcastRepository.findAll(condition(broadcastQueryParam));
List<BroadcastExportExcel> broadcastExportExcels = broadcasts
.stream()
.map(broadcast -> {
BroadcastExportExcel broadcastExportExcel = new BroadcastExportExcel();
BeanUtils.copyProperties(broadcast, broadcastExportExcel);
return broadcastExportExcel;
})
.toList();
try (
DefaultStreamExcelBuilder<BroadcastExportExcel> defaultStreamExcelBuilder = DefaultStreamExcelBuilder
.of(BroadcastExportExcel.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(broadcastExportExcels);
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<Broadcast> condition(BroadcastQueryParam broadcastQueryParam) {
return (root, query, criteriaBuilder) -> {
List<Predicate> list = new ArrayList<>();
if (StrUtil.isNotBlank(broadcastQueryParam.getBroadcastName())) {
list.add(
criteriaBuilder.like(
root.get(Broadcast.Fields.broadcastName).as(String.class),
"%" + broadcastQueryParam.getBroadcastName() + "%"
)
);
}
if (StrUtil.isNotBlank(broadcastQueryParam.getBroadcastNum())) {
list.add(
criteriaBuilder.like(
root.get(Broadcast.Fields.broadcastNum).as(String.class),
"%" + broadcastQueryParam.getBroadcastNum() + "%"
)
);
}
if (StrUtil.isNotBlank(broadcastQueryParam.getStatus())) {
list.add(
criteriaBuilder.like(
root.get(Broadcast.Fields.status).as(String.class),
"%" + broadcastQueryParam.getStatus() + "%"
)
);
}
Predicate[] predicates = new Predicate[list.size()];
query.where(list.toArray(predicates));
return criteriaBuilder.and(list.toArray(predicates));
};
}
boolean has(String param) {
Broadcast broadcast = Broadcast.builder().broadcastNum(param).build();
return broadcastRepository.count(Example.of(broadcast)) > 0;
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.icon;
import com.yiring.app.param.icon.IconParam;
import com.yiring.app.vo.icon.IconVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
/**
* @author tzl
* @date 2022/5/5 9:28
*/
public interface IconService {
/**
* 图标新增接口
* @author tzl
* @date 2022/5/5 10:03
* @param iconParam IconParam
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> saveIcon(IconParam iconParam);
/**
* 图标删除接口
* @author tzl
* @date 2022/5/5 10:23
* @param idParam IdParam
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> deleteIcon(IdParam idParam);
/**
* 图标修改接口
* @author tzl
* @date 2022/5/5 10:26
* @param iconParam IconParam
* @param idParam IdParam
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> updateIcon(IconParam iconParam, IdParam idParam);
/**
* 分页查询
* @author tzl
* @date 2022/5/5 15:09
* @param pageParam PageParam
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<PageVo<IconVo>> pageIcon(PageParam pageParam);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.icon.impl;
import com.yiring.app.domain.icon.Icon;
import com.yiring.app.domain.icon.IconRepository;
import com.yiring.app.param.icon.IconParam;
import com.yiring.app.service.icon.IconService;
import com.yiring.app.vo.icon.IconVo;
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.List;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.*;
import org.springframework.stereotype.Service;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/5 9:28
*/
@Service
public class IconServiceImpl implements IconService {
@Resource
IconRepository iconRepository;
@Override
public Result<String> saveIcon(IconParam iconParam) {
if (hasIconName(iconParam.getIconName())) {
return Result.no(Status.BAD_REQUEST, "图标名称已存在");
}
Icon icon = new Icon();
BeanUtils.copyProperties(iconParam, icon);
iconRepository.saveAndFlush(icon);
return Result.ok();
}
@Override
public Result<String> deleteIcon(IdParam idParam) {
Optional<Icon> optional = iconRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Icon icon = optional.get();
iconRepository.delete(icon);
return Result.ok();
}
@Override
public Result<String> updateIcon(IconParam iconParam, IdParam idParam) {
Optional<Icon> optional = iconRepository.findById(idParam.getId());
if (optional.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
Icon icon = optional.get();
//当修改图标名称时
if (!icon.getIconName().equals(iconParam.getIconName())) {
if (hasIconName(iconParam.getIconName())) {
return Result.no(Status.BAD_REQUEST, "图标名称已存在");
}
}
BeanUtils.copyProperties(iconParam, icon);
iconRepository.saveAndFlush(icon);
return Result.ok();
}
@Override
public Result<PageVo<IconVo>> pageIcon(PageParam pageParam) {
//分页
Pageable pageable = PageRequest.of(pageParam.getPageNo() - 1, pageParam.getPageSize());
Page<Icon> all = iconRepository.findAll(pageable);
List<IconVo> data = all
.get()
.map(icon -> {
IconVo vo = new IconVo();
BeanUtils.copyProperties(icon, vo);
return vo;
})
.collect(Collectors.toList());
PageVo<IconVo> resultVo = PageVo.build(data, all.getTotalElements());
return Result.ok(resultVo);
}
public boolean hasIconName(String param) {
Icon icon = Icon.builder().iconName(param).build();
long count = iconRepository.count(Example.of(icon));
return count > 0;
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.broadcast;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
import org.locationtech.jts.geom.Point;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/5 17:26
*/
@ApiModel("BroadcastVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class BroadcastVo implements Serializable {
@Serial
private static final long serialVersionUID = 2927556677143859520L;
@ApiModelProperty(value = "编号", example = "1")
String broadcastNum;
@ApiModelProperty(value = "坐标点信息")
Point point;
@ApiModelProperty(value = "备注", example = "厂区喇叭")
String remark;
@ApiModelProperty(value = "音柱地址", example = "音柱地址")
String broadcastAdd;
@ApiModelProperty(value = "播报设备地址名称", example = "喇叭1")
String broadcastName;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.icon;
import java.io.Serial;
import java.io.Serializable;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/5 15:10
*/
public class IconVo implements Serializable {
@Serial
private static final long serialVersionUID = 2334297671118394950L;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.broadcast;
import com.yiring.app.param.broadcast.BroadcastParam;
import com.yiring.app.param.broadcast.BroadcastQueryParam;
import com.yiring.app.service.broadcast.BroadcastService;
import com.yiring.app.vo.broadcast.BroadcastVo;
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;
import io.swagger.annotations.ApiImplicitParams;
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.locationtech.jts.geom.Point;
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;
import org.springframework.web.multipart.MultipartFile;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/6 10:15
*/
@Slf4j
@Validated
@Api(tags = "Broadcast(播报设备管理)")
@RestController
@RequestMapping("/broadcast/")
public class BroadcastController {
@Resource
BroadcastService broadcastService;
@ApiOperation(value = "新增设备信息")
@PostMapping("saveBroadcast")
public Result<String> saveBroadcast(@Valid BroadcastParam broadcastParam) {
return broadcastService.saveBroadcast(broadcastParam);
}
@ApiOperation(value = "删除设备信息")
@PostMapping("deleteBroadcast")
public Result<String> deleteBroadcast(@Valid IdParam idParam) {
return broadcastService.deleteBroadcast(idParam);
}
@ApiOperation(value = "修改设备信息")
@PostMapping("updateBroadcast")
public Result<String> updateBroadcast(@Valid BroadcastParam broadcastParam, @Valid IdParam idParam) {
return broadcastService.updateBroadcast(broadcastParam, idParam);
}
@ApiOperation(value = "查看设备位置")
@GetMapping("selectPoint")
public Result<Point> selectPoint(@Valid IdParam idParam) {
return broadcastService.selectPoint(idParam);
}
@ApiOperation(value = "分页设备信息")
@GetMapping("pageBroadcast")
public Result<PageVo<BroadcastVo>> pageBroadcast(@Valid BroadcastQueryParam broadcastQueryParam) {
return broadcastService.pageBroadcast(broadcastQueryParam);
}
@ApiOperation(value = "导出", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@PostMapping("exportBroadcast")
public void exportBroadcast(HttpServletResponse response, @Valid BroadcastQueryParam broadcastQueryParam) {
broadcastService.exportBroadcast(broadcastQueryParam, response);
}
@ApiOperation(value = "导入")
@ApiImplicitParams({ @ApiImplicitParam(value = "文件", required = true, name = "file") })
@PostMapping("importVideo")
public Result<String> importVideo(MultipartFile file) {
return broadcastService.importBroadcast(file);
}
@ApiOperation(value = "根据名字检索")
@GetMapping("selectBroadcastName")
public Result<PageVo<BroadcastVo>> selectBroadcastName(@Valid IndexParam indexParam) {
return broadcastService.selectBroadcastName(indexParam);
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.icon;
import com.yiring.app.param.icon.IconParam;
import com.yiring.app.service.icon.IconService;
import com.yiring.app.vo.icon.IconVo;
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 javax.annotation.Resource;
import javax.validation.Valid;
import lombok.extern.slf4j.Slf4j;
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/5/5 15:18
*/
@Slf4j
@Validated
@Api(tags = "Icon(图标管理)")
@RestController
@RequestMapping("/icon/")
public class IconController {
@Resource
IconService iconService;
@ApiOperation(value = "新增图标信息")
@PostMapping("saveIcon")
public Result<String> saveIcon(@Valid IconParam iconParam) {
return iconService.saveIcon(iconParam);
}
@ApiOperation(value = "删除图标信息")
@PostMapping("deleteIcon")
public Result<String> deleteIcon(@Valid IdParam idParam) {
return iconService.deleteIcon(idParam);
}
@ApiOperation(value = "修改图标信息")
@PostMapping("updateIcon")
public Result<String> updateIcon(@Valid IconParam iconParam, @Valid IdParam idParam) {
return iconService.updateIcon(iconParam, idParam);
}
@ApiOperation(value = "分页图标信息")
@GetMapping("pageIcon")
public Result<PageVo<IconVo>> pageIcon(@Valid PageParam pageParam) {
return iconService.pageIcon(pageParam);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论