mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-07-25 07:07:37 +08:00
feat(InventoryCheckService): enhance getPreDetails method with additional filtering options
This commit is contained in:
@@ -2,9 +2,16 @@ package cn.lihongjie.coal.inventoryCheck.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class GetPreDetailsDto {
|
||||
|
||||
private String id;
|
||||
|
||||
private LocalDateTime checkTime;
|
||||
|
||||
private String coalInfo;
|
||||
|
||||
private String product;
|
||||
|
||||
}
|
||||
|
||||
@@ -17,13 +17,11 @@ import cn.lihongjie.coal.inventoryCheckDetail.mapper.InventoryCheckDetailMapper;
|
||||
import cn.lihongjie.coal.inventoryCheckDetail.repository.InventoryCheckDetailRepository;
|
||||
import cn.lihongjie.coal.inventoryCheckDetail.service.InventoryCheckDetailService;
|
||||
|
||||
import jakarta.persistence.criteria.CriteriaBuilder;
|
||||
import jakarta.persistence.criteria.CriteriaQuery;
|
||||
import jakarta.persistence.criteria.Predicate;
|
||||
import jakarta.persistence.criteria.Root;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.data.domain.Page;
|
||||
@@ -124,49 +122,83 @@ public class InventoryCheckService
|
||||
|
||||
public List<InventoryCheckDetailDto> getPreDetails(GetPreDetailsDto request) {
|
||||
|
||||
String id = request.getId();
|
||||
if (StringUtils.isNotBlank(request.getCoalInfo())) {
|
||||
Page<InventoryCheckDetailEntity> page =
|
||||
inventoryCheckDetailRepository.findAll(
|
||||
(Specification<InventoryCheckDetailEntity>)
|
||||
(root, query, criteriaBuilder) -> {
|
||||
Predicate p1 =
|
||||
criteriaBuilder.equal(
|
||||
root.get("coalInfo").get("id"),
|
||||
request.getCoalInfo());
|
||||
|
||||
InventoryCheckDto curr = getById(id);
|
||||
Predicate p2 = criteriaBuilder.lessThan(
|
||||
root.get("checkTime"),
|
||||
request.getCheckTime());
|
||||
|
||||
query.orderBy(criteriaBuilder.desc(root.get("checkTime")));
|
||||
|
||||
return criteriaBuilder.and(p1, p2);
|
||||
},
|
||||
PageRequest.of(0, 1)); // 只取第一条记录
|
||||
|
||||
var prev =
|
||||
repository.findOne(
|
||||
new Specification<InventoryCheckEntity>() {
|
||||
@Override
|
||||
public Predicate toPredicate(
|
||||
Root<InventoryCheckEntity> root,
|
||||
CriteriaQuery<?> query,
|
||||
CriteriaBuilder criteriaBuilder) {
|
||||
|
||||
Predicate p1 =
|
||||
criteriaBuilder.lessThan(
|
||||
root.get("checkTime"), curr.getCheckTime());
|
||||
Predicate p2 =
|
||||
criteriaBuilder.equal(
|
||||
root.get("organizationId"),
|
||||
curr.getOrganizationId());
|
||||
|
||||
query.orderBy(criteriaBuilder.desc(root.get("checkTime")));
|
||||
|
||||
return criteriaBuilder.and(p1, p2);
|
||||
}
|
||||
});
|
||||
|
||||
if (prev.isEmpty()) {
|
||||
return List.of();
|
||||
return page.getContent().stream().map(inventoryCheckDetailMapper::toDto).toList();
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(request.getProduct())) {
|
||||
Page<InventoryCheckDetailEntity> page =
|
||||
inventoryCheckDetailRepository.findAll(
|
||||
(Specification<InventoryCheckDetailEntity>)
|
||||
(root, query, criteriaBuilder) -> {
|
||||
Predicate p1 =
|
||||
criteriaBuilder.equal(
|
||||
root.get("product").get("id"),
|
||||
request.getProduct());
|
||||
|
||||
List<InventoryCheckDetailEntity> all =
|
||||
inventoryCheckDetailRepository.findAll(
|
||||
(Specification<InventoryCheckDetailEntity>)
|
||||
(root, query, criteriaBuilder) ->
|
||||
criteriaBuilder.equal(
|
||||
root.get("inventoryCheck").get("id"), prev.get().getId()));
|
||||
Predicate p2 = criteriaBuilder.lessThan(
|
||||
root.get("checkTime"),
|
||||
request.getCheckTime());
|
||||
|
||||
query.orderBy(criteriaBuilder.desc(root.get("checkTime")));
|
||||
|
||||
return criteriaBuilder.and(p1, p2);
|
||||
},
|
||||
PageRequest.of(0, 1)); // 只取第一条记录
|
||||
|
||||
return all.stream().map(inventoryCheckDetailMapper::toDto).toList();
|
||||
return page.getContent().stream().map(inventoryCheckDetailMapper::toDto).toList();
|
||||
}
|
||||
|
||||
// 如果只传入了时间,找到距离这个时间最近的InventoryCheck对象,返回全部detail
|
||||
if (request.getCheckTime() != null) {
|
||||
Page<InventoryCheckEntity> inventoryPage = repository.findAll(
|
||||
(Specification<InventoryCheckEntity>)
|
||||
(root, query, criteriaBuilder) -> {
|
||||
Predicate timePredicate = criteriaBuilder.lessThan(
|
||||
root.get("checkTime"),
|
||||
request.getCheckTime());
|
||||
|
||||
query.orderBy(criteriaBuilder.desc(root.get("checkTime")));
|
||||
|
||||
return timePredicate;
|
||||
},
|
||||
PageRequest.of(0, 1)); // 只取最新的一条InventoryCheck记录
|
||||
|
||||
if (!inventoryPage.getContent().isEmpty()) {
|
||||
InventoryCheckEntity latestInventoryCheck = inventoryPage.getContent().get(0);
|
||||
|
||||
// 返回这个InventoryCheck的所有详情
|
||||
List<InventoryCheckDetailEntity> details =
|
||||
inventoryCheckDetailRepository.findAll(
|
||||
(Specification<InventoryCheckDetailEntity>)
|
||||
(root, query, criteriaBuilder) ->
|
||||
criteriaBuilder.equal(
|
||||
root.get("inventoryCheck").get("id"),
|
||||
latestInventoryCheck.getId()));
|
||||
|
||||
return details.stream().map(inventoryCheckDetailMapper::toDto).toList();
|
||||
}
|
||||
}
|
||||
|
||||
return List.of(); // 如果没有找到符合条件的记录,返回空列表
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user