|
|
@@ -24,6 +24,7 @@ import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
import org.springblade.salesPart.dto.SaleDetail;
|
|
|
import org.springblade.salesPart.dto.SaleDetailDto;
|
|
|
+import org.springblade.salesPart.dto.SalespersonCustomer;
|
|
|
import org.springblade.salesPart.dto.StayDoOrder;
|
|
|
import org.springblade.salesPart.entity.PjOrder;
|
|
|
import org.springblade.salesPart.entity.PjOrderItems;
|
|
|
@@ -523,7 +524,7 @@ public class StatisticsServiceImpl implements IStatisticsService {
|
|
|
amount = new BigDecimal("0.00");
|
|
|
}
|
|
|
} else {
|
|
|
- if ("XS".equals(item.getBsType())){
|
|
|
+ if ("XS".equals(item.getBsType())) {
|
|
|
if (saleDetailDtoList.size() == 1 && number.compareTo(new BigDecimal(1)) <= 0) {
|
|
|
items.setSubTotalMoney(items.getSubTotalMoney().add(new BigDecimal("5.00")));
|
|
|
}
|
|
|
@@ -587,7 +588,7 @@ public class StatisticsServiceImpl implements IStatisticsService {
|
|
|
BigDecimal profitReturns = saleDetailDtoList.stream().filter(e -> "已完成".equals(e.getStatus()))
|
|
|
.map(SaleDetailDto::getProfit).reduce(BigDecimal.ZERO, BigDecimal::add)
|
|
|
.setScale(0, RoundingMode.HALF_UP);
|
|
|
- if ("TKXS".equals(saleDetailDto.getBsType()) || "TKGS".equals(saleDetailDto.getBsType())){
|
|
|
+ if ("TKXS".equals(saleDetailDto.getBsType()) || "TKGS".equals(saleDetailDto.getBsType())) {
|
|
|
map.put("goodsSum", new BigDecimal("0"));
|
|
|
map.put("amount", new BigDecimal("0"));
|
|
|
map.put("costprie", new BigDecimal("0"));
|
|
|
@@ -596,7 +597,7 @@ public class StatisticsServiceImpl implements IStatisticsService {
|
|
|
map.put("amountCancellation", subTotalMoneyCancel.subtract(subTotalMoneyReturns));
|
|
|
map.put("costprieCancellation", costprieCancel.subtract(costprieReturns));
|
|
|
map.put("profitCancellation", profitCancel.subtract(profitReturns));
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
map.put("goodsSum", goodsNumActual.add(goodsNumReturns));
|
|
|
map.put("amount", subTotalMoneyActual.add(subTotalMoneyReturns));
|
|
|
map.put("costprie", costprieActual.add(costprieReturns));
|
|
|
@@ -657,7 +658,7 @@ public class StatisticsServiceImpl implements IStatisticsService {
|
|
|
amount = new BigDecimal("0.00");
|
|
|
}
|
|
|
} else {
|
|
|
- if ("XS".equals(item.getBsType())){
|
|
|
+ if ("XS".equals(item.getBsType())) {
|
|
|
if (saleDetailDtoList.size() == 1 && number.compareTo(new BigDecimal(1)) <= 0) {
|
|
|
items.setSubTotalMoney(items.getSubTotalMoney().add(new BigDecimal("5.00")));
|
|
|
}
|
|
|
@@ -677,4 +678,345 @@ public class StatisticsServiceImpl implements IStatisticsService {
|
|
|
}
|
|
|
return saleDetailDtoIPage;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R<IPage<SalespersonCustomer>> salespersonCustomerDetail(SaleDetail saleDetailDto, IPage<SalespersonCustomer> page) {
|
|
|
+ saleDetailDto.setTenantId(AuthUtil.getTenantId());
|
|
|
+ saleDetailDto.setSalesCompanyId(AuthUtil.getDeptId());
|
|
|
+ IPage<SalespersonCustomer> customerIPage = orderService.salespersonCustomerDetail(saleDetailDto, page);
|
|
|
+ if (!customerIPage.getRecords().isEmpty()) {
|
|
|
+ List<Long> ids = customerIPage.getRecords().stream().map(SalespersonCustomer::getId).distinct().collect(Collectors.toList());
|
|
|
+ LambdaQueryWrapper<PjOrder> lambdaQueryWrapper = new LambdaQueryWrapper<PjOrder>()
|
|
|
+ .eq(PjOrder::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrder::getIsDeleted, 0)
|
|
|
+ .eq(PjOrder::getBsType, "XS")
|
|
|
+ .apply("find_in_set(status,'已发货,已收货,已取消,已退款,售后中,退款请核')")
|
|
|
+ .ge(ObjectUtils.isNotNull(saleDetailDto.getBusinesDateStart()), PjOrder::getBusinesDate, saleDetailDto.getBusinesDateStart())
|
|
|
+ .le(ObjectUtils.isNotNull(saleDetailDto.getBusinesDateEnd()), PjOrder::getBusinesDate, saleDetailDto.getBusinesDateEnd())
|
|
|
+ .eq(PjOrder::getSalesCompanyId, AuthUtil.getDeptId());
|
|
|
+ if ("1".equals(saleDetailDto.getBsType())) {
|
|
|
+ lambdaQueryWrapper.in(PjOrder::getCustomerId, ids);
|
|
|
+ } else {
|
|
|
+ lambdaQueryWrapper.in(PjOrder::getSalerId, ids);
|
|
|
+ }
|
|
|
+ List<PjOrder> orderList = orderService.list(lambdaQueryWrapper);
|
|
|
+ List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ List<Long> pids = orderList.stream().map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ pjOrderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .in(PjOrderItems::getPid, pids));
|
|
|
+ } else {
|
|
|
+ return R.data(customerIPage);
|
|
|
+ }
|
|
|
+ if (pjOrderItemsList.isEmpty()) {
|
|
|
+ return R.data(customerIPage);
|
|
|
+ }
|
|
|
+ for (SalespersonCustomer item : customerIPage.getRecords()) {
|
|
|
+ item.setReturnAmount(new BigDecimal("0.00"));
|
|
|
+ item.setReturnQuantity(new BigDecimal("0"));
|
|
|
+ item.setSalesAmount(new BigDecimal("0.00"));
|
|
|
+ item.setSalesQuantity(new BigDecimal("0"));
|
|
|
+ item.setSalesProfit(new BigDecimal("0.00"));
|
|
|
+ if ("1".equals(saleDetailDto.getBsType())) {
|
|
|
+ List<Long> ordersCorpR = orderList.stream().filter(e -> e.getCustomerId().equals(item.getId())
|
|
|
+ && "已取消,已退款,售后中,退款请核".contains(e.getStatus())).map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ List<Long> ordersCorpS = orderList.stream().filter(e -> e.getCustomerId().equals(item.getId())
|
|
|
+ && !"已取消,已退款,售后中,退款请核".contains(e.getStatus())).map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ if (!ordersCorpR.isEmpty()) {
|
|
|
+ item.setReturnAmount(new BigDecimal("0.00").subtract(pjOrderItemsList.stream().filter(e -> ordersCorpR.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)));
|
|
|
+ item.setReturnQuantity(new BigDecimal("0").subtract(pjOrderItemsList.stream().filter(e -> ordersCorpR.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(0, RoundingMode.HALF_UP)));
|
|
|
+ }
|
|
|
+ if (!ordersCorpS.isEmpty()) {
|
|
|
+ BigDecimal subTotalMoney = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal goodsNum = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal returnsNumber = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getReturnsNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal returnsAmount = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getReturnsAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ item.setReturnAmount(item.getReturnAmount().add(new BigDecimal("0.00").subtract(returnsAmount)));
|
|
|
+ item.setReturnQuantity(item.getReturnQuantity().add(new BigDecimal("0").subtract(returnsNumber)));
|
|
|
+ item.setSalesAmount(subTotalMoney.subtract(returnsAmount));
|
|
|
+ item.setSalesQuantity(goodsNum.subtract(returnsNumber));
|
|
|
+ BigDecimal costprie = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()) &&
|
|
|
+ (ObjectUtils.isNull(e.getReturnsNumber()) || new BigDecimal("0").compareTo(e.getReturnsNumber()) == 0))
|
|
|
+ .map(PjOrderItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ item.setSalesProfit(item.getSalesAmount().subtract(costprie));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ List<Long> ordersSalerR = orderList.stream().filter(e -> e.getSalerId().equals(item.getId())
|
|
|
+ && "已取消,已退款,售后中,退款请核".contains(e.getStatus())).map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ List<Long> ordersSalerS = orderList.stream().filter(e -> e.getSalerId().equals(item.getId())
|
|
|
+ && !"已取消,已退款,售后中,退款请核".contains(e.getStatus())).map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ if (!ordersSalerR.isEmpty()) {
|
|
|
+ item.setReturnAmount(new BigDecimal("0.00").subtract(pjOrderItemsList.stream().filter(e -> ordersSalerR.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)));
|
|
|
+ item.setReturnQuantity(new BigDecimal("0").subtract(pjOrderItemsList.stream().filter(e -> ordersSalerR.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getGoodsNum).filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(0, RoundingMode.HALF_UP)));
|
|
|
+ }
|
|
|
+ if (!ordersSalerS.isEmpty()) {
|
|
|
+ BigDecimal subTotalMoney = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal goodsNum = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal returnsNumber = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getReturnsNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal returnsAmount = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getReturnsAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ item.setReturnAmount(item.getReturnAmount().add(new BigDecimal("0.00").subtract(returnsAmount)));
|
|
|
+ item.setReturnQuantity(item.getReturnQuantity().add(new BigDecimal("0").subtract(returnsNumber)));
|
|
|
+ item.setSalesAmount(subTotalMoney.subtract(returnsAmount));
|
|
|
+ item.setSalesQuantity(goodsNum.subtract(returnsNumber));
|
|
|
+ BigDecimal costprie = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()) &&
|
|
|
+ (ObjectUtils.isNull(e.getReturnsNumber()) || new BigDecimal("0").compareTo(e.getReturnsNumber()) == 0))
|
|
|
+ .map(PjOrderItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ item.setSalesProfit(item.getSalesAmount().subtract(costprie));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.data(customerIPage);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R salespersonCustomerSum(SaleDetail saleDetailDto) {
|
|
|
+ Map<String, BigDecimal> map = new HashMap<>();
|
|
|
+ saleDetailDto.setTenantId(AuthUtil.getTenantId());
|
|
|
+ saleDetailDto.setSalesCompanyId(AuthUtil.getDeptId());
|
|
|
+ List<SalespersonCustomer> customerIPage = orderService.salespersonCustomerSum(saleDetailDto);
|
|
|
+ if (!customerIPage.isEmpty()) {
|
|
|
+ List<Long> ids = customerIPage.stream().map(SalespersonCustomer::getId).distinct().collect(Collectors.toList());
|
|
|
+ LambdaQueryWrapper<PjOrder> lambdaQueryWrapper = new LambdaQueryWrapper<PjOrder>()
|
|
|
+ .eq(PjOrder::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrder::getIsDeleted, 0)
|
|
|
+ .eq(PjOrder::getBsType, "XS")
|
|
|
+ .apply("find_in_set(status,'已发货,已收货,已取消,已退款,售后中,退款请核')")
|
|
|
+ .ge(ObjectUtils.isNotNull(saleDetailDto.getBusinesDateStart()), PjOrder::getBusinesDate, saleDetailDto.getBusinesDateStart())
|
|
|
+ .le(ObjectUtils.isNotNull(saleDetailDto.getBusinesDateEnd()), PjOrder::getBusinesDate, saleDetailDto.getBusinesDateEnd())
|
|
|
+ .eq(PjOrder::getSalesCompanyId, AuthUtil.getDeptId());
|
|
|
+ if ("1".equals(saleDetailDto.getBsType())) {
|
|
|
+ lambdaQueryWrapper.in(PjOrder::getCustomerId, ids);
|
|
|
+ } else {
|
|
|
+ lambdaQueryWrapper.in(PjOrder::getSalerId, ids);
|
|
|
+ }
|
|
|
+ List<PjOrder> orderList = orderService.list(lambdaQueryWrapper);
|
|
|
+ List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ List<Long> pids = orderList.stream().map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ pjOrderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .in(PjOrderItems::getPid, pids));
|
|
|
+ } else {
|
|
|
+ map.put("salesAmount", new BigDecimal("0.00"));
|
|
|
+ map.put("salesQuantity", new BigDecimal("0"));
|
|
|
+ map.put("returnAmount", new BigDecimal("0.00"));
|
|
|
+ map.put("returnQuantity", new BigDecimal("0"));
|
|
|
+ map.put("salesProfit", new BigDecimal("0.00"));
|
|
|
+ return R.data(map);
|
|
|
+ }
|
|
|
+ if (pjOrderItemsList.isEmpty()) {
|
|
|
+ map.put("salesAmount", new BigDecimal("0.00"));
|
|
|
+ map.put("salesQuantity", new BigDecimal("0"));
|
|
|
+ map.put("returnAmount", new BigDecimal("0.00"));
|
|
|
+ map.put("returnQuantity", new BigDecimal("0"));
|
|
|
+ map.put("salesProfit", new BigDecimal("0.00"));
|
|
|
+ return R.data(map);
|
|
|
+ }
|
|
|
+ for (SalespersonCustomer item : customerIPage) {
|
|
|
+ item.setReturnAmount(new BigDecimal("0.00"));
|
|
|
+ item.setReturnQuantity(new BigDecimal("0"));
|
|
|
+ item.setSalesAmount(new BigDecimal("0.00"));
|
|
|
+ item.setSalesQuantity(new BigDecimal("0"));
|
|
|
+ item.setSalesProfit(new BigDecimal("0.00"));
|
|
|
+ if ("1".equals(saleDetailDto.getBsType())) {
|
|
|
+ List<Long> ordersCorpR = orderList.stream().filter(e -> e.getCustomerId().equals(item.getId())
|
|
|
+ && "已取消,已退款,售后中,退款请核".contains(e.getStatus())).map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ List<Long> ordersCorpS = orderList.stream().filter(e -> e.getCustomerId().equals(item.getId())
|
|
|
+ && !"已取消,已退款,售后中,退款请核".contains(e.getStatus())).map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ if (!ordersCorpR.isEmpty()) {
|
|
|
+ item.setReturnAmount(new BigDecimal("0.00").subtract(pjOrderItemsList.stream().filter(e -> ordersCorpR.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)));
|
|
|
+ item.setReturnQuantity(new BigDecimal("0").subtract(pjOrderItemsList.stream().filter(e -> ordersCorpR.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getGoodsNum).filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add)));
|
|
|
+ }
|
|
|
+ if (!ordersCorpS.isEmpty()) {
|
|
|
+ BigDecimal subTotalMoney = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal goodsNum = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal returnsNumber = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getReturnsNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal returnsAmount = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getReturnsAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ item.setReturnAmount(item.getReturnAmount().add(new BigDecimal("0.00").subtract(returnsAmount)));
|
|
|
+ item.setReturnQuantity(item.getReturnQuantity().add(new BigDecimal("0").subtract(returnsNumber)));
|
|
|
+ item.setSalesAmount(subTotalMoney.subtract(returnsAmount));
|
|
|
+ item.setSalesQuantity(goodsNum.subtract(returnsNumber));
|
|
|
+ BigDecimal costprie = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()) &&
|
|
|
+ (ObjectUtils.isNull(e.getReturnsNumber()) || new BigDecimal("0").compareTo(e.getReturnsNumber()) == 0))
|
|
|
+ .map(PjOrderItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ item.setSalesProfit(item.getSalesAmount().subtract(costprie));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ List<Long> ordersSalerR = orderList.stream().filter(e -> e.getSalerId().equals(item.getId())
|
|
|
+ && "已取消,已退款,售后中,退款请核".contains(e.getStatus())).map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ List<Long> ordersSalerS = orderList.stream().filter(e -> e.getSalerId().equals(item.getId())
|
|
|
+ && !"已取消,已退款,售后中,退款请核".contains(e.getStatus())).map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ if (!ordersSalerR.isEmpty()) {
|
|
|
+ item.setReturnAmount(new BigDecimal("0.00").subtract(pjOrderItemsList.stream().filter(e -> ordersSalerR.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)));
|
|
|
+ item.setReturnQuantity(new BigDecimal("0").subtract(pjOrderItemsList.stream().filter(e -> ordersSalerR.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getGoodsNum).filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add)));
|
|
|
+ }
|
|
|
+ if (!ordersSalerS.isEmpty()) {
|
|
|
+ BigDecimal subTotalMoney = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal goodsNum = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal returnsNumber = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getReturnsNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal returnsAmount = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getReturnsAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ item.setReturnAmount(item.getReturnAmount().add(new BigDecimal("0.00").subtract(returnsAmount)));
|
|
|
+ item.setReturnQuantity(item.getReturnQuantity().add(new BigDecimal("0").subtract(returnsNumber)));
|
|
|
+ item.setSalesAmount(subTotalMoney.subtract(returnsAmount));
|
|
|
+ item.setSalesQuantity(goodsNum.subtract(returnsNumber));
|
|
|
+ BigDecimal costprie = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()) &&
|
|
|
+ (ObjectUtils.isNull(e.getReturnsNumber()) || new BigDecimal("0").compareTo(e.getReturnsNumber()) == 0))
|
|
|
+ .map(PjOrderItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ item.setSalesProfit(item.getSalesAmount().subtract(costprie));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!customerIPage.isEmpty()) {
|
|
|
+ map.put("salesAmount", customerIPage.stream().filter(Objects::nonNull).map(SalespersonCustomer::getSalesAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("salesQuantity", customerIPage.stream().filter(Objects::nonNull).map(SalespersonCustomer::getSalesQuantity).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(0, RoundingMode.HALF_UP));
|
|
|
+ map.put("returnAmount", customerIPage.stream().filter(Objects::nonNull).map(SalespersonCustomer::getReturnAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("returnQuantity", customerIPage.stream().filter(Objects::nonNull).map(SalespersonCustomer::getReturnQuantity).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(0, RoundingMode.HALF_UP));
|
|
|
+ map.put("salesProfit", customerIPage.stream().filter(Objects::nonNull).map(SalespersonCustomer::getSalesProfit).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ } else {
|
|
|
+ map.put("salesAmount", new BigDecimal("0.00"));
|
|
|
+ map.put("salesQuantity", new BigDecimal("0"));
|
|
|
+ map.put("returnAmount", new BigDecimal("0.00"));
|
|
|
+ map.put("returnQuantity", new BigDecimal("0"));
|
|
|
+ map.put("salesProfit", new BigDecimal("0.00"));
|
|
|
+ }
|
|
|
+ return R.data(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SalespersonCustomer> salespersonCustomerExport(SaleDetail saleDetailDto) {
|
|
|
+ saleDetailDto.setTenantId(AuthUtil.getTenantId());
|
|
|
+ saleDetailDto.setSalesCompanyId(AuthUtil.getDeptId());
|
|
|
+ List<SalespersonCustomer> customerIPage = orderService.salespersonCustomerSum(saleDetailDto);
|
|
|
+ if (!customerIPage.isEmpty()) {
|
|
|
+ List<Long> ids = customerIPage.stream().map(SalespersonCustomer::getId).distinct().collect(Collectors.toList());
|
|
|
+ LambdaQueryWrapper<PjOrder> lambdaQueryWrapper = new LambdaQueryWrapper<PjOrder>()
|
|
|
+ .eq(PjOrder::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(PjOrder::getIsDeleted, 0)
|
|
|
+ .eq(PjOrder::getBsType, "XS")
|
|
|
+ .apply("find_in_set(status,'已发货,已收货,已取消,已退款,售后中,退款请核')")
|
|
|
+ .ge(ObjectUtils.isNotNull(saleDetailDto.getBusinesDateStart()), PjOrder::getBusinesDate, saleDetailDto.getBusinesDateStart())
|
|
|
+ .le(ObjectUtils.isNotNull(saleDetailDto.getBusinesDateEnd()), PjOrder::getBusinesDate, saleDetailDto.getBusinesDateEnd())
|
|
|
+ .eq(PjOrder::getSalesCompanyId, AuthUtil.getDeptId());
|
|
|
+ if ("1".equals(saleDetailDto.getBsType())) {
|
|
|
+ lambdaQueryWrapper.in(PjOrder::getCustomerId, ids);
|
|
|
+ } else {
|
|
|
+ lambdaQueryWrapper.in(PjOrder::getSalerId, ids);
|
|
|
+ }
|
|
|
+ List<PjOrder> orderList = orderService.list(lambdaQueryWrapper);
|
|
|
+ List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
|
|
|
+ if (!orderList.isEmpty()) {
|
|
|
+ List<Long> pids = orderList.stream().map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ pjOrderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
|
|
|
+ .eq(PjOrderItems::getIsDeleted, 0)
|
|
|
+ .eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .in(PjOrderItems::getPid, pids));
|
|
|
+ } else {
|
|
|
+ return customerIPage;
|
|
|
+ }
|
|
|
+ if (pjOrderItemsList.isEmpty()) {
|
|
|
+ return customerIPage;
|
|
|
+ }
|
|
|
+ for (SalespersonCustomer item : customerIPage) {
|
|
|
+ item.setReturnAmount(new BigDecimal("0.00"));
|
|
|
+ item.setReturnQuantity(new BigDecimal("0"));
|
|
|
+ item.setSalesAmount(new BigDecimal("0.00"));
|
|
|
+ item.setSalesQuantity(new BigDecimal("0"));
|
|
|
+ item.setSalesProfit(new BigDecimal("0.00"));
|
|
|
+ if ("1".equals(saleDetailDto.getBsType())) {
|
|
|
+ List<Long> ordersCorpR = orderList.stream().filter(e -> e.getCustomerId().equals(item.getId())
|
|
|
+ && "已取消,已退款,售后中,退款请核".contains(e.getStatus())).map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ List<Long> ordersCorpS = orderList.stream().filter(e -> e.getCustomerId().equals(item.getId())
|
|
|
+ && !"已取消,已退款,售后中,退款请核".contains(e.getStatus())).map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ if (!ordersCorpR.isEmpty()) {
|
|
|
+ item.setReturnAmount(new BigDecimal("0.00").subtract(pjOrderItemsList.stream().filter(e -> ordersCorpR.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)));
|
|
|
+ item.setReturnQuantity(new BigDecimal("0").subtract(pjOrderItemsList.stream().filter(e -> ordersCorpR.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getGoodsNum).filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(0, RoundingMode.HALF_UP)));
|
|
|
+ }
|
|
|
+ if (!ordersCorpS.isEmpty()) {
|
|
|
+ BigDecimal subTotalMoney = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal goodsNum = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal returnsNumber = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getReturnsNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal returnsAmount = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getReturnsAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ item.setReturnAmount(item.getReturnAmount().add(new BigDecimal("0.00").subtract(returnsAmount)));
|
|
|
+ item.setReturnQuantity(item.getReturnQuantity().add(new BigDecimal("0").subtract(returnsNumber)));
|
|
|
+ item.setSalesAmount(subTotalMoney.subtract(returnsAmount));
|
|
|
+ item.setSalesQuantity(goodsNum.subtract(returnsNumber));
|
|
|
+ BigDecimal costprie = pjOrderItemsList.stream().filter(e -> ordersCorpS.contains(e.getPid()) &&
|
|
|
+ (ObjectUtils.isNull(e.getReturnsNumber()) || new BigDecimal("0").compareTo(e.getReturnsNumber()) == 0))
|
|
|
+ .map(PjOrderItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ item.setSalesProfit(item.getSalesAmount().subtract(costprie));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ List<Long> ordersSalerR = orderList.stream().filter(e -> e.getSalerId().equals(item.getId())
|
|
|
+ && "已取消,已退款,售后中,退款请核".contains(e.getStatus())).map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ List<Long> ordersSalerS = orderList.stream().filter(e -> e.getSalerId().equals(item.getId())
|
|
|
+ && !"已取消,已退款,售后中,退款请核".contains(e.getStatus())).map(PjOrder::getId).collect(Collectors.toList());
|
|
|
+ if (!ordersSalerR.isEmpty()) {
|
|
|
+ item.setReturnAmount(new BigDecimal("0.00").subtract(pjOrderItemsList.stream().filter(e -> ordersSalerR.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)));
|
|
|
+ item.setReturnQuantity(new BigDecimal("0").subtract(pjOrderItemsList.stream().filter(e -> ordersSalerR.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getGoodsNum).filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(0, RoundingMode.HALF_UP)));
|
|
|
+ }
|
|
|
+ if (!ordersSalerS.isEmpty()) {
|
|
|
+ BigDecimal subTotalMoney = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal goodsNum = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal returnsNumber = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getReturnsNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal returnsAmount = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()))
|
|
|
+ .map(PjOrderItems::getReturnsAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ item.setReturnAmount(item.getReturnAmount().add(new BigDecimal("0.00").subtract(returnsAmount)));
|
|
|
+ item.setReturnQuantity(item.getReturnQuantity().add(new BigDecimal("0").subtract(returnsNumber)));
|
|
|
+ item.setSalesAmount(subTotalMoney.subtract(returnsAmount));
|
|
|
+ item.setSalesQuantity(goodsNum.subtract(returnsNumber));
|
|
|
+ BigDecimal costprie = pjOrderItemsList.stream().filter(e -> ordersSalerS.contains(e.getPid()) &&
|
|
|
+ (ObjectUtils.isNull(e.getReturnsNumber()) || new BigDecimal("0").compareTo(e.getReturnsNumber()) == 0))
|
|
|
+ .map(PjOrderItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ item.setSalesProfit(item.getSalesAmount().subtract(costprie));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return customerIPage;
|
|
|
+ }
|
|
|
}
|