|
@@ -750,9 +750,6 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
|
|
|
})
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
- Map<Long, BigDecimal> map = bomSpecList.stream().collect(
|
|
|
- Collectors.toMap(DocumentByOrderVo.BomSpec::getOrderSkuId, DocumentByOrderVo.BomSpec::getQuantity));
|
|
|
-
|
|
|
// 包材
|
|
|
List<DocumentByOrderVo.BomSpec> packBomSpecList = orderSkuBomList.stream()
|
|
|
.map(item -> {
|
|
@@ -763,7 +760,6 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
|
|
|
bomSpec.setUnitPrice(item.getUnitPrice());
|
|
|
return bomSpec;
|
|
|
})
|
|
|
- .peek(item -> item.setQuantity(ObjectUtil.equals(map.get(item.getOrderSkuId()), BigDecimal.ZERO) ? item.getQuantity() : map.get(item.getOrderSkuId()).multiply(item.getQuantity())))
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
// 赋值
|
|
@@ -811,6 +807,10 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
|
|
|
OrderExchangeDetail::getOrderSkuId,
|
|
|
OrderExchangeDetail::getQuantity,
|
|
|
BigDecimal::add));
|
|
|
+ Map<Long, BigDecimal> exchangeReturnAmountMap = exchangeDetailList.stream().collect(Collectors.toMap(
|
|
|
+ OrderExchangeDetail::getOrderSkuId,
|
|
|
+ OrderExchangeDetail::getReturnAmount,
|
|
|
+ BigDecimal::add));
|
|
|
|
|
|
// 获取订单
|
|
|
List<OrderInfo> orderList = orderService.list(q -> q.in(BaseIdPo::getId, orderIdList));
|
|
@@ -819,14 +819,7 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
|
|
|
|
|
|
List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.in(OrderSkuBom::getOrderSkuId, exchangeDetailMap.keySet()));
|
|
|
// 筛选出可二次利用的包材
|
|
|
- List<OrderSkuBom> tempOrderSkuBomList = this.getReusableOrderSkuBomList(orderSkuBomList);
|
|
|
- Map<Long, BigDecimal> packagingMaterialCostMap = tempOrderSkuBomList.stream()
|
|
|
- .peek(item -> item.setUnitPrice(item.getUnitPrice().negate()))
|
|
|
- .collect(Collectors.toMap(
|
|
|
- OrderSkuBom::getOrderSkuId,
|
|
|
- v -> v.getUnitPrice().multiply(v.getQuantity()),
|
|
|
- BigDecimal::add
|
|
|
- ));
|
|
|
+ List<OrderSkuBom> tempOrderSkuBomList = this.getReusableOrderSkuBomList(orderSkuBomList, exchangeDetailList);
|
|
|
|
|
|
// 将订单sku数量更新为退货数量,退货只退裸垫单价和可二次利用的包材费
|
|
|
for (OrderSku orderSku : orderSkuList) {
|
|
@@ -838,7 +831,10 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
|
|
|
orderSku.setUnitPrice(orderSku.getUnitPrice().negate());
|
|
|
orderSku.setDeliveryMaterialsFee(BigDecimal.ZERO);
|
|
|
orderSku.setManagementFee(BigDecimal.ZERO);
|
|
|
- orderSku.setPackagingMaterialCost(packagingMaterialCostMap.getOrDefault(orderSku.getId(), BigDecimal.ZERO));
|
|
|
+ orderSku.setPackagingMaterialCost(exchangeReturnAmountMap.get(orderSku.getId())
|
|
|
+ .divide(orderSku.getQuantity(), 4, RoundingMode.HALF_UP)
|
|
|
+ .add(orderSku.getUnitPrice())
|
|
|
+ .negate());
|
|
|
}
|
|
|
|
|
|
List<DocumentByOrderVo> result = orderList.stream().map(item -> {
|
|
@@ -993,23 +989,22 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
|
|
|
// 按品名升序排序
|
|
|
result.sort(comparing(DocumentByBomVo::getBomSpecName));
|
|
|
|
|
|
- Map<Long, BigDecimal> orderSkuMap = orderSkuList.stream().collect(Collectors.toMap(BaseIdPo::getId, OrderSku::getQuantity));
|
|
|
-
|
|
|
// 包材bom
|
|
|
List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.in(OrderSkuBom::getOrderSkuId, exchangeDetailMap.keySet()));
|
|
|
// 筛选出可二次利用的包材
|
|
|
- List<OrderSkuBom> tempOrderSkuBomList = this.getReusableOrderSkuBomList(orderSkuBomList);
|
|
|
+ List<OrderSkuBom> tempOrderSkuBomList = this.getReusableOrderSkuBomList(orderSkuBomList, exchangeDetailList);
|
|
|
|
|
|
List<DocumentByBomVo> bomVoList = tempOrderSkuBomList.stream()
|
|
|
.map(item ->
|
|
|
DocumentByBomVo.builder()
|
|
|
.bomSpecId(item.getBomSpecId())
|
|
|
- .quantity(item.getQuantity().multiply(orderSkuMap.get(item.getOrderSkuId())))
|
|
|
+ .quantity(item.getQuantity())
|
|
|
.unitPrice(item.getUnitPrice().negate())
|
|
|
- .subtotal(item.getUnitPrice().multiply(item.getQuantity().multiply(orderSkuMap.get(item.getOrderSkuId()))).negate())
|
|
|
- .total(item.getUnitPrice().multiply(item.getQuantity().multiply(orderSkuMap.get(item.getOrderSkuId()))).negate())
|
|
|
+ .subtotal(item.getUnitPrice().multiply(item.getQuantity().negate()))
|
|
|
+ .total(item.getUnitPrice().multiply(item.getQuantity().negate()))
|
|
|
.build()
|
|
|
- ).collect(Collectors.toList());
|
|
|
+ )
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
// 赋值包材bom品名品号
|
|
|
bomSpecService.attributeAssign(bomVoList, DocumentByBomVo::getBomSpecId, (item, bomSpec) -> {
|
|
@@ -1061,18 +1056,16 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
|
|
|
OrderExchangeDetail::getOrderSkuId,
|
|
|
OrderExchangeDetail::getQuantity,
|
|
|
BigDecimal::add));
|
|
|
+ Map<Long, BigDecimal> exchangeReturnAmountMap = exchangeDetailList.stream().collect(Collectors.toMap(
|
|
|
+ OrderExchangeDetail::getOrderSkuId,
|
|
|
+ OrderExchangeDetail::getReturnAmount,
|
|
|
+ BigDecimal::add));
|
|
|
if (exchangeDetailList.isEmpty()) {
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
|
|
|
// 获取订单sku
|
|
|
List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(BaseIdPo::getId, exchangeDetailMap.keySet()));
|
|
|
- List<Long> orderSkuIds = orderSkuList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
|
|
|
- // 获取可二次利用的包材金额
|
|
|
- List<OrderSkuBom> orderSkuBomList = orderSkuBomService.list(q -> q.in(OrderSkuBom::getOrderSkuId, orderSkuIds));
|
|
|
- List<OrderSkuBom> tempOrderSkuBomList = this.getReusableOrderSkuBomList(orderSkuBomList);
|
|
|
- Map<Long, BigDecimal> packagingMaterialCostMap = tempOrderSkuBomList.stream()
|
|
|
- .collect(Collectors.toMap(OrderSkuBom::getOrderSkuId, v -> v.getUnitPrice().multiply(v.getQuantity()), BigDecimal::add));
|
|
|
|
|
|
// 生成结果集
|
|
|
List<DocumentBySkuVo> documentBySkuVoList = orderSkuList.stream()
|
|
@@ -1080,17 +1073,14 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
|
|
|
.skuSpecId(item.getSkuSpecId())
|
|
|
.orderId(item.getOrderId())
|
|
|
.quantity(exchangeDetailMap.get(item.getId()))
|
|
|
- .unitPrice(item.getUnitPrice()
|
|
|
- .add(packagingMaterialCostMap.getOrDefault(item.getId(), BigDecimal.ZERO))
|
|
|
+ .unitPrice(exchangeReturnAmountMap.get(item.getId())
|
|
|
+ .divide(exchangeDetailMap.get(item.getId()), 2, RoundingMode.HALF_UP)
|
|
|
.negate()
|
|
|
)
|
|
|
.checkFee(BigDecimal.valueOf(2).multiply(exchangeDetailMap.get(item.getId())))
|
|
|
+ .subtotal(exchangeReturnAmountMap.get(item.getId()).negate()
|
|
|
+ .add(BigDecimal.valueOf(2).multiply(exchangeDetailMap.get(item.getId()))))
|
|
|
.build())
|
|
|
- .peek(item ->
|
|
|
- item.setSubtotal(item.getQuantity()
|
|
|
- .multiply(item.getUnitPrice())
|
|
|
- .add(item.getCheckFee())
|
|
|
- .setScale(2, RoundingMode.HALF_UP)))
|
|
|
.peek(item -> item.setTotal(item.getSubtotal()))
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
@@ -1108,6 +1098,7 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
|
|
|
Function.identity(),
|
|
|
(v1, v2) -> {
|
|
|
v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
|
|
|
+ v1.setCheckFee(v1.getCheckFee().add(v2.getCheckFee()));
|
|
|
v1.setSubtotal(v1.getSubtotal().add(v2.getSubtotal()));
|
|
|
v1.setTotal(v1.getTotal().add(v2.getTotal()));
|
|
|
return v1;
|
|
@@ -1122,7 +1113,14 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
|
|
|
* @param orderSkuBomList
|
|
|
* @return
|
|
|
*/
|
|
|
- private List<OrderSkuBom> getReusableOrderSkuBomList(List<OrderSkuBom> orderSkuBomList) {
|
|
|
+ private List<OrderSkuBom> getReusableOrderSkuBomList(List<OrderSkuBom> orderSkuBomList, List<OrderExchangeDetail> exchangeDetailList) {
|
|
|
+ Map<Long, OrderExchangeDetail> exchangeDetailMap = exchangeDetailList.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ OrderExchangeDetail::getOrderSkuId,
|
|
|
+ Function.identity(),
|
|
|
+ (v1, v2) -> v2)
|
|
|
+ );
|
|
|
+
|
|
|
List<Long> bomSpecIdList = orderSkuBomList.stream()
|
|
|
.map(OrderSkuBom::getBomSpecId)
|
|
|
.distinct()
|
|
@@ -1136,7 +1134,15 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
|
|
|
return false;
|
|
|
}
|
|
|
return true;
|
|
|
- }).collect(Collectors.toList());
|
|
|
+ })
|
|
|
+ .peek(item -> {
|
|
|
+ OrderExchangeDetail orderExchangeDetail = exchangeDetailMap.get(item.getOrderSkuId());
|
|
|
+ item.setQuantity(item.getQuantity()
|
|
|
+ .multiply(orderExchangeDetail.getQuantity())
|
|
|
+ .subtract(orderExchangeDetail.getMeshBagDamageQuantity()));
|
|
|
+ })
|
|
|
+ .filter(item -> item.getQuantity().compareTo(BigDecimal.ZERO) > 0)
|
|
|
+ .collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
}
|