瀏覽代碼

采购订单列表增加统计数据

liyuan 2 周之前
父節點
當前提交
29bf8b8480

+ 5 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java

@@ -1487,4 +1487,9 @@ public class OrderController extends BladeController {
 		return orderService.closeOrder(order);
 	}
 
+	@PostMapping("/getExpenditurePrice")
+	public R<BigDecimal> getExpenditurePrice(PjOrder order) {
+		return orderService.getExpenditurePrice(order);
+	}
+
 }

+ 8 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/IOrderService.java

@@ -313,4 +313,12 @@ public interface IOrderService extends IService<PjOrder> {
 	 * @return 结果
 	 */
 	BigDecimal getPendingPaymentSum();
+
+	/**
+	 * 采购订单统计金额
+	 *
+	 * @param order 参数
+	 * @return 结果
+	 */
+	R<BigDecimal> getExpenditurePrice(PjOrder order);
 }

+ 51 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -4800,7 +4800,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		saleDetailDto.setSalesCompanyId(user.getDeptId());
 		saleDetailDto.setBusinesDateStart(startDate);
 		saleDetailDto.setBusinesDateEnd(endDate);
-		saleDetailDto.setIsContain("1");
+		saleDetailDto.setIsContain("0");
 		saleDetailDto.setBsType("XS,TKXS");
 		if (!userRoles.contains("admin") && !userRoles.contains("老板") && userRoles.contains("业务员")) {
 			saleDetailDto.setSalerName(String.valueOf(user.getUserId()));
@@ -4908,11 +4908,36 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		BigDecimal costprieCancel = saleDetailDtoList.stream().filter(e -> OrderStatusEnum.CANCELLED.value.equals(e.getStatus()))
 			.map(SaleDetailDto::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)
 			.setScale(0, RoundingMode.HALF_UP).abs();
+		// 已取消的毛利
+		BigDecimal profitCancel = saleDetailDtoList.stream().filter(e -> OrderStatusEnum.CANCELLED.value.equals(e.getStatus()))
+			.map(SaleDetailDto::getProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)
+			.setScale(0, RoundingMode.HALF_UP).abs();
+		// 毛利
+		BigDecimal profitActual = saleDetailDtoList.stream().filter(e -> !OrderStatusEnum.CANCELLED.value.equals(e.getStatus()) && !OrderStatusEnum.COMPLETED.value.equals(e.getStatus()))
+			.map(SaleDetailDto::getProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)
+			.setScale(0, RoundingMode.HALF_UP);
+
+		// 退货金额
+		BigDecimal subTotalMoneyReturns = saleDetailDtoList.stream().filter(e -> OrderStatusEnum.COMPLETED.value.equals(e.getStatus()))
+			.map(SaleDetailDto::getSubTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)
+			.setScale(0, RoundingMode.HALF_UP).abs();
+		// 退货成本金额
+		BigDecimal costprieReturns = saleDetailDtoList.stream().filter(e -> OrderStatusEnum.COMPLETED.value.equals(e.getStatus()))
+			.map(SaleDetailDto::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)
+			.setScale(0, RoundingMode.HALF_UP).abs();
+		// 退货毛利金额
+		BigDecimal profitReturns = saleDetailDtoList.stream().filter(e -> OrderStatusEnum.COMPLETED.value.equals(e.getStatus()))
+			.map(SaleDetailDto::getProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)
+			.setScale(0, RoundingMode.HALF_UP).abs();
+
 
 		long xsCount = saleDetailDtoList.stream().filter(e -> !OrderStatusEnum.COMPLETED.value.equals(e.getStatus()) && e.getBsType().equals("销售")).count();
 		appStatisticsVo.setIncome(subTotalMoneyActual.abs().add(subTotalMoneyCancel));
 		appStatisticsVo.setCost(costprieActual.abs().add(costprieCancel));
-		appStatisticsVo.setProfit(appStatisticsVo.getIncome().subtract(appStatisticsVo.getCost()));
+		appStatisticsVo.setProfit(profitActual.abs().add(profitCancel));
+		appStatisticsVo.setIncome(appStatisticsVo.getIncome().subtract(subTotalMoneyCancel.add(subTotalMoneyReturns)));
+		appStatisticsVo.setCost(appStatisticsVo.getCost().subtract(costprieCancel.add(costprieReturns)));
+		appStatisticsVo.setProfit(appStatisticsVo.getProfit().subtract(profitCancel.add(profitReturns)));
 		appStatisticsVo.setAverageAmount(appStatisticsVo.getIncome().divide(new BigDecimal(xsCount), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
 		appStatisticsVo.setExpenditure(expenditure == null ? BigDecimal.ZERO : expenditure.setScale(0, RoundingMode.DOWN));
 		return R.data(appStatisticsVo);
@@ -4937,6 +4962,30 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		return orderMapper.getPendingPaymentSum(AuthUtil.getTenantId());
 	}
 
+	@Override
+	public R<BigDecimal> getExpenditurePrice(PjOrder order) {
+		BladeUser bladeUser = AuthUtil.getUser();
+		SaleDetail saleDetail = new SaleDetail();
+		saleDetail.setTenantId(bladeUser.getTenantId());
+		String userRoles = AuthUtil.getUserRole();
+		saleDetail.setSalesCompanyId(bladeUser.getDeptId());
+		if (!userRoles.contains("admin") && !userRoles.contains("老板") && userRoles.contains("业务员")) {
+			saleDetail.setSalerName(String.valueOf(bladeUser.getUserId()));
+		}
+		if (!org.springframework.util.CollectionUtils.isEmpty(order.getBusinesDateList()) && order.getBusinesDateList().size() > 1) {
+			saleDetail.setBusinesDateStart(order.getBusinesDateList().get(0));
+			saleDetail.setBusinesDateEnd(order.getBusinesDateList().get(1));
+		} else {
+			DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+			YearMonth currentMonth = YearMonth.now();
+			LocalDate firstDay = currentMonth.atDay(1);
+			LocalDate lastDay = currentMonth.atEndOfMonth();
+			saleDetail.setBusinesDateStart(firstDay.format(formatter));
+			saleDetail.setBusinesDateEnd(lastDay.format(formatter));
+		}
+		return R.data(orderMapper.expenditureSum(saleDetail));
+	}
+
 	/**
 	 * 保存订单信息
 	 */