提交 d7a4a2f5 作者: 17607474349

Merge remote-tracking branch 'origin/dev_tzl' into dev_lijing

...@@ -9,6 +9,7 @@ import javax.persistence.*; ...@@ -9,6 +9,7 @@ import javax.persistence.*;
import lombok.*; import lombok.*;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants; import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
/** /**
...@@ -20,7 +21,7 @@ import org.hibernate.annotations.Comment; ...@@ -20,7 +21,7 @@ import org.hibernate.annotations.Comment;
@Getter @Getter
@Setter @Setter
@ToString @ToString
@Builder @SuperBuilder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@FieldNameConstants @FieldNameConstants
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.workArea;
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/21 9:55
*/
@Repository
public interface WorkAreaRepository extends JpaRepository<WorkArea, Serializable>, JpaSpecificationExecutor<WorkArea> {}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.excel.workArea;
import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
import com.github.liaochong.myexcel.core.annotation.ExcelModel;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/21 10:12
*/
@ExcelModel
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@FieldDefaults(level = AccessLevel.PRIVATE)
public class WorkAreaExportExcel implements Serializable {
@Serial
private static final long serialVersionUID = -122186147042368396L;
@ExcelColumn(title = "工区名称")
String workAreaName;
@ExcelColumn(title = "消抖阈值(秒)")
Integer threshold;
@ExcelColumn(title = "超时时间(秒)")
Integer timeout;
@ExcelColumn(title = "负责人")
String personInCharge;
@ExcelColumn(title = "联系电话")
String mobile;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.workArea;
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.NotEmpty;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/21 9:42
*/
@ApiModel("WorkAreaParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class WorkAreaParam implements Serializable {
@Serial
private static final long serialVersionUID = 5907859647052875421L;
@ApiModelProperty(value = "工区名称", example = "工业区", required = true)
@NotEmpty(message = "工区名称不能为空")
@Size(max = 10)
String workAreaName;
@ApiModelProperty(value = "消抖阈值(秒)", example = "1", required = true)
@NotEmpty(message = "消抖阈值(秒)不能为空")
Integer threshold;
@ApiModelProperty(value = "超时时间(秒)", example = "1", required = true)
@NotEmpty(message = "超时时间(秒)不能为空")
Integer timeout;
@ApiModelProperty(value = "负责人", example = "1")
String personInCharge;
@ApiModelProperty(value = "联系电话", example = "17674741309")
@Pattern(regexp = RegEx.MOBILE, message = "请输入正确的联系电话")
String mobile;
@ApiModelProperty(value = "摄像头id", example = "1", required = true)
Long videoId;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.param.workArea;
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/21 10:02
*/
@ApiModel("WorkAreaQueryParam")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class WorkAreaQueryParam implements Serializable {
@Serial
private static final long serialVersionUID = -8037877534751243885L;
@ApiModelProperty(value = "工区名称", example = "工业区", required = true)
String workAreaName;
@ApiModelProperty(value = "每页记录数", example = "10")
Integer pageSize;
@ApiModelProperty(value = "页码", example = "1")
Integer pageNo;
}
...@@ -136,16 +136,6 @@ public class VisitorServiceImpl implements VisitorService { ...@@ -136,16 +136,6 @@ public class VisitorServiceImpl implements VisitorService {
.map(visitor -> { .map(visitor -> {
VisitorVo vo = new VisitorVo(); VisitorVo vo = new VisitorVo();
BeanUtils.copyProperties(visitor, vo); BeanUtils.copyProperties(visitor, vo);
// VisitorVo.UserVo userVo = VisitorVo.UserVo
// .builder()
// .realName(visitor.getUser().getRealName())
// .build();
// vo.setUserVo(userVo);
//翻译被访问人姓名
// if (vo.getIntervieweeId() != null) {
// Optional<User> byId = userRepository.findById(vo.getIntervieweeId());
// byId.ifPresent(user -> vo.setIntervieweeName(user.getRealName()));
// }
return vo; return vo;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.workArea;
import com.yiring.app.param.workArea.WorkAreaParam;
import com.yiring.app.param.workArea.WorkAreaQueryParam;
import com.yiring.app.vo.workArea.WorkAreaVo;
import com.yiring.common.core.Result;
import com.yiring.common.param.IdParam;
import com.yiring.common.vo.PageVo;
import javax.servlet.http.HttpServletResponse;
public interface WorkAreaService {
/**
* 新增工区信息
* @author tzl
* @date 2022/5/21 9:50
* @param workAreaParam WorkAreaParam
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> saveWorkArea(WorkAreaParam workAreaParam);
/**
* 修改工区信息
* @author tzl
* @date 2022/5/21 9:51
* @param workAreaParam WorkAreaParam
* @param idParam IdParam
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> updateWorkArea(WorkAreaParam workAreaParam, IdParam idParam);
/**
* 删除工区信息
* @author tzl
* @date 2022/5/21 9:51
* @param idParam IdParam
* @return com.yiring.common.core.Result<java.lang.String>
*/
Result<String> deleteWorkArea(IdParam idParam);
/**
* 查询工区信息
* @author tzl
* @date 2022/5/21 10:04
* @param workAreaQueryParam WorkAreaQueryParam
* @return com.yiring.common.core.Result<com.yiring.app.vo.workArea.WorkAreaVo>
*/
Result<PageVo<WorkAreaVo>> pageWorkArea(WorkAreaQueryParam workAreaQueryParam);
/**
* 导出工区信息
* @author tzl
* @date 2022/5/21 10:14
* @param workAreaQueryParam WorkAreaQueryParam
*/
void export(WorkAreaQueryParam workAreaQueryParam, HttpServletResponse httpServletResponse);
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.service.workArea.impl;
import cn.hutool.core.util.StrUtil;
import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder;
import com.yiring.app.domain.workArea.WorkArea;
import com.yiring.app.domain.workArea.WorkAreaRepository;
import com.yiring.app.excel.workArea.WorkAreaExportExcel;
import com.yiring.app.param.workArea.WorkAreaParam;
import com.yiring.app.param.workArea.WorkAreaQueryParam;
import com.yiring.app.service.workArea.WorkAreaService;
import com.yiring.app.vo.workArea.WorkAreaVo;
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.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.Objects;
import java.util.Optional;
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.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/5/21 9:52
*/
@Slf4j
@Transactional(rollbackFor = RuntimeException.class)
@Service
public class WorkAreaServiceImpl implements WorkAreaService {
@Resource
WorkAreaRepository workAreaRepository;
@Override
public Result<String> saveWorkArea(WorkAreaParam workAreaParam) {
//工区名称不能重复
if (hasWorkAreaName(workAreaParam.getWorkAreaName())) {
return Result.no(Status.BAD_REQUEST, "工区名称已存在");
}
WorkArea workArea = new WorkArea();
BeanUtils.copyProperties(workAreaParam, workArea);
workAreaRepository.saveAndFlush(workArea);
return Result.ok();
}
@Override
public Result<String> updateWorkArea(WorkAreaParam workAreaParam, IdParam idParam) {
Optional<WorkArea> byId = workAreaRepository.findById(idParam.getId());
if (byId.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
WorkArea workArea = byId.get();
//修改工区名称时判断
if (!workArea.getWorkAreaName().equals(workAreaParam.getWorkAreaName())) {
if (hasWorkAreaName(workAreaParam.getWorkAreaName())) {
return Result.no(Status.BAD_REQUEST, "工区名称已存在");
}
}
BeanUtils.copyProperties(workAreaParam, workArea);
workAreaRepository.saveAndFlush(workArea);
return Result.ok();
}
@Override
public Result<String> deleteWorkArea(IdParam idParam) {
Optional<WorkArea> byId = workAreaRepository.findById(idParam.getId());
if (byId.isEmpty()) {
return Result.no(Status.NOT_FOUND);
}
WorkArea workArea = byId.get();
workAreaRepository.delete(workArea);
return Result.ok();
}
@Override
public Result<PageVo<WorkAreaVo>> pageWorkArea(WorkAreaQueryParam workAreaQueryParam) {
PageVo<WorkAreaVo> resultVo;
//排序
Sort sort = Sort.by(Sort.Order.desc(BasicEntity.Fields.updateTime));
if (Objects.nonNull(workAreaQueryParam.getPageNo()) && Objects.nonNull(workAreaQueryParam.getPageSize())) {
//分页
Pageable pageable = PageRequest.of(workAreaQueryParam.getPageNo() - 1, workAreaQueryParam.getPageSize());
Page<WorkArea> all = workAreaRepository.findAll(condition(workAreaQueryParam), pageable);
List<WorkAreaVo> data = all
.get()
.map(workArea -> {
WorkAreaVo vo = new WorkAreaVo();
BeanUtils.copyProperties(workArea, vo);
return vo;
})
.collect(Collectors.toList());
resultVo = PageVo.build(data, all.getTotalElements());
} else {
List<WorkArea> all = workAreaRepository.findAll(condition(workAreaQueryParam), sort);
List<WorkAreaVo> data = all
.stream()
.map(workArea -> {
WorkAreaVo vo = new WorkAreaVo();
BeanUtils.copyProperties(workArea, vo);
return vo;
})
.collect(Collectors.toList());
resultVo = PageVo.build(data, data.size());
}
return Result.ok(resultVo);
}
@Override
public void export(WorkAreaQueryParam workAreaQueryParam, HttpServletResponse httpServletResponse) {
List<WorkArea> workAreas = workAreaRepository.findAll(condition(workAreaQueryParam));
List<WorkAreaExportExcel> workAreaExportExcels = workAreas
.stream()
.map(workArea -> {
WorkAreaExportExcel workAreaExportExcel = new WorkAreaExportExcel();
BeanUtils.copyProperties(workArea, workAreaExportExcel);
return workAreaExportExcel;
})
.toList();
try (
DefaultStreamExcelBuilder<WorkAreaExportExcel> defaultStreamExcelBuilder = DefaultStreamExcelBuilder
.of(WorkAreaExportExcel.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(workAreaExportExcels);
String fileName = URLEncoder.encode("工区信息.xlsx", StandardCharsets.UTF_8);
httpServletResponse.setContentType("application/octet-stream");
httpServletResponse.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + fileName);
OutputStream out = httpServletResponse.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<WorkArea> condition(WorkAreaQueryParam workAreaQueryParam) {
return (root, cq, cb) -> {
List<Predicate> list = new ArrayList<>();
if (StrUtil.isNotBlank(workAreaQueryParam.getWorkAreaName())) {
list.add(
cb.like(root.get(WorkArea.Fields.workAreaName), "%" + workAreaQueryParam.getWorkAreaName() + "%")
);
}
Order order = cb.desc(root.get(BasicEntity.Fields.updateTime));
Predicate[] predicates = new Predicate[list.size()];
cq.where(list.toArray(predicates));
cq.orderBy(order);
return cb.and(list.toArray(predicates));
};
}
boolean hasWorkAreaName(String wrokAreaName) {
WorkArea workArea = WorkArea.builder().workAreaName(wrokAreaName).build();
return workAreaRepository.count(Example.of(workArea)) > 0;
}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.vo.workArea;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.app.domain.video.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;
/**
* @author tzl
* @version 1.0
* @description:
* @date 2022/5/21 9:47
*/
@ApiModel("WorkAreaVo")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class WorkAreaVo implements Serializable {
@Serial
private static final long serialVersionUID = -7662909335410925656L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "id", example = "1", required = true)
private Long id;
@ApiModelProperty(value = "工区名称", example = "工业区")
String workAreaName;
@ApiModelProperty(value = "消抖阈值(秒)", example = "1")
Integer threshold;
@ApiModelProperty(value = "超时时间(秒)", example = "1")
Integer timeout;
@ApiModelProperty(value = "负责人", example = "1")
String personInCharge;
@ApiModelProperty(value = "联系电话", example = "17674741309")
String mobile;
@ApiModelProperty(value = "摄像头", example = "1")
Video video;
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.web.workArea;
import com.yiring.app.param.workArea.WorkAreaParam;
import com.yiring.app.param.workArea.WorkAreaQueryParam;
import com.yiring.app.service.workArea.WorkAreaService;
import com.yiring.app.vo.workArea.WorkAreaVo;
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/5/21 10:18
*/
@Slf4j
@Validated
@SuppressWarnings({ "deprecation" })
@Api(tags = "工区", description = "WorkArea")
@RestController
@RequestMapping("/workArea/")
public class WorkAreaController {
@Resource
WorkAreaService workAreaService;
@ApiOperation(value = "新增工区信息")
@PostMapping("saveWorkArea")
public Result<String> saveWorkArea(@Valid WorkAreaParam workAreaParam) {
return workAreaService.saveWorkArea(workAreaParam);
}
@ApiOperation(value = "修改工区信息")
@PostMapping("updateWorkArea")
public Result<String> updateWorkArea(@Valid WorkAreaParam workAreaParam, @Valid IdParam idParam) {
return workAreaService.updateWorkArea(workAreaParam, idParam);
}
@ApiOperation(value = "删除工区信息")
@PostMapping("deleteWorkArea")
public Result<String> deleteWorkArea(@Valid IdParam idParam) {
return workAreaService.deleteWorkArea(idParam);
}
@ApiOperation(value = "查看工区信息")
@GetMapping("pageWorkArea")
public Result<PageVo<WorkAreaVo>> pageWorkArea(@Valid WorkAreaQueryParam workAreaQueryParam) {
return workAreaService.pageWorkArea(workAreaQueryParam);
}
@ApiOperation(value = "导出工区信息", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@PostMapping("export")
public void export(HttpServletResponse response, @Valid WorkAreaQueryParam workAreaQueryParam) {
workAreaService.export(workAreaQueryParam, response);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论