提交 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 @@ ...@@ -29,6 +29,11 @@
<artifactId>dev-library</artifactId> <artifactId>dev-library</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>15.0</version>
</dependency>
</dependencies> </dependencies>
</project> </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; ...@@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.tykj.dev.config.GlobalMap; import com.tykj.dev.config.GlobalMap;
import com.tykj.dev.config.swagger.AutoDocument; 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.cache.AreaCache;
import com.tykj.dev.device.confirmcheck.entity.domain.DeviceCheckBill; import com.tykj.dev.device.confirmcheck.entity.domain.DeviceCheckBill;
import com.tykj.dev.device.confirmcheck.entity.domain.DeviceCheckDetail; import com.tykj.dev.device.confirmcheck.entity.domain.DeviceCheckDetail;
...@@ -36,6 +37,7 @@ import io.swagger.annotations.Api; ...@@ -36,6 +37,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -86,6 +88,8 @@ public class DeviceCheckController { ...@@ -86,6 +88,8 @@ public class DeviceCheckController {
private AreaCache areaCache; private AreaCache areaCache;
@Autowired @Autowired
private AuService auService; private AuService auService;
@Autowired
private ConfirmCheckService ccService;
@GetMapping("/area/{fatherId}") @GetMapping("/area/{fatherId}")
@ApiOperation(value = "查询指定区域下的所有区域信息") @ApiOperation(value = "查询指定区域下的所有区域信息")
...@@ -103,6 +107,17 @@ public class DeviceCheckController { ...@@ -103,6 +107,17 @@ public class DeviceCheckController {
return ResponseEntity.ok(new ResultObj<>(statVoList)); 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 = "可以通过这个接口查询核查详情数据") @ApiOperation(value = "根据id查询核查详情数据", notes = "可以通过这个接口查询核查详情数据")
@GetMapping("/detail/{id}") @GetMapping("/detail/{id}")
public ResponseEntity<ResultObj<CheckDetailVo>> findDetail(@PathVariable Integer id) { public ResponseEntity<ResultObj<CheckDetailVo>> findDetail(@PathVariable Integer id) {
......
...@@ -4,6 +4,8 @@ import lombok.AllArgsConstructor; ...@@ -4,6 +4,8 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import javax.validation.constraints.NotNull; 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; ...@@ -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.confirmcheck.entity.vo.*;
import com.tykj.dev.device.library.repository.DeviceLibraryDao; import com.tykj.dev.device.library.repository.DeviceLibraryDao;
import com.tykj.dev.device.library.subject.domin.DeviceLibrary; 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.AreaDao;
import com.tykj.dev.device.user.subject.dao.UnitsDao; 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.dao.UserDao;
import com.tykj.dev.device.user.subject.entity.User; import com.tykj.dev.device.user.subject.entity.User;
import com.tykj.dev.misc.base.BeanHelper; 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.exception.ApiException;
import com.tykj.dev.misc.utils.JacksonUtil; import com.tykj.dev.misc.utils.JacksonUtil;
import org.modelmapper.ModelMapper; import org.modelmapper.ModelMapper;
...@@ -27,6 +29,7 @@ import java.io.IOException; ...@@ -27,6 +29,7 @@ import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.StringJoiner;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -50,6 +53,9 @@ public class ObjTransUtil { ...@@ -50,6 +53,9 @@ public class ObjTransUtil {
@Autowired @Autowired
private UnitsDao unitRepo; private UnitsDao unitRepo;
@Autowired
private TaskService taskService;
/** /**
* 装备转化为初始化的装备统计类 * 装备转化为初始化的装备统计类
...@@ -70,6 +76,59 @@ public class ObjTransUtil { ...@@ -70,6 +76,59 @@ public class ObjTransUtil {
return new CheckDeviceStatVo(device.getModel(), device.getName(), 1, areaStatList); 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类 * Do类转化为Vo类
*/ */
......
...@@ -3,7 +3,7 @@ package com.tykj.dev.device.finalcheck.controller; ...@@ -3,7 +3,7 @@ package com.tykj.dev.device.finalcheck.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import com.tykj.dev.config.swagger.AutoDocument; 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.FinalDetailVo;
import com.tykj.dev.device.finalcheck.entity.vo.FinalReportVo; import com.tykj.dev.device.finalcheck.entity.vo.FinalReportVo;
import com.tykj.dev.device.finalcheck.service.FinalCheckService; import com.tykj.dev.device.finalcheck.service.FinalCheckService;
...@@ -16,6 +16,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -16,6 +16,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
...@@ -28,6 +29,7 @@ import java.io.ByteArrayOutputStream; ...@@ -28,6 +29,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*; import java.util.*;
import static com.tykj.dev.misc.utils.TimestampUtil.localDateToDate; import static com.tykj.dev.misc.utils.TimestampUtil.localDateToDate;
...@@ -85,11 +87,15 @@ public class FinalCheckController { ...@@ -85,11 +87,15 @@ public class FinalCheckController {
@GetMapping("/reports") @GetMapping("/reports")
@ApiOperation(value = "查询所有决算报告(不附带详情数据)") @ApiOperation(value = "查询所有决算报告(不附带详情数据)")
public ResponseEntity<ResultObj<Page<FinalReportVo>>> findAllReports( public Page<FinalReportVo> findAllReports(
@RequestParam(required = false, defaultValue = "") String keyword, @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 = "1") int page,
@RequestParam(required = false, defaultValue = "10") int size) { @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}") @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.JsonFormat;
import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonPropertyOrder;
......
...@@ -26,11 +26,13 @@ public interface FinalCheckService { ...@@ -26,11 +26,13 @@ public interface FinalCheckService {
* 根据关键字查询报告列表(不附带detail) * 根据关键字查询报告列表(不附带detail)
* *
* @param keyword 要查询的字 * @param keyword 要查询的字
* @param page * @param page 页码
* @param size * @param size 每页数据量
* @param startTime 查询起始时间
* @param endTime 查询结束时间
* @return {@link FinalReportVo} 's List * @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查询报告 * 根据主键id查询报告
......
...@@ -23,10 +23,7 @@ import org.springframework.stereotype.Service; ...@@ -23,10 +23,7 @@ import org.springframework.stereotype.Service;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
import static com.tykj.dev.misc.utils.TimestampUtil.localDateToDate; import static com.tykj.dev.misc.utils.TimestampUtil.localDateToDate;
...@@ -96,22 +93,38 @@ public class FinalCheckServiceImpl implements FinalCheckService { ...@@ -96,22 +93,38 @@ public class FinalCheckServiceImpl implements FinalCheckService {
} }
@Override @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)) { if (StringUtils.isEmpty(keyword)) {
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"))) return reportDao.findAll(PageRequest.of(page, size, Sort.by(ASC, "id")))
.map(report -> report.toVo(Collections.emptyList())); .map(report -> report.toVo(Collections.emptyList()));
} }
} else {
//构造查询器 // 如果携带关键字,则构造条件查询器
Specification<FinalReport> pred = Specifications.<FinalReport>or() Specification<FinalReport> pred = Specifications.<FinalReport>or()
.like("name", "%" + keyword + "%") .like("name", "%" + keyword + "%")
.like("operator", "%" + keyword + "%") .like("operator", "%" + keyword + "%")
.predicate(timeQuery, Specifications.and()
.gt("startTime", startTime)
.lt("endTime", endTime)
.build()
)
.build(); .build();
return reportDao.findAll(pred, PageRequest.of(page, size, Sort.by(ASC, "id"))) return reportDao.findAll(pred, PageRequest.of(page, size, Sort.by(ASC, "id")))
.map(report -> report.toVo(Collections.emptyList())); .map(report -> report.toVo(Collections.emptyList()));
}
} }
......
package com.tykj.dev.finalcheck; package com.tykj.dev.finalcheck;
import com.tykj.dev.device.finalcheck.controller.FinalCheckController; 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 com.tykj.dev.union.BaseTest;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论