mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-01-25 15:55:18 +08:00
feat: 增加库存查询新接口
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user