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

[决算模块] 决算模块除excel接口完成

上级 1a1030f8
...@@ -10,16 +10,37 @@ ...@@ -10,16 +10,37 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>dev-finalcheck</artifactId> <artifactId>dev-finalcheck</artifactId>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.tykj.dev</groupId> <groupId>com.tykj.dev</groupId>
<artifactId>misc</artifactId> <artifactId>misc</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.tykj.dev</groupId> <groupId>com.tykj.dev</groupId>
<artifactId>config</artifactId> <artifactId>config</artifactId>
</dependency> </dependency>
</dependencies> <dependency>
<groupId>com.tykj</groupId>
<artifactId>dev-user</artifactId>
</dependency>
<dependency>
<groupId>com.tykj</groupId>
<artifactId>dev-library</artifactId>
</dependency>
<dependency>
<groupId>com.tykj</groupId>
<artifactId>dev-usereport</artifactId>
</dependency>
<dependency>
<groupId>org.jeecgframework</groupId>
<artifactId>autopoi-web</artifactId>
<version>1.0.3</version>
</dependency>
</dependencies>
</project> </project>
\ No newline at end of file
...@@ -3,17 +3,22 @@ package com.tykj.dev.device.finalcheck.controller; ...@@ -3,17 +3,22 @@ package com.tykj.dev.device.finalcheck.controller;
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.other.TimeParam;
import com.tykj.dev.device.finalcheck.entity.vo.FinalReportVo; import com.tykj.dev.device.finalcheck.entity.vo.FinalReportVo;
import com.tykj.dev.device.finalcheck.repisotry.FinalDetailRepo; import com.tykj.dev.device.finalcheck.service.FinalCheckService;
import com.tykj.dev.device.finalcheck.repisotry.FinalReportRepo;
import com.tykj.dev.misc.base.ResultObj; import com.tykj.dev.misc.base.ResultObj;
import com.tykj.dev.misc.utils.ResultUtil; import com.tykj.dev.misc.utils.ResultUtil;
import io.swagger.annotations.Api; 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.core.io.ClassPathResource;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/** /**
* finalCheckController. * finalCheckController.
* *
...@@ -27,43 +32,41 @@ import org.springframework.web.bind.annotation.*; ...@@ -27,43 +32,41 @@ import org.springframework.web.bind.annotation.*;
@Api(tags = "决算模块", description = "决算模块") @Api(tags = "决算模块", description = "决算模块")
public class FinalCheckController { public class FinalCheckController {
@Autowired
private FinalDetailRepo detailRepo;
@Autowired @Autowired
private FinalReportRepo reportRepo; private FinalCheckService fcService;
@PostMapping("/test")
public ResponseEntity test(@RequestBody TimeParam param) {
log.info("测试打印参数 {}", param);
return ResponseEntity.ok("ok");
}
@GetMapping("/reports") @GetMapping("/reports")
@ApiOperation(value = "查询所有决算报告(不附带详情数据)") @ApiOperation(value = "查询所有决算报告(不附带详情数据)")
public ResponseEntity<ResultObj<FinalReportVo>> findAllReports(String keyword) { public ResponseEntity<ResultObj<List<FinalReportVo>>> findAllReports(String keyword) {
return ResultUtil.success(fcService.findAllWithoutDetail(keyword));
return ResultUtil.success(new FinalReportVo());
}
@PostMapping("/reports")
public ResponseEntity generateReport(
) {
return null;
} }
@GetMapping("/{id}") @GetMapping("/{id}")
@ApiOperation(value = "根据id查询决算报告(附带详情数据)") @ApiOperation(value = "根据id查询决算报告(附带详情数据)")
public ResponseEntity<ResultObj<FinalReportVo>> findReportById(@PathVariable Integer id) { public ResponseEntity<ResultObj<FinalReportVo>> findReportById(@PathVariable Integer id) {
return ResultUtil.success(new FinalReportVo()); return ResultUtil.success(fcService.findReportById(id));
}
@GetMapping("/test")
public ResponseEntity test() throws IOException {
ClassPathResource classPathResource = new ClassPathResource("excleTemplate/test.xlsx");
InputStream inputStream =classPathResource.getInputStream();
System.out.println(inputStream.getClass());
return ResponseEntity.ok("ok");
} }
@PostMapping("/reports")
@ApiOperation(value = "生成决算报告")
public ResponseEntity<ResultObj<FinalReportVo>> generateReport(@RequestBody TimeParam time) {
FinalReportVo finalReportVo = fcService.generateReport(time.getStartTime(), time.getEndTime());
return ResultUtil.success(finalReportVo);
}
@PostMapping("/excel/{id}") @PostMapping("/excel/{id}")
@ApiOperation(value = "根据id导出对应的excel数据") @ApiOperation(value = "根据id导出对应的excel数据")
public ResponseEntity<ResultObj<FinalReportVo>> exportExcel(@PathVariable Integer id) { public ResponseEntity<ResultObj<FinalReportVo>> exportExcel(
@PathVariable Integer id, HttpServletResponse response) {
return ResultUtil.success(new FinalReportVo()); return ResultUtil.success(new FinalReportVo());
} }
} }
package com.tykj.dev.device.finalcheck.entity.domain; package com.tykj.dev.device.finalcheck.entity.domain;
import com.tykj.dev.device.finalcheck.entity.vo.FinalDetailVo;
import com.tykj.dev.misc.base.BaseEntity; import com.tykj.dev.misc.base.BaseEntity;
import com.tykj.dev.misc.utils.MapperUtils;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
...@@ -21,7 +23,7 @@ import javax.persistence.Id; ...@@ -21,7 +23,7 @@ import javax.persistence.Id;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Entity @Entity
public class finalDetail extends BaseEntity { public class FinalDetail extends BaseEntity {
private String model; private String model;
...@@ -46,4 +48,8 @@ public class finalDetail extends BaseEntity { ...@@ -46,4 +48,8 @@ public class finalDetail extends BaseEntity {
private Integer scrapped; private Integer scrapped;
private Integer reportId; private Integer reportId;
public FinalDetailVo toVo(){
return MapperUtils.map(this, FinalDetailVo.class);
}
} }
...@@ -7,12 +7,12 @@ import com.tykj.dev.misc.utils.MapperUtils; ...@@ -7,12 +7,12 @@ import com.tykj.dev.misc.utils.MapperUtils;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelTarget;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
/** /**
...@@ -25,7 +25,9 @@ import java.util.List; ...@@ -25,7 +25,9 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Entity @Entity
public class finalReport extends BaseEntity { public class FinalReport extends BaseEntity {
private String name;
private String unitName; private String unitName;
...@@ -33,11 +35,11 @@ public class finalReport extends BaseEntity { ...@@ -33,11 +35,11 @@ public class finalReport extends BaseEntity {
private LocalDate endTime; private LocalDate endTime;
private LocalDate reportTime; private LocalDateTime reportTime;
private String operator; private String operator;
public FinalReportVo toVo(List<finalDetail> details) { public FinalReportVo toVo(List<FinalDetail> details) {
FinalReportVo reportVo = MapperUtils.map(this, FinalReportVo.class); FinalReportVo reportVo = MapperUtils.map(this, FinalReportVo.class);
List<FinalDetailVo> detailVos = MapperUtils.mapAll(details, FinalDetailVo.class); List<FinalDetailVo> detailVos = MapperUtils.mapAll(details, FinalDetailVo.class);
reportVo.setDetails(detailVos); reportVo.setDetails(detailVos);
......
package com.tykj.dev.device.finalcheck.entity.other; package com.tykj.dev.device.finalcheck.entity.other;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
/** /**
...@@ -16,8 +23,16 @@ import java.time.LocalDateTime; ...@@ -16,8 +23,16 @@ import java.time.LocalDateTime;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@ApiModel(value = "时间参数")
public class TimeParam { public class TimeParam {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime startTime; @JsonDeserialize(using = LocalDateDeserializer.class)
@ApiModelProperty(value = "决算开始时间",example = "2020-01-02")
private LocalDate startTime;
@JsonFormat(pattern = "yyyy-MM-dd")
@JsonDeserialize(using = LocalDateDeserializer.class)
@ApiModelProperty(value = "决算结束时间",example = "2020-11-02")
private LocalDate endTime;
} }
...@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.jeecgframework.poi.excel.annotation.ExcelTarget;
/** /**
* finalDetailVo. * finalDetailVo.
...@@ -18,6 +19,7 @@ import lombok.NoArgsConstructor; ...@@ -18,6 +19,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@ApiModel(value = "决算报告细节") @ApiModel(value = "决算报告细节")
@ExcelTarget("FinalReport")
public class FinalDetailVo { public class FinalDetailVo {
@ApiModelProperty("主键") @ApiModelProperty("主键")
......
package com.tykj.dev.device.finalcheck.entity.vo; package com.tykj.dev.device.finalcheck.entity.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelTarget;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
/** /**
...@@ -23,29 +28,39 @@ import java.util.List; ...@@ -23,29 +28,39 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@ApiModel("决算报告概览") @ApiModel("决算报告概览")
@ExcelTarget("FinalReport")
public class FinalReportVo { public class FinalReportVo {
@ApiModelProperty("主键") @ApiModelProperty("主键")
private Integer id; private Integer id;
@Excel(name = "名称")
@ApiModelProperty("决算名称")
private String name;
@Excel(name = "决算单位")
@ApiModelProperty("单位") @ApiModelProperty("单位")
private String unitName; private String unitName;
@Excel(name = "发起时间")
@JsonDeserialize(using = LocalDateDeserializer.class) @JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class) @JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("决算开始时间") @ApiModelProperty("决算开始时间")
private LocalDate startTime; private LocalDate startTime;
@Excel(name = "截止时间")
@JsonDeserialize(using = LocalDateDeserializer.class) @JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class) @JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("决算结束时间") @ApiModelProperty("决算结束时间")
private LocalDate endTime; private LocalDate endTime;
@JsonDeserialize(using = LocalDateDeserializer.class) @Excel(name = "报告生成时间")
@JsonSerialize(using = LocalDateSerializer.class) @JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("报告生成时间") @ApiModelProperty("报告生成时间")
private LocalDate reportTime; @JsonDeserialize(using = LocalDateDeserializer.class)
private LocalDateTime reportTime;
@Excel(name = "操作人")
@ApiModelProperty("操作人姓名") @ApiModelProperty("操作人姓名")
private String operator; private String operator;
......
package com.tykj.dev.device.finalcheck.repisotry; package com.tykj.dev.device.finalcheck.repisotry;
import com.github.wenhao.jpa.Specifications; import com.tykj.dev.device.finalcheck.entity.domain.FinalDetail;
import com.tykj.dev.device.finalcheck.entity.domain.finalDetail;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
import java.util.Optional;
/** /**
* finalDetailRepo. * finalDetailRepo.
* *
* @author Matrix <xhyrzldf@gmail.com> * @author Matrix <xhyrzldf@gmail.com>
* @since 2020/9/24 at 6:26 下午 * @since 2020/9/24 at 6:26 下午
*/ */
public interface FinalDetailRepo extends JpaRepository<finalDetail,Integer>, JpaSpecificationExecutor<finalDetail> { public interface FinalDetailDao extends JpaRepository<FinalDetail,Integer>, JpaSpecificationExecutor<FinalDetail> {
Optional<List<FinalDetail>> findByReportId(Integer reportId);
} }
package com.tykj.dev.device.finalcheck.repisotry; package com.tykj.dev.device.finalcheck.repisotry;
import com.tykj.dev.device.finalcheck.entity.domain.finalReport; import com.tykj.dev.device.finalcheck.entity.domain.FinalReport;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
...@@ -10,5 +10,5 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; ...@@ -10,5 +10,5 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
* @author Matrix <xhyrzldf@gmail.com> * @author Matrix <xhyrzldf@gmail.com>
* @since 2020/9/24 at 6:27 下午 * @since 2020/9/24 at 6:27 下午
*/ */
public interface FinalReportRepo extends JpaRepository<finalReport, Integer>, JpaSpecificationExecutor<finalReport> { public interface FinalReportDao extends JpaRepository<FinalReport, Integer>, JpaSpecificationExecutor<FinalReport> {
} }
package com.tykj.dev.device.finalcheck.service;
import com.tykj.dev.device.finalcheck.entity.vo.FinalReportVo;
import java.time.LocalDate;
import java.util.List;
/**
* FinalCheckService.
*
* @author Matrix <xhyrzldf@gmail.com>
* @since 2020/9/28 at 2:14 下午
*/
public interface FinalCheckService {
/**
* 发起指定时间范围的装备的决算
* @param startTime 决算开始时间
* @param endTime 决算结束时间
* @return {@link FinalReportVo}
*/
FinalReportVo generateReport(LocalDate startTime, LocalDate endTime);
/**
* 根据关键字查询报告列表(不附带detail)
* @param keyword 要查询的字
* @return {@link FinalReportVo} 's List
*/
List<FinalReportVo> findAllWithoutDetail(String keyword);
/**
* 根据主键id查询报告
* @param id 主键id
* @return {@link FinalReportVo}
*/
FinalReportVo findReportById(Integer id);
}
package com.tykj.dev.device.finalcheck.service.impl;
import com.github.wenhao.jpa.Specifications;
import com.tykj.dev.device.finalcheck.entity.domain.FinalDetail;
import com.tykj.dev.device.finalcheck.entity.domain.FinalReport;
import com.tykj.dev.device.finalcheck.entity.vo.FinalReportVo;
import com.tykj.dev.device.finalcheck.repisotry.FinalDetailDao;
import com.tykj.dev.device.finalcheck.repisotry.FinalReportDao;
import com.tykj.dev.device.finalcheck.service.FinalCheckService;
import com.tykj.dev.device.library.repository.DeviceLibraryDao;
import com.tykj.dev.device.library.subject.domin.DeviceLibrary;
import com.tykj.dev.device.user.util.UserUtils;
import com.tykj.dev.device.usereport.service.DeviceUseReportService;
import com.tykj.dev.device.usereport.subject.vo.DeviceStatistics;
import com.tykj.dev.misc.exception.ApiException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
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.function.Function;
import java.util.stream.Collectors;
import static com.tykj.dev.misc.utils.TimestampUtil.localDateToDate;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.toMap;
/**
* FinalCheckServiceImpl.
*
* @author Matrix <xhyrzldf@gmail.com>
* @since 2020/9/28 at 2:26 下午
*/
@Service
public class FinalCheckServiceImpl implements FinalCheckService {
@Autowired
private FinalReportDao reportDao;
@Autowired
private FinalDetailDao detailDao;
@Autowired
private DeviceLibraryDao deviceDao;
@Autowired
private DeviceUseReportService dataService;
@Autowired
private UserUtils userService;
@Override
public FinalReportVo generateReport(LocalDate startTime, LocalDate endTime) {
String name = LocalDate.now().getYear() + "决算报告";
String unitName = userService.getCurrentUserUnitName();
String operatorName = userService.getCurrentUserName();
FinalReport report = new FinalReport(name, unitName, startTime, endTime, LocalDateTime.now(), operatorName);
report = reportDao.save(report);
// 查询这段时间内该单位下的所有装备 并且计数
List<DeviceLibrary> devices = deviceDao.findAllByUnitBetweenTime(unitName, localDateToDate(startTime), localDateToDate(endTime));
// 纵向-查 横向-0 委托-0 合计-合计 代管0 收到 发出 报废0
Map<String, List<DeviceLibrary>> map = devices.stream()
.collect(groupingBy(DeviceLibrary::getModel));
List<FinalDetail> detailList = new ArrayList<>();
Map<String, DeviceStatistics> storageMap = dataService.getStorageStatistics(localDateToDate(startTime), localDateToDate(endTime))
.stream()
.collect(toMap(DeviceStatistics::getModel, Function.identity()));
Map<String, DeviceStatistics> repairMap = dataService.getRepairStatistics(localDateToDate(startTime), localDateToDate(endTime))
.stream()
.collect(toMap(DeviceStatistics::getModel, Function.identity()));
for (Map.Entry<String, List<DeviceLibrary>> entry : map.entrySet()) {
String model = entry.getKey();
List<DeviceLibrary> v = entry.getValue();
Integer received = storageMap.get(model) == null ? 0 : storageMap.get(model).getNum();
Integer sending = repairMap.get(model) == null ? 0 : repairMap.get(model).getNum();
detailList.add(new FinalDetail(model, v.get(0).getType(), v.size(), 0, 0, 0, v.size(),
0, received, sending, 0, report.getId()));
}
detailList = detailDao.saveAll(detailList);
return report.toVo(detailList);
}
@Override
public List<FinalReportVo> findAllWithoutDetail(String keyword) {
if (StringUtils.isEmpty(keyword)) {
return reportDao.findAll().stream()
.map(report -> report.toVo(Collections.emptyList()))
.collect(Collectors.toList());
}
//构造查询器
Specification<FinalReport> pred = Specifications.<FinalReport>or()
.like("name", "%" + keyword + "%")
.like("operator", "%" + keyword + "%")
.build();
return reportDao.findAll(pred).stream()
.map(report -> report.toVo(Collections.emptyList()))
.collect(Collectors.toList());
}
@Override
public FinalReportVo findReportById(Integer id) {
FinalReport report = reportDao.findById(id)
.orElseThrow(() -> new ApiException("查询的id不存在!"));
List<FinalDetail> detailList = detailDao.findByReportId(report.getId())
.orElse(Collections.emptyList());
return report.toVo(detailList);
}
}
...@@ -6,13 +6,14 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; ...@@ -6,13 +6,14 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
* @author dengdiyi * @author dengdiyi
*/ */
@SuppressWarnings("SqlResolve") @SuppressWarnings("SqlResolve")
public interface DeviceLibraryDao extends JpaRepository<DeviceLibrary,Integer>, JpaSpecificationExecutor<DeviceLibrary> { public interface DeviceLibraryDao extends JpaRepository<DeviceLibrary, Integer>, JpaSpecificationExecutor<DeviceLibrary> {
List<DeviceLibrary> getAllByModel(String model); List<DeviceLibrary> getAllByModel(String model);
...@@ -23,7 +24,8 @@ public interface DeviceLibraryDao extends JpaRepository<DeviceLibrary,Integer>, ...@@ -23,7 +24,8 @@ public interface DeviceLibraryDao extends JpaRepository<DeviceLibrary,Integer>,
/** /**
* 根据装备型号与装备所在地(多个地区)查询装备数量 * 根据装备型号与装备所在地(多个地区)查询装备数量
* @param model 装备型号 *
* @param model 装备型号
* @param locations 装备所在地列表 * @param locations 装备所在地列表
* @return 装备数量 * @return 装备数量
*/ */
...@@ -31,7 +33,8 @@ public interface DeviceLibraryDao extends JpaRepository<DeviceLibrary,Integer>, ...@@ -31,7 +33,8 @@ public interface DeviceLibraryDao extends JpaRepository<DeviceLibrary,Integer>,
/** /**
* 根据装备型号与装备所在地(一个地区)查询装备数量 * 根据装备型号与装备所在地(一个地区)查询装备数量
* @param model 装备型号 *
* @param model 装备型号
* @param location 装备所在地 * @param location 装备所在地
* @return 装备数量 * @return 装备数量
*/ */
...@@ -42,8 +45,12 @@ public interface DeviceLibraryDao extends JpaRepository<DeviceLibrary,Integer>, ...@@ -42,8 +45,12 @@ public interface DeviceLibraryDao extends JpaRepository<DeviceLibrary,Integer>,
List<DeviceLibrary> getAllByRfidCardId(String rfidCardId); List<DeviceLibrary> getAllByRfidCardId(String rfidCardId);
@Query(nativeQuery = true ,value= "select * from device_library where id in :idList") @Query(nativeQuery = true, value = "select * from device_library where id in :idList")
List<DeviceLibrary> getDeviceLibraryEntitiesByIdIn(@Param("idList") List<Integer> idList); List<DeviceLibrary> getDeviceLibraryEntitiesByIdIn(@Param("idList") List<Integer> idList);
List<DeviceLibrary> getAllByRfidSurfaceId(String rfid); List<DeviceLibrary> getAllByRfidSurfaceId(String rfid);
@Query("select o from DeviceLibrary o where o.ownUnit= :unitName and o.createTime >= :startTime and o.createTime <= :endTime")
List<DeviceLibrary> findAllByUnitBetweenTime(String unitName, Date startTime, Date endTime);
} }
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.union.BaseTest;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.ActiveProfiles;
import java.time.LocalDate;
/**
* FinalCheckControllerTest.
*
* @author Matrix <xhyrzldf@gmail.com>
* @since 2020/9/28 at 5:02 下午
*/
@WithMockUser(username = "shena", password = "qwer1234", authorities = "省A专管员")
@ActiveProfiles("test")
public class FinalCheckControllerTest extends BaseTest {
@Autowired
private FinalCheckController fcController;
@Test
public void generateReport() {
TimeParam timeParam = new TimeParam(LocalDate.of(2020, 1, 1),
LocalDate.of(2020, 11, 1));
System.out.println(fcController.generateReport(timeParam));
}
}
...@@ -44,6 +44,8 @@ import java.lang.reflect.Field; ...@@ -44,6 +44,8 @@ import java.lang.reflect.Field;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static java.util.stream.Collectors.*;
/** /**
* @author dengdiyi * @author dengdiyi
*/ */
...@@ -143,7 +145,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService { ...@@ -143,7 +145,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService {
//筛选出日期范围内所有入库账单 //筛选出日期范围内所有入库账单
List<StorageBill> storageBillEntities = storageBillDao.findAll().stream() List<StorageBill> storageBillEntities = storageBillDao.findAll().stream()
.filter(storageBillEntity -> storageBillEntity.getStorageStatus()==2&&userUtils.getCurrentUserUnitName().equals(userPublicService.findUnitsNameByUserId(storageBillEntity.getReceiveUseraId()))&&storageBillEntity.getUpdateTime().after(date)&&storageBillEntity.getUpdateTime().before(date2)) .filter(storageBillEntity -> storageBillEntity.getStorageStatus()==2&&userUtils.getCurrentUserUnitName().equals(userPublicService.findUnitsNameByUserId(storageBillEntity.getReceiveUseraId()))&&storageBillEntity.getUpdateTime().after(date)&&storageBillEntity.getUpdateTime().before(date2))
.collect(Collectors.toList()); .collect(toList());
//累加入库数量 //累加入库数量
if (storageBillEntities.size()>0){ if (storageBillEntities.size()>0){
for (StorageBill s:storageBillEntities) { for (StorageBill s:storageBillEntities) {
...@@ -158,11 +160,11 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService { ...@@ -158,11 +160,11 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService {
//筛选出接收配发装备的账单 //筛选出接收配发装备的账单
List<AllotBill> allotBillEntities = allotBillDao.findAll().stream() List<AllotBill> allotBillEntities = allotBillDao.findAll().stream()
.filter(allotBillEntity -> allotBillEntity.getAllotStatus()==5&&userUtils.getCurrentUserUnitName().equals(userPublicService.findUnitsNameByUserId(allotBillEntity.getReceiveUseraId()))&&allotBillEntity.getReceiveTime().after(date)&&allotBillEntity.getReceiveTime().before(date2)) .filter(allotBillEntity -> allotBillEntity.getAllotStatus()==5&&userUtils.getCurrentUserUnitName().equals(userPublicService.findUnitsNameByUserId(allotBillEntity.getReceiveUseraId()))&&allotBillEntity.getReceiveTime().after(date)&&allotBillEntity.getReceiveTime().before(date2))
.collect(Collectors.toList()); .collect(toList());
//筛选出配发给其它单位的账单 //筛选出配发给其它单位的账单
List<AllotBill> allotBillEntities2 = allotBillDao.findAll().stream() List<AllotBill> allotBillEntities2 = allotBillDao.findAll().stream()
.filter(allotBillEntity -> allotStatusList.contains(allotBillEntity.getAllotStatus())&&userUtils.getCurrentUserUnitName().equals(userPublicService.findUnitsNameByUserId(allotBillEntity.getSendUseraId()))&&allotBillEntity.getSendTime().after(date)&&allotBillEntity.getSendTime().before(date2)) .filter(allotBillEntity -> allotStatusList.contains(allotBillEntity.getAllotStatus())&&userUtils.getCurrentUserUnitName().equals(userPublicService.findUnitsNameByUserId(allotBillEntity.getSendUseraId()))&&allotBillEntity.getSendTime().after(date)&&allotBillEntity.getSendTime().before(date2))
.collect(Collectors.toList()); .collect(toList());
//累加入库数量 //累加入库数量
if (allotBillEntities.size()>0){ if (allotBillEntities.size()>0){
for (AllotBill s:allotBillEntities) { for (AllotBill s:allotBillEntities) {
...@@ -180,7 +182,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService { ...@@ -180,7 +182,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService {
//筛选出在日期范围内的销毁单 //筛选出在日期范围内的销毁单
List<DeviceDestroyBill> deviceDestoryBillEntities = deviceDestroyBillDao.findAll().stream() List<DeviceDestroyBill> deviceDestoryBillEntities = deviceDestroyBillDao.findAll().stream()
.filter(deviceDestoryBillEntity -> deviceDestoryBillEntity.getDestroyStatus()==2&&deviceDestoryBillEntity.getDestroyTime().after(date)&&deviceDestoryBillEntity.getDestroyTime().before(date2)) .filter(deviceDestoryBillEntity -> deviceDestoryBillEntity.getDestroyStatus()==2&&deviceDestoryBillEntity.getDestroyTime().after(date)&&deviceDestoryBillEntity.getDestroyTime().before(date2))
.collect(Collectors.toList()); .collect(toList());
//累加销毁数量 //累加销毁数量
if (deviceDestoryBillEntities.size()>0){ if (deviceDestoryBillEntities.size()>0){
for (DeviceDestroyBill s:deviceDestoryBillEntities) { for (DeviceDestroyBill s:deviceDestoryBillEntities) {
...@@ -191,11 +193,11 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService { ...@@ -191,11 +193,11 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService {
//筛选列装 //筛选列装
List<PackingLibrary> packingLibraryEntities = packingLibraryDao.findAll().stream() List<PackingLibrary> packingLibraryEntities = packingLibraryDao.findAll().stream()
.filter(packingLibraryEntity -> packingLibraryEntity.getPackingStatus()==2&&packingLibraryEntity.getCreateTime().after(date)&&packingLibraryEntity.getCreateTime().before(date2)&&packingLibraryEntity.getIsPart()==0) .filter(packingLibraryEntity -> packingLibraryEntity.getPackingStatus()==2&&packingLibraryEntity.getCreateTime().after(date)&&packingLibraryEntity.getCreateTime().before(date2)&&packingLibraryEntity.getIsPart()==0)
.collect(Collectors.toList()); .collect(toList());
//筛选退装 //筛选退装
List<PackingLibrary> packingLibraryEntities2 = packingLibraryDao.findAll().stream() List<PackingLibrary> packingLibraryEntities2 = packingLibraryDao.findAll().stream()
.filter(packingLibraryEntity -> packingLibraryEntity.getPackingStatus()==3&&packingLibraryEntity.getExitTime().after(date)&&packingLibraryEntity.getExitTime().before(date2)&&packingLibraryEntity.getIsPart()==0) .filter(packingLibraryEntity -> packingLibraryEntity.getPackingStatus()==3&&packingLibraryEntity.getExitTime().after(date)&&packingLibraryEntity.getExitTime().before(date2)&&packingLibraryEntity.getIsPart()==0)
.collect(Collectors.toList()); .collect(toList());
//添加列装数量 //添加列装数量
if (packingLibraryEntities.size()>0){ if (packingLibraryEntities.size()>0){
packingNum = packingNum + packingLibraryEntities.size(); packingNum = packingNum + packingLibraryEntities.size();
...@@ -213,7 +215,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService { ...@@ -213,7 +215,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService {
//筛选出清退账单 //筛选出清退账单
List<SendBackBillDetail> sendBackBillDetailEntities = sendBackBillDetailDao.findAll().stream() List<SendBackBillDetail> sendBackBillDetailEntities = sendBackBillDetailDao.findAll().stream()
.filter(sendBackBillDetailEntity -> sendBackStatusList.contains(sendBackBillDetailEntity.getSendBackStatus())&&sendBackBillDetailEntity.getSendUnit().equals(userUtils.getCurrentUserUnitName())&&sendBackBillDetailEntity.getSendTime().after(date)&&sendBackBillDetailEntity.getSendTime().before(date2)) .filter(sendBackBillDetailEntity -> sendBackStatusList.contains(sendBackBillDetailEntity.getSendBackStatus())&&sendBackBillDetailEntity.getSendUnit().equals(userUtils.getCurrentUserUnitName())&&sendBackBillDetailEntity.getSendTime().after(date)&&sendBackBillDetailEntity.getSendTime().before(date2))
.collect(Collectors.toList()); .collect(toList());
//累加清退数量 //累加清退数量
if (sendBackBillDetailEntities.size()>0){ if (sendBackBillDetailEntities.size()>0){
for (SendBackBillDetail s:sendBackBillDetailEntities) { for (SendBackBillDetail s:sendBackBillDetailEntities) {
...@@ -223,7 +225,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService { ...@@ -223,7 +225,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService {
//维修数量 //维修数量
List<RepairDetail> repairDetails = repairDetailDao.findAll().stream() List<RepairDetail> repairDetails = repairDetailDao.findAll().stream()
.filter(repairDetail -> repairDetail.getOwnUnit().equals(userUtils.getCurrentUserUnitName())&&repairDetail.getRepairStatus()!=3&&repairDetail.getCreateTime().after(date)&&repairDetail.getCreateTime().before(date2)) .filter(repairDetail -> repairDetail.getOwnUnit().equals(userUtils.getCurrentUserUnitName())&&repairDetail.getRepairStatus()!=3&&repairDetail.getCreateTime().after(date)&&repairDetail.getCreateTime().before(date2))
.collect(Collectors.toList()); .collect(toList());
repairNum = repairDetails.size(); repairNum = repairDetails.size();
//拼接组合字段 //拼接组合字段
deviceUseReportEntity.setReportDetail(num+"x"+inLibraryNum+"x"+repairNum+"x"+allotNum+"x"+sendBackNum+"x"+destoryNum+"x"+packingNum+"x"+retiredNum+"x"); deviceUseReportEntity.setReportDetail(num+"x"+inLibraryNum+"x"+repairNum+"x"+allotNum+"x"+sendBackNum+"x"+destoryNum+"x"+packingNum+"x"+retiredNum+"x");
...@@ -242,12 +244,15 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService { ...@@ -242,12 +244,15 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService {
//筛选出日期范围内所有入库账单 //筛选出日期范围内所有入库账单
List<StorageBill> storageBillEntities = storageBillDao.findAll().stream() List<StorageBill> storageBillEntities = storageBillDao.findAll().stream()
.filter(storageBillEntity -> storageBillEntity.getStorageStatus()==2&&userPublicService.findByUnitsToname(1).equals(userPublicService.findUnitsNameByUserId(storageBillEntity.getReceiveUseraId()))&&storageBillEntity.getUpdateTime().after(startDate)&&storageBillEntity.getUpdateTime().before(endDate)) .filter(storageBillEntity -> storageBillEntity.getStorageStatus()==2&&userPublicService.findByUnitsToname(1).equals(userPublicService.findUnitsNameByUserId(storageBillEntity.getReceiveUseraId()))&&storageBillEntity.getUpdateTime().after(startDate)&&storageBillEntity.getUpdateTime().before(endDate))
.collect(Collectors.toList()); .collect(toList());
//获取所有入库的装备 //获取所有入库的装备
if (storageBillEntities.size()>0){ if (storageBillEntities.size()>0){
for (StorageBill s:storageBillEntities) { for (StorageBill s:storageBillEntities) {
List<Integer> integerList = StringSplitUtil.userIdSplit(s.getStorageDetail()); List<Integer> integerList = StringSplitUtil.userIdSplit(s.getStorageDetail());
integerList.forEach(integer -> deviceLibraries.add(deviceLibraryService.getOne(integer))); deviceLibraries = integerList.stream()
.map(deviceLibraryService::getOne)
.filter(Objects::nonNull)
.collect(toList());
} }
} }
return getDeviceStatistics(deviceLibraries); return getDeviceStatistics(deviceLibraries);
...@@ -264,7 +269,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService { ...@@ -264,7 +269,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService {
//筛选出日期范围内所有送修账单 //筛选出日期范围内所有送修账单
List<RepairSendBill> repairSendBills = repairSendBillDao.findAll().stream() List<RepairSendBill> repairSendBills = repairSendBillDao.findAll().stream()
.filter(repairSendBill -> repairSendBill.getRepairStatus()==5&&userPublicService.findByUnitsToname(1).equals(repairSendBill.getSendUnit())&&repairSendBill.getSendTime().after(startDate)&&repairSendBill.getSendTime().before(endDate)) .filter(repairSendBill -> repairSendBill.getRepairStatus()==5&&userPublicService.findByUnitsToname(1).equals(repairSendBill.getSendUnit())&&repairSendBill.getSendTime().after(startDate)&&repairSendBill.getSendTime().before(endDate))
.collect(Collectors.toList()); .collect(toList());
//获取所有维修的装备 //获取所有维修的装备
if (repairSendBills.size()>0){ if (repairSendBills.size()>0){
for (RepairSendBill s:repairSendBills) { for (RepairSendBill s:repairSendBills) {
...@@ -295,7 +300,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService { ...@@ -295,7 +300,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService {
//筛选出日期范围内所有销毁账单 //筛选出日期范围内所有销毁账单
List<DeviceDestroyBill> deviceDestroyBills = deviceDestroyBillDao.findAll().stream() List<DeviceDestroyBill> deviceDestroyBills = deviceDestroyBillDao.findAll().stream()
.filter(deviceDestroyBill -> deviceDestroyBill.getDestroyStatus()==2&&deviceDestroyBill.getDestroyTime().after(startDate)&&deviceDestroyBill.getDestroyTime().before(endDate)) .filter(deviceDestroyBill -> deviceDestroyBill.getDestroyStatus()==2&&deviceDestroyBill.getDestroyTime().after(startDate)&&deviceDestroyBill.getDestroyTime().before(endDate))
.collect(Collectors.toList()); .collect(toList());
//获取所有销毁的装备 //获取所有销毁的装备
if (deviceDestroyBills.size()>0){ if (deviceDestroyBills.size()>0){
for (DeviceDestroyBill s:deviceDestroyBills) { for (DeviceDestroyBill s:deviceDestroyBills) {
...@@ -326,7 +331,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService { ...@@ -326,7 +331,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService {
//筛选出日期范围内所有报废账单 //筛选出日期范围内所有报废账单
List<ScrapBill> scrapBills = scrapBillDao.findAll().stream() List<ScrapBill> scrapBills = scrapBillDao.findAll().stream()
.filter(scrapBill -> scrapBill.getScrapUnit().equals(userPublicService.findByUnitsToname(1))&&scrapBill.getScrapTime().after(startDate)&&scrapBill.getScrapTime().before(endDate)) .filter(scrapBill -> scrapBill.getScrapUnit().equals(userPublicService.findByUnitsToname(1))&&scrapBill.getScrapTime().after(startDate)&&scrapBill.getScrapTime().before(endDate))
.collect(Collectors.toList()); .collect(toList());
//获取所有报废的装备 //获取所有报废的装备
if (scrapBills.size()>0){ if (scrapBills.size()>0){
for (ScrapBill s:scrapBills) { for (ScrapBill s:scrapBills) {
...@@ -371,7 +376,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService { ...@@ -371,7 +376,7 @@ public class DeviceUseReportServiceImpl implements DeviceUseReportService {
*/ */
private List<DeviceStatistics> getDeviceStatistics(List<DeviceLibrary> deviceLibraries){ private List<DeviceStatistics> getDeviceStatistics(List<DeviceLibrary> deviceLibraries){
List<DeviceStatistics> deviceStatisticsList = new ArrayList<>(); List<DeviceStatistics> deviceStatisticsList = new ArrayList<>();
Map<String,List<DeviceLibrary>> map = deviceLibraries.stream().collect(Collectors.groupingBy(deviceLibrary -> deviceLibrary.getModel()+"Ǵ"+deviceLibrary.getName()+"Ǵ"+deviceLibrary.getType())); Map<String,List<DeviceLibrary>> map = deviceLibraries.stream().collect(groupingBy(deviceLibrary -> deviceLibrary.getModel()+"Ǵ"+deviceLibrary.getName()+"Ǵ"+deviceLibrary.getType()));
map.forEach((s, deviceLibraries1) -> { map.forEach((s, deviceLibraries1) -> {
String[] strings = s.split("Ǵ"); String[] strings = s.split("Ǵ");
if (strings.length==3){ if (strings.length==3){
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论