feat: 增加库存查询新接口

This commit is contained in:
2024-11-22 22:44:16 +08:00
parent 2a9b5f9565
commit bed4fa1886

View File

@@ -1,5 +1,7 @@
package cn.lihongjie.coal.warehouseReceipt.service; package cn.lihongjie.coal.warehouseReceipt.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.NumberUtil;
import cn.lihongjie.coal.base.dto.CommonQuery; import cn.lihongjie.coal.base.dto.CommonQuery;
import cn.lihongjie.coal.base.dto.IdRequest; import cn.lihongjie.coal.base.dto.IdRequest;
import cn.lihongjie.coal.base.service.BaseService; import cn.lihongjie.coal.base.service.BaseService;
@@ -419,35 +421,41 @@ public class WarehouseReceiptService
public void delete(IdRequest dto) { public void delete(IdRequest dto) {
List<WarehouseReceiptEntity> all = this.repository.findAll( List<WarehouseReceiptEntity> all =
new Specification<WarehouseReceiptEntity>() { this.repository.findAll(
@Override new Specification<WarehouseReceiptEntity>() {
public Predicate toPredicate( @Override
Root<WarehouseReceiptEntity> root, public Predicate toPredicate(
CriteriaQuery<?> query, Root<WarehouseReceiptEntity> root,
CriteriaBuilder criteriaBuilder) { CriteriaQuery<?> query,
CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.or( return criteriaBuilder.or(
root.get("id").in(dto.getIds()), root.get("id").in(dto.getIds()),
root.get("parent").get("id").in(dto.getIds())); root.get("parent").get("id").in(dto.getIds()));
} }
}); });
List<WarehouseReceiptEntity> ch = this.repository.findAll( List<WarehouseReceiptEntity> ch =
new Specification<WarehouseReceiptEntity>() { this.repository.findAll(
@Override new Specification<WarehouseReceiptEntity>() {
public Predicate toPredicate( @Override
Root<WarehouseReceiptEntity> root, public Predicate toPredicate(
CriteriaQuery<?> query, Root<WarehouseReceiptEntity> root,
CriteriaBuilder criteriaBuilder) { CriteriaQuery<?> query,
CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.or( return criteriaBuilder.or(
root.get("id").in(dto.getIds()), root.get("id").in(dto.getIds()),
root.get("parent").get("id").isNotNull()); root.get("parent").get("id").isNotNull());
} }
}); });
List<String> list = ch.stream().filter(x -> x.getParent()!=null).map(x -> x.getParent().getId()).toList(); List<String> list =
ch.stream()
.filter(x -> x.getParent() != null)
.map(x -> x.getParent().getId())
.toList();
Collection<String> notSelected = CollectionUtils.removeAll(list, dto.getIds()); Collection<String> notSelected = CollectionUtils.removeAll(list, dto.getIds());
@@ -488,19 +496,20 @@ public class WarehouseReceiptService
public void archive(IdRequest dto) { public void archive(IdRequest dto) {
List<WarehouseReceiptEntity> all = this.repository.findAll( List<WarehouseReceiptEntity> all =
new Specification<WarehouseReceiptEntity>() { this.repository.findAll(
@Override new Specification<WarehouseReceiptEntity>() {
public Predicate toPredicate( @Override
Root<WarehouseReceiptEntity> root, public Predicate toPredicate(
CriteriaQuery<?> query, Root<WarehouseReceiptEntity> root,
CriteriaBuilder criteriaBuilder) { CriteriaQuery<?> query,
CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.or( return criteriaBuilder.or(
root.get("id").in(dto.getIds()), root.get("id").in(dto.getIds()),
root.get("parent").get("id").in(dto.getIds())); root.get("parent").get("id").in(dto.getIds()));
} }
}); });
dto.setIds(all.stream().map(WarehouseReceiptEntity::getId).toList()); dto.setIds(all.stream().map(WarehouseReceiptEntity::getId).toList());
@@ -508,19 +517,20 @@ public class WarehouseReceiptService
} }
public void unarchive(IdRequest dto) { public void unarchive(IdRequest dto) {
List<WarehouseReceiptEntity> all = this.repository.findAll( List<WarehouseReceiptEntity> all =
new Specification<WarehouseReceiptEntity>() { this.repository.findAll(
@Override new Specification<WarehouseReceiptEntity>() {
public Predicate toPredicate( @Override
Root<WarehouseReceiptEntity> root, public Predicate toPredicate(
CriteriaQuery<?> query, Root<WarehouseReceiptEntity> root,
CriteriaBuilder criteriaBuilder) { CriteriaQuery<?> query,
CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.or( return criteriaBuilder.or(
root.get("id").in(dto.getIds()), root.get("id").in(dto.getIds()),
root.get("parent").get("id").in(dto.getIds())); root.get("parent").get("id").in(dto.getIds()));
} }
}); });
dto.setIds(all.stream().map(WarehouseReceiptEntity::getId).toList()); dto.setIds(all.stream().map(WarehouseReceiptEntity::getId).toList());
@@ -529,7 +539,7 @@ public class WarehouseReceiptService
@PersistenceContext EntityManager em; @PersistenceContext EntityManager em;
public Object report(WarehouseReportRequest request){ public Object report(WarehouseReportRequest request) {
request.setOrganizationId(Ctx.currentUser().getOrganizationId()); request.setOrganizationId(Ctx.currentUser().getOrganizationId());
@@ -608,13 +618,13 @@ public class WarehouseReceiptService
inner join t_warehouse w on 1 = 1 inner join t_warehouse w on 1 = 1
<#if excludeEmpty> <#if excludeEmpty>
inner inner
<#else> <#else>
left left
</#if> </#if>
join t_warehouse_receipt_detail d on d.goods_id = gs.id join t_warehouse_receipt_detail d on d.goods_id = gs.id
left join t_warehouse_receipt re on d.receipt_id = re.id left join t_warehouse_receipt re on d.receipt_id = re.id
left join t_warehouse_goods_unit gu on gs.unit_id = gu.id left join t_warehouse_goods_unit gu on gs.unit_id = gu.id
@@ -624,7 +634,7 @@ public class WarehouseReceiptService
where 1=1 where 1=1
<#if startTime??> <#if startTime??>
and re.receipt_date >= :startTime and re.receipt_date >= :startTime
</#if> </#if>
<#if endTime??> <#if endTime??>
and re.receipt_date <= :endTime and re.receipt_date <= :endTime
@@ -690,11 +700,11 @@ public class WarehouseReceiptService
var selectSql = var selectSql =
"select * from (" "select * from ("
+ sql + sql
+ ") as t limit " + ") as t limit "
+ request.getPageSize() + request.getPageSize()
+ " offset " + " offset "
+ request.getPageNo() * request.getPageSize(); + request.getPageNo() * request.getPageSize();
Integer count = JpaUtils.execNativeQuery(em, countSql, request, Integer.class).get(0); Integer count = JpaUtils.execNativeQuery(em, countSql, request, Integer.class).get(0);
@@ -708,25 +718,116 @@ public class WarehouseReceiptService
x -> x ->
((Map) x) ((Map) x)
.entrySet().stream() .entrySet().stream()
.collect( .collect(
Collectors.toMap( Collectors.toMap(
(Map.Entry e) -> (Map.Entry e) ->
CaseFormat CaseFormat
.LOWER_UNDERSCORE .LOWER_UNDERSCORE
.to( .to(
CaseFormat CaseFormat
.LOWER_CAMEL, .LOWER_CAMEL,
e.getKey() e.getKey()
.toString()), .toString()),
e -> e ->
ObjectUtils ObjectUtils
.defaultIfNull( .defaultIfNull(
e e
.getValue(), .getValue(),
"")))) ""))))
.toList(); .toList();
return new PageImpl<>(ans, PageRequest.of(0, request.getPageSize()), count); if (request.getStartTime() != null) {
WarehouseReportRequest newRequest = new WarehouseReportRequest();
BeanUtil.copyProperties(request, newRequest);
newRequest.setPageSize(request.getPageSize());
newRequest.setGoodsIds(
ans.stream()
.map(
x -> {
if (x instanceof Map) {
return ((Map) x).get("id").toString();
}
return null;
})
.toList());
newRequest.setStartTime(null);
newRequest.setEndTime(request.getStartTime().minusSeconds(1));
List content = ((PageImpl) report(newRequest)).getContent();
for (Object o : content) {
if (o instanceof Map<?, ?> prevMap) {
String id = prevMap.get("id").toString();
Map<String, Object> currMap =
(Map<String, Object>)
ans.stream()
.filter(
x ->
x instanceof Map
&& ((Map) x)
.get("id")
.equals(id))
.findFirst()
.get();
Double prevType0Number =
NumberUtil.parseDouble(prevMap.get("type0Number") + "", 0.0);
Double prevType1Number =
NumberUtil.parseDouble(prevMap.get("type1Number") + "", 0.0);
Double prevType0Amount =
NumberUtil.parseDouble(prevMap.get("type0Amount") + "", 0.0);
Double prevType1Amount =
NumberUtil.parseDouble(prevMap.get("type1Amount") + "", 0.0);
Double prevNumber = prevType0Number - prevType1Number;
Double prevAmount = prevType0Amount - prevType1Amount;
Double currType0Number =
NumberUtil.parseDouble(currMap.get("type0Number") + "", 0.0);
Double currType1Number =
NumberUtil.parseDouble(currMap.get("type1Number") + "", 0.0);
Double currType0Amount =
NumberUtil.parseDouble(currMap.get("type0Amount") + "", 0.0);
Double currType1Amount =
NumberUtil.parseDouble(currMap.get("type1Amount") + "", 0.0);
Double currNumber = prevNumber + currType0Number - currType1Number;
Double currAmount = prevAmount + currType0Amount - currType1Amount;
Double currPrice =
NumberUtils.round2(currNumber == 0 ? 0 : currAmount / currNumber);
currMap.put("currNumber", currNumber);
currMap.put("currAmount", currAmount);
currMap.put("currPrice", currPrice);
currMap.put("prevNumber", prevNumber);
currMap.put("prevAmount", prevAmount);
currMap.put(
"prevPrice",
NumberUtils.round2(prevNumber == 0 ? 0 : prevAmount / prevNumber));
}
}
}
return new PageImpl<>(ans, PageRequest.of(0, request.getPageSize()), count);
} }
} }