提交 b1e08e36 authored 作者: Matrix's avatar Matrix

[核查&决算模块] 完成决算的时间搜索以及核查的搜索页面

上级 ca1d10d3
package com.tykj.dev.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.datetime.DateFormatter;
import org.springframework.format.datetime.DateFormatterRegistrar;
import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar;
import org.springframework.format.support.DefaultFormattingConversionService;
import org.springframework.format.support.FormattingConversionService;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.time.format.DateTimeFormatter;
/**
* DateTimeConfig.
* 用来处理SpringMvc 中 Controller层中使用{@link org.springframework.web.bind.annotation.RequestParam}参数类型为
* {@link java.time.LocalDate} 与 {@link java.time.LocalDateTime}
*
* @author Matrix <xhyrzldf@gmail.com>
* @since 2020/10/13 at 2:37 下午
*/
@Configuration
public class DateTimeConfig extends WebMvcConfigurationSupport {
@Bean
@Override
public FormattingConversionService mvcConversionService() {
DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService(false);
DateTimeFormatterRegistrar dateTimeRegistrar = new DateTimeFormatterRegistrar();
dateTimeRegistrar.setDateFormatter(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
dateTimeRegistrar.setDateTimeFormatter(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
dateTimeRegistrar.registerFormatters(conversionService);
DateFormatterRegistrar dateRegistrar = new DateFormatterRegistrar();
dateRegistrar.setFormatter(new DateFormatter("yyyy-MM-dd"));
dateRegistrar.registerFormatters(conversionService);
return conversionService;
}
}
......@@ -29,6 +29,11 @@
<artifactId>dev-library</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>15.0</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.tykj.dev.device.confirmcheck.Service;
import com.tykj.dev.device.confirmcheck.entity.vo.CheckStatTableVo;
import org.springframework.data.domain.Page;
import java.time.LocalDate;
/**
* CheckStatService.
*
* @author Matrix <xhyrzldf@gmail.com>
* @since 2020/10/13 at 3:58 下午
*/
public interface ConfirmCheckService {
/**
* 根据关键字查询报告列表
*
* @param keyword 要查询的字
* @param page 页码
* @param size 每页数据量
* @return {@link CheckStatTableVo} 's List
*/
Page<CheckStatTableVo> findAllStatTable(String keyword, int page, int size);
}
package com.tykj.dev.device.confirmcheck.Service.impl;
import com.tykj.dev.device.confirmcheck.Service.ConfirmCheckService;
import com.tykj.dev.device.confirmcheck.entity.vo.CheckStatTableVo;
import com.tykj.dev.device.confirmcheck.repository.DeviceCheckStatRepo;
import com.tykj.dev.device.confirmcheck.utils.ObjTransUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* ConfirmCheckServiceImpl.
*
* @author Matrix <xhyrzldf@gmail.com>
* @since 2020/10/13 at 4:07 下午
*/
@Service
public class ConfirmCheckServiceImpl implements ConfirmCheckService {
@Autowired
private DeviceCheckStatRepo statRepo;
@Autowired
private ObjTransUtil objTransUtil;
/**
* 根据关键字查询报告列表
*
* @param keyword 要查询的字
* @param page 页码
* @param size 每页数据量
* @return {@link CheckStatTableVo} 's List
*/
@Override
public Page<CheckStatTableVo> findAllStatTable(String keyword, int page, int size) {
List<CheckStatTableVo> tableVos = statRepo.findAll().stream()
.map(objTransUtil::stat2TableVo)
.filter(vo -> keywordFilter(vo, keyword))
.collect(Collectors.toList());
return new PageImpl<>(tableVos, PageRequest.of(page, size), tableVos.size());
}
/**
* 关键字过滤器
*
* @param vo 要过滤的对象
* @param keyword 匹配的关键字
* @return 该对象是否通过过滤器
*/
private boolean keywordFilter(CheckStatTableVo vo, String keyword) {
if (StringUtils.isEmpty(keyword)) {
return true;
} else {
return vo.getQueryField().contains(keyword);
}
}
}
......@@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.tykj.dev.config.GlobalMap;
import com.tykj.dev.config.swagger.AutoDocument;
import com.tykj.dev.device.confirmcheck.Service.ConfirmCheckService;
import com.tykj.dev.device.confirmcheck.entity.cache.AreaCache;
import com.tykj.dev.device.confirmcheck.entity.domain.DeviceCheckBill;
import com.tykj.dev.device.confirmcheck.entity.domain.DeviceCheckDetail;
......@@ -36,6 +37,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
......@@ -86,6 +88,8 @@ public class DeviceCheckController {
private AreaCache areaCache;
@Autowired
private AuService auService;
@Autowired
private ConfirmCheckService ccService;
@GetMapping("/area/{fatherId}")
@ApiOperation(value = "查询指定区域下的所有区域信息")
......@@ -103,6 +107,17 @@ public class DeviceCheckController {
return ResponseEntity.ok(new ResultObj<>(statVoList));
}
@ApiOperation(value = "根据关键字分页查询核查统计数据")
@GetMapping("/stat")
public Page<CheckStatTableVo> findStatByKeyword(
@RequestParam(required = false, defaultValue = "") String keyword,
@RequestParam(required = false, defaultValue = "1") int page,
@RequestParam(required = false, defaultValue = "10") int size
) {
return ccService.findAllStatTable(keyword, page, size);
}
@ApiOperation(value = "根据id查询核查详情数据", notes = "可以通过这个接口查询核查详情数据")
@GetMapping("/detail/{id}")
public ResponseEntity<ResultObj<CheckDetailVo>> findDetail(@PathVariable Integer id) {
......
......@@ -4,6 +4,8 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import javax.validation.constraints.NotNull;
......
package com.tykj.dev.device.confirmcheck.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.List;
/**
* CheckStatTableVo.
*
* @author Matrix <xhyrzldf@gmail.com>
* @since 2020/10/13 at 3:14 下午
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(value = { "queryField" })
public class CheckStatTableVo {
private Integer id;
private String title;
private String creatorName;
private List<String> checkUserNames;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
private String completion;
private String queryField;
}
......@@ -9,11 +9,13 @@ import com.tykj.dev.device.confirmcheck.entity.domain.DeviceCheckStat;
import com.tykj.dev.device.confirmcheck.entity.vo.*;
import com.tykj.dev.device.library.repository.DeviceLibraryDao;
import com.tykj.dev.device.library.subject.domin.DeviceLibrary;
import com.tykj.dev.device.task.service.TaskService;
import com.tykj.dev.device.user.subject.dao.AreaDao;
import com.tykj.dev.device.user.subject.dao.UnitsDao;
import com.tykj.dev.device.user.subject.dao.UserDao;
import com.tykj.dev.device.user.subject.entity.User;
import com.tykj.dev.misc.base.BeanHelper;
import com.tykj.dev.misc.base.BusinessEnum;
import com.tykj.dev.misc.exception.ApiException;
import com.tykj.dev.misc.utils.JacksonUtil;
import org.modelmapper.ModelMapper;
......@@ -27,6 +29,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringJoiner;
import java.util.stream.Collectors;
/**
......@@ -50,6 +53,9 @@ public class ObjTransUtil {
@Autowired
private UnitsDao unitRepo;
@Autowired
private TaskService taskService;
/**
* 装备转化为初始化的装备统计类
......@@ -70,6 +76,59 @@ public class ObjTransUtil {
return new CheckDeviceStatVo(device.getModel(), device.getName(), 1, areaStatList);
}
/**
* stat 2 table Vo
*
* @param stat {@link DeviceCheckStat}
* @return {@link CheckStatTableVo}
*/
public CheckStatTableVo stat2TableVo(DeviceCheckStat stat) {
StringJoiner joiner = new StringJoiner("");
// 构建姓名参数
Integer creatorId = stat.getCreateUserId();
String creatorName = userRepo.findById(creatorId).get().getName();
List<String> checkUserNames = new ArrayList<>();
Integer checkUserAId = stat.getCheckUserAId();
if (checkUserAId != 0) {
String checkUserAName = userRepo.findById(checkUserAId).get().getName();
checkUserNames.add(checkUserAName);
joiner.add(checkUserAName);
}
Integer checkUserBId = stat.getCheckUserBId();
if (checkUserBId != 0) {
String checkUserBName = userRepo.findById(checkUserBId).get().getName();
checkUserNames.add(checkUserBName);
joiner.add(checkUserBName);
}
// 构建完成情况参数,按照对应的task的状态值来计算 9999为已完成,其他为进行中
Integer status = taskService.get(stat.getId(), BusinessEnum.CONFIRM_CHECK_STAT.id)
.getBillStatus();
String completion = status == 9999 ? "已完成" : "未完成";
joiner.add(stat.getTitle());
joiner.add(creatorName);
joiner.add(stat.getCreateTime().toString());
joiner.add(completion);
return new CheckStatTableVo(
stat.getId(),
stat.getTitle(),
creatorName,
checkUserNames,
stat.getCreateTime(),
completion,
joiner.toString()
);
}
/**
* Do类转化为Vo类
*/
......
......@@ -3,7 +3,7 @@ package com.tykj.dev.device.finalcheck.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import com.tykj.dev.config.swagger.AutoDocument;
import com.tykj.dev.device.finalcheck.entity.other.TimeParam;
import com.tykj.dev.device.finalcheck.entity.dto.TimeParam;
import com.tykj.dev.device.finalcheck.entity.vo.FinalDetailVo;
import com.tykj.dev.device.finalcheck.entity.vo.FinalReportVo;
import com.tykj.dev.device.finalcheck.service.FinalCheckService;
......@@ -16,6 +16,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
......@@ -28,6 +29,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
import static com.tykj.dev.misc.utils.TimestampUtil.localDateToDate;
......@@ -85,11 +87,15 @@ public class FinalCheckController {
@GetMapping("/reports")
@ApiOperation(value = "查询所有决算报告(不附带详情数据)")
public ResponseEntity<ResultObj<Page<FinalReportVo>>> findAllReports(
public Page<FinalReportVo> findAllReports(
@RequestParam(required = false, defaultValue = "") String keyword,
@RequestParam(required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE, pattern = "yyyy-MM-dd") LocalDate startTime,
@RequestParam(required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE, pattern = "yyyy-MM-dd") LocalDate endTime,
@RequestParam(required = false, defaultValue = "1") int page,
@RequestParam(required = false, defaultValue = "10") int size) {
return ResultUtil.success(fcService.findAllWithoutDetail(keyword, --page, size));
return fcService.findAllWithoutDetail(keyword, --page, size, startTime, endTime);
}
@GetMapping("/{id}")
......
package com.tykj.dev.device.finalcheck.entity.other;
package com.tykj.dev.device.finalcheck.entity.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
......
......@@ -26,11 +26,13 @@ public interface FinalCheckService {
* 根据关键字查询报告列表(不附带detail)
*
* @param keyword 要查询的字
* @param page
* @param size
* @param page 页码
* @param size 每页数据量
* @param startTime 查询起始时间
* @param endTime 查询结束时间
* @return {@link FinalReportVo} 's List
*/
Page<FinalReportVo> findAllWithoutDetail(String keyword, int page, int size);
Page<FinalReportVo> findAllWithoutDetail(String keyword, int page, int size, LocalDate startTime, LocalDate endTime);
/**
* 根据主键id查询报告
......
......@@ -23,10 +23,7 @@ import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.function.Function;
import static com.tykj.dev.misc.utils.TimestampUtil.localDateToDate;
......@@ -96,23 +93,39 @@ public class FinalCheckServiceImpl implements FinalCheckService {
}
@Override
public Page<FinalReportVo> findAllWithoutDetail(String keyword, int page, int size) {
public Page<FinalReportVo> findAllWithoutDetail(String keyword, int page, int size, LocalDate startTime, LocalDate endTime) {
boolean timeQuery = Objects.nonNull(startTime) && Objects.nonNull(endTime);
// 如果没有携带关键字且没有指定时间查询,则直接查询,否则添加时间条件
if (StringUtils.isEmpty(keyword)) {
return reportDao.findAll(PageRequest.of(page, size, Sort.by(ASC, "id")))
if (timeQuery) {
Specification<FinalReport> pred = Specifications.<FinalReport>and()
.gt("startTime", startTime)
.lt("endTime", endTime)
.build();
return reportDao.findAll(pred, PageRequest.of(page, size, Sort.by(ASC, "id")))
.map(report -> report.toVo(Collections.emptyList()));
} else {
return reportDao.findAll(PageRequest.of(page, size, Sort.by(ASC, "id")))
.map(report -> report.toVo(Collections.emptyList()));
}
} else {
// 如果携带关键字,则构造条件查询器
Specification<FinalReport> pred = Specifications.<FinalReport>or()
.like("name", "%" + keyword + "%")
.like("operator", "%" + keyword + "%")
.predicate(timeQuery, Specifications.and()
.gt("startTime", startTime)
.lt("endTime", endTime)
.build()
)
.build();
return reportDao.findAll(pred, PageRequest.of(page, size, Sort.by(ASC, "id")))
.map(report -> report.toVo(Collections.emptyList()));
}
//构造查询器
Specification<FinalReport> pred = Specifications.<FinalReport>or()
.like("name", "%" + keyword + "%")
.like("operator", "%" + keyword + "%")
.build();
return reportDao.findAll(pred, PageRequest.of(page, size, Sort.by(ASC, "id")))
.map(report -> report.toVo(Collections.emptyList()));
}
@Override
......
package com.tykj.dev.finalcheck;
import com.tykj.dev.device.finalcheck.controller.FinalCheckController;
import com.tykj.dev.device.finalcheck.entity.other.TimeParam;
import com.tykj.dev.device.finalcheck.entity.dto.TimeParam;
import com.tykj.dev.union.BaseTest;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论