|
|
@@ -3339,7 +3339,74 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
|
|
|
} else {
|
|
|
pjShip.setStorageId(null);
|
|
|
}
|
|
|
+ LambdaQueryWrapper<PjOrderItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ itemsLambdaQueryWrapper.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .eq(PjOrderItems::getPid, pjOrder.getId());
|
|
|
+ List<PjOrderItems> itemsList = orderItemsService.list(itemsLambdaQueryWrapper);
|
|
|
+ List<Long> goodsId = new ArrayList<>();
|
|
|
+ List<PjStockDesc> pjStockDescList;
|
|
|
+ if (!itemsList.isEmpty()) {
|
|
|
+ goodsId = itemsList.stream().map(PjOrderItems::getGoodsId).distinct().collect(Collectors.toList());
|
|
|
+ LambdaQueryWrapper<PjStockDesc> stockLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ stockLambdaQueryWrapper.eq(ObjectUtils.isNotNull(pjOrder.getStorageId()), PjStockDesc::getStorageId, pjOrder.getStorageId())
|
|
|
+ .eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjStockDesc::getIsDeleted, 0)
|
|
|
+ .in(PjStockDesc::getGoodsId, goodsId);
|
|
|
+ pjStockDescList = stockDescService.list(stockLambdaQueryWrapper);
|
|
|
+ for (PjOrderItems item : itemsList) {
|
|
|
+ BigDecimal balanceQuantity = new BigDecimal("0.00");
|
|
|
+ BigDecimal inventoryAmount = new BigDecimal("0.00");
|
|
|
+ BigDecimal rebateInventoryAmount = new BigDecimal("0.00");
|
|
|
+ item.setSendNum(new BigDecimal("0.00"));
|
|
|
+ if (!pjStockDescList.isEmpty()) {
|
|
|
+ balanceQuantity = pjStockDescList.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId())).map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ inventoryAmount = pjStockDescList.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId())).map(PjStockDesc::getInventoryAmount).filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ rebateInventoryAmount = pjStockDescList.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId())).map(PjStockDesc::getRebateInventoryAmount).filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ }
|
|
|
+ BigDecimal inventoryCostPrice;
|
|
|
+ BigDecimal rebateInventoryCostPrice;
|
|
|
+ if (balanceQuantity.compareTo(new BigDecimal("0.00")) == 0 ||
|
|
|
+ inventoryAmount.compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
+ inventoryCostPrice = new BigDecimal("0.00");
|
|
|
+ } else {
|
|
|
+ inventoryCostPrice = inventoryAmount.divide(balanceQuantity, 2, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+ if (balanceQuantity.compareTo(new BigDecimal("0.00")) == 0 ||
|
|
|
+ rebateInventoryAmount.compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
+ rebateInventoryCostPrice = new BigDecimal("0.00");
|
|
|
+ } else {
|
|
|
+ rebateInventoryCostPrice = rebateInventoryAmount.divide(balanceQuantity, 2, RoundingMode.HALF_UP);
|
|
|
+ item.setRebatePrice(rebateInventoryCostPrice);
|
|
|
+ }
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ //计算小计
|
|
|
+ item.setSubTotalMoney(item.getGoodsNum().multiply(item.getPrice()));
|
|
|
+ if (ObjectUtils.isNull(pjOrder.getStatus()) || "录入".equals(pjOrder.getStatus())) {
|
|
|
+ item.setPrimaryGoodsTotalNum(item.getGoodsNum());
|
|
|
+ }
|
|
|
+ //计算成本
|
|
|
+ item.setCostprie(item.getGoodsNum().multiply(inventoryCostPrice));
|
|
|
+ item.setCostpriePrice(inventoryCostPrice);
|
|
|
+ item.setRebateCostprie(item.getGoodsNum().multiply(rebateInventoryCostPrice));
|
|
|
+ //计算毛利
|
|
|
+ item.setGrossProfit(item.getSubTotalMoney().subtract(item.getCostprie()));
|
|
|
+ item.setRebateProfit(item.getSubTotalMoney().subtract(item.getRebateCostprie()));
|
|
|
+ orderItemsService.saveOrUpdate(item);
|
|
|
+ }
|
|
|
+ //毛利
|
|
|
+ pjOrder.setGrossProfit(itemsList.stream().map(PjOrderItems::getGrossProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ //成本
|
|
|
+ pjOrder.setCost(itemsList.stream().map(PjOrderItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ pjOrder.setRebateGrossProfit(itemsList.stream().map(PjOrderItems::getRebateProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ //成本
|
|
|
+ pjOrder.setRebateCost(itemsList.stream().map(PjOrderItems::getRebateCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
|
|
|
+ }
|
|
|
pjShip.setBusinesDate(new Date());
|
|
|
pjShip.setBillno(billNo);
|
|
|
pjShip.setOrdNo(pjOrder.getOrdNo());
|
|
|
@@ -3381,13 +3448,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
|
|
|
}*/
|
|
|
//内部销售修改上架管理的库存
|
|
|
if (pjOrder.getBusinessSource().equals(OrderTypeEnum.WEB.getType())) {
|
|
|
- LambdaQueryWrapper<PjOrderItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
- itemsLambdaQueryWrapper.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
- .eq(PjOrderItems::getPid, pjOrder.getId());
|
|
|
- List<PjOrderItems> itemsList = orderItemsService.list(itemsLambdaQueryWrapper);
|
|
|
if (ObjectUtil.isNotEmpty(itemsList)) {
|
|
|
- List<Long> goodsId = itemsList.stream().map(PjOrderItems::getGoodsId).distinct().collect(Collectors.toList());
|
|
|
List<String> goodsNames = itemsList.stream().map(PjOrderItems::getGoodsName).distinct().collect(Collectors.toList());
|
|
|
for (PjOrderItems item : itemsList) {
|
|
|
item.setBillKey(item.getGoodsId() + item.getDot());
|