This commit is contained in:
admin
2024-06-30 23:16:38 +08:00
parent 954326abcc
commit 3ef6e4f123
3 changed files with 130 additions and 26 deletions

View File

@@ -276,7 +276,7 @@ public class PlayOrderInfoServiceImpl extends ServiceImpl<PlayOrderInfoMapper, P
if (StrUtil.isNotEmpty(clerkId)) { if (StrUtil.isNotEmpty(clerkId)) {
lambdaQueryWrapper.eq(PlayOrderInfoEntity::getAcceptBy, clerkId); lambdaQueryWrapper.eq(PlayOrderInfoEntity::getAcceptBy, clerkId);
} }
if (orderStatus != null) { if (orderStatus != null && !orderStatus.isEmpty()) {
lambdaQueryWrapper.in(PlayOrderInfoEntity::getOrderStatus, orderStatus); lambdaQueryWrapper.in(PlayOrderInfoEntity::getOrderStatus, orderStatus);
} }
lambdaQueryWrapper.between(PlayOrderInfoEntity::getPurchaserTime, startTime, endTime); lambdaQueryWrapper.between(PlayOrderInfoEntity::getPurchaserTime, startTime, endTime);

View File

@@ -21,11 +21,11 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* 店员业绩查询对 * 店员业绩查询对
@@ -70,18 +70,41 @@ public class PlayClerkPerformanceController {
@PostMapping("/listByTime") @PostMapping("/listByTime")
public R listByTime(@Validated @RequestBody PlayClerkPerformanceInfoQueryVo vo) { public R listByTime(@Validated @RequestBody PlayClerkPerformanceInfoQueryVo vo) {
vo.getEndOrderTime().get(1);
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//时间范围 //时间范围
List<String> dates = getDateRange(vo.getEndOrderTime().get(0), vo.getEndOrderTime().get(1)); List<String> dates = getDateRangeByDay(vo.getEndOrderTime().get(0), vo.getEndOrderTime().get(1));
//指定时间内所有订单 //指定时间内所有订单
List<PlayOrderInfoEntity> orderInfoEntities = playOrderInfoService.listByTime("", vo.getEndOrderTime().get(0), vo.getEndOrderTime().get(1), Stream.of("2", "3").collect(Collectors.toList())); // List<PlayOrderInfoEntity> orderInfoEntities = playOrderInfoService.listByTime("", vo.getEndOrderTime().get(0), vo.getEndOrderTime().get(1), Stream.of("2", "3").collect(Collectors.toList()));
List<PlayOrderInfoEntity> orderInfoEntities = playOrderInfoService.listByTime("", vo.getEndOrderTime().get(0), vo.getEndOrderTime().get(1), new ArrayList<>());
List<PlayClerkPerformanceInfoReturnVo> orders = new ArrayList<>(dates.size()); List<PlayClerkPerformanceInfoReturnVo> orders = new ArrayList<>(dates.size());
for (String date : dates) { for (String date : dates) {
orders.add(getPerformanceInfo(date, orderInfoEntities)); orders.add(getPerformanceInfo(date, orderInfoEntities));
} }
Map<String, Object> resultMap = new HashMap<>(orders.size()); Map<String, Object> resultMap = new HashMap<>(orders.size());
resultMap.put("dates", dates); resultMap.put("dates", dates);
resultMap.put("orderToTal", getTotalInfo(orderInfoEntities));
resultMap.put("list", orders);
return R.ok(resultMap);
}
@PostMapping("/listByMonth")
public R listByMonth(@Validated @RequestBody PlayClerkPerformanceInfoQueryVo vo) {
String startTime = LocalDate.of(Integer.parseInt(vo.getEndOrderTime().get(0).split("-")[0]), Integer.parseInt(vo.getEndOrderTime().get(0).split("-")[1]), 1).toString() + " 00:00:00";
LocalDate endDate = LocalDate.of(Integer.parseInt(vo.getEndOrderTime().get(1).split("-")[0]), Integer.parseInt(vo.getEndOrderTime().get(1).split("-")[1]), 1);
String endTime = endDate.with(TemporalAdjusters.lastDayOfMonth()) + " 23:59:59";
List<String> dates = getDateRangeByMonth(startTime, endTime);
//指定时间内所有订单
// List<PlayOrderInfoEntity> orderInfoEntities = playOrderInfoService.listByTime("", startTime, endTime, Stream.of("4").collect(Collectors.toList()));
List<PlayOrderInfoEntity> orderInfoEntities = playOrderInfoService.listByTime("", startTime, endTime, new ArrayList<>());
List<PlayClerkPerformanceInfoReturnVo> orders = new ArrayList<>(dates.size());
for (String date : dates) {
orders.add(getPerformanceInfo(date, orderInfoEntities));
}
Map<String, Object> resultMap = new HashMap<>(orders.size());
resultMap.put("dates", dates);
resultMap.put("orderToTal", getTotalInfo(orderInfoEntities));
resultMap.put("list", orders); resultMap.put("list", orders);
return R.ok(resultMap); return R.ok(resultMap);
} }
@@ -94,7 +117,7 @@ public class PlayClerkPerformanceController {
* @param endTime 结束时间 * @param endTime 结束时间
* @return 时间范围 * @return 时间范围
*/ */
public List<String> getDateRange(String startTime, String endTime) { public List<String> getDateRangeByDay(String startTime, String endTime) {
List<String> dates = new ArrayList<>(); List<String> dates = new ArrayList<>();
LocalDateTime date1 = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); LocalDateTime date1 = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime date2 = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); LocalDateTime date2 = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
@@ -107,40 +130,41 @@ public class PlayClerkPerformanceController {
} }
/** /**
* 组装统计数据 * 根据订单开始时间和结束时间,组装订单统计信息的查询时间范围
* *
* @param performanceDate 统计时间 * @param startTime 开始时间
* @param orderInfoEntities 订单列表 * @param endTime 结束时间
* @return 统计数据 * @return 时间范围
*/ */
public List<String> getDateRangeByMonth(String startTime, String endTime) {
List<String> dates = new ArrayList<>();
LocalDateTime date1 = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime date2 = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
while (!date1.isAfter(date2)) {
dates.add(date1.getYear() + "-" + date1.getMonthValue());
date1 = date1.plusMonths(1);
public PlayClerkPerformanceInfoReturnVo getPerformanceInfo(String performanceDate, List<PlayOrderInfoEntity> orderInfoEntities) {
PlayClerkPerformanceInfoReturnVo vo = new PlayClerkPerformanceInfoReturnVo();
vo.setPerformanceDate(performanceDate);
List<PlayOrderInfoEntity> itemOrderInfo = new ArrayList<>();
for (PlayOrderInfoEntity orderInfoEntity : orderInfoEntities) {
//接单时间,在指定日期的 00:00:00点到23:5959之间
if (orderInfoEntity.getPurchaserTime().isAfter(LocalDateTime.parse(performanceDate + " 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))) && orderInfoEntity.getPurchaserTime().isBefore(LocalDateTime.parse(performanceDate + " 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))) {
itemOrderInfo.add(orderInfoEntity);
} }
return dates;
} }
public PlayClerkPerformanceInfoReturnVo getTotalInfo(List<PlayOrderInfoEntity> orderInfoEntities) {
Set<String> customIds = new HashSet<>(); Set<String> customIds = new HashSet<>();
int orderContinueNumber = 0; int orderContinueNumber = 0;
int orderRefundNumber = 0; int orderRefundNumber = 0;
int ordersExpiredNumber = 0; int ordersExpiredNumber = 0;
BigDecimal orderMoney = BigDecimal.ZERO;
BigDecimal finalAmount = BigDecimal.ZERO; BigDecimal finalAmount = BigDecimal.ZERO;
BigDecimal orderFirstAmount = BigDecimal.ZERO; BigDecimal orderFirstAmount = BigDecimal.ZERO;
BigDecimal orderTotalAmount = BigDecimal.ZERO; BigDecimal orderTotalAmount = BigDecimal.ZERO;
BigDecimal orderRewardAmount = BigDecimal.ZERO; BigDecimal orderRewardAmount = BigDecimal.ZERO;
BigDecimal orderRefundAmount = BigDecimal.ZERO; BigDecimal orderRefundAmount = BigDecimal.ZERO;
BigDecimal estimatedRevenue = BigDecimal.ZERO; BigDecimal estimatedRevenue = BigDecimal.ZERO;
for (PlayOrderInfoEntity orderInfoEntity : itemOrderInfo) { for (PlayOrderInfoEntity orderInfoEntity : orderInfoEntities) {
customIds.add(orderInfoEntity.getPurchaserBy()); customIds.add(orderInfoEntity.getPurchaserBy());
finalAmount = finalAmount.add(orderInfoEntity.getFinalAmount()); finalAmount = finalAmount.add(orderInfoEntity.getFinalAmount());
orderMoney = orderMoney.add(orderInfoEntity.getOrderMoney());
if ("1".equals(orderInfoEntity.getFirstOrder())) { if ("1".equals(orderInfoEntity.getFirstOrder())) {
orderFirstAmount = orderFirstAmount.add(orderInfoEntity.getFinalAmount()); orderFirstAmount = orderFirstAmount.add(orderInfoEntity.getFinalAmount());
} else { } else {
@@ -159,7 +183,6 @@ public class PlayClerkPerformanceController {
} }
} }
PlayClerkPerformanceInfoReturnVo returnVo = new PlayClerkPerformanceInfoReturnVo(); PlayClerkPerformanceInfoReturnVo returnVo = new PlayClerkPerformanceInfoReturnVo();
returnVo.setOrderNumber(orderInfoEntities.size()); returnVo.setOrderNumber(orderInfoEntities.size());
returnVo.setOrderContinueNumber(orderContinueNumber); returnVo.setOrderContinueNumber(orderContinueNumber);
returnVo.setOrderRefundNumber(orderRefundNumber); returnVo.setOrderRefundNumber(orderRefundNumber);
@@ -171,6 +194,76 @@ public class PlayClerkPerformanceController {
returnVo.setOrderRefundAmount(orderRefundAmount); returnVo.setOrderRefundAmount(orderRefundAmount);
returnVo.setCustomNumber(customIds.size()); returnVo.setCustomNumber(customIds.size());
returnVo.setEstimatedRevenue(estimatedRevenue); returnVo.setEstimatedRevenue(estimatedRevenue);
returnVo.setOrderMoney(estimatedRevenue);
return returnVo;
}
/**
* 组装统计数据
*
* @param performanceDate 统计时间
* @param orderInfoEntities 订单列表
* @return 统计数据
*/
public PlayClerkPerformanceInfoReturnVo getPerformanceInfo(String performanceDate, List<PlayOrderInfoEntity> orderInfoEntities) {
List<PlayOrderInfoEntity> itemOrderInfo = new ArrayList<>();
for (PlayOrderInfoEntity orderInfoEntity : orderInfoEntities) {
//接单时间,在指定日期的 00:00:00点到23:5959之间
if (orderInfoEntity.getPurchaserTime().isAfter(LocalDateTime.parse(performanceDate + " 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))) && orderInfoEntity.getPurchaserTime().isBefore(LocalDateTime.parse(performanceDate + " 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))) {
itemOrderInfo.add(orderInfoEntity);
}
}
Set<String> customIds = new HashSet<>();
int orderContinueNumber = 0;
int orderRefundNumber = 0;
int ordersExpiredNumber = 0;
BigDecimal orderMoney = BigDecimal.ZERO;
BigDecimal finalAmount = BigDecimal.ZERO;
BigDecimal orderFirstAmount = BigDecimal.ZERO;
BigDecimal orderTotalAmount = BigDecimal.ZERO;
BigDecimal orderRewardAmount = BigDecimal.ZERO;
BigDecimal orderRefundAmount = BigDecimal.ZERO;
BigDecimal estimatedRevenue = BigDecimal.ZERO;
for (PlayOrderInfoEntity orderInfoEntity : itemOrderInfo) {
customIds.add(orderInfoEntity.getPurchaserBy());
finalAmount = finalAmount.add(orderInfoEntity.getFinalAmount());
orderMoney = orderMoney.add(orderInfoEntity.getOrderMoney());
if ("1".equals(orderInfoEntity.getFirstOrder())) {
orderFirstAmount = orderFirstAmount.add(orderInfoEntity.getFinalAmount());
} else {
orderContinueNumber++;
orderTotalAmount = orderTotalAmount.add(orderInfoEntity.getFinalAmount());
}
if ("2".equals(orderInfoEntity.getPlaceType())) {
orderRewardAmount = orderRewardAmount.add(orderInfoEntity.getFinalAmount());
}
if ("1".equals(orderInfoEntity.getRefundType())) {
orderRefundNumber++;
orderRefundAmount = orderRefundAmount.add(orderInfoEntity.getRefundAmount());
}
if ("1".equals(orderInfoEntity.getOrdersExpiredState())) {
ordersExpiredNumber++;
}
}
PlayClerkPerformanceInfoReturnVo returnVo = new PlayClerkPerformanceInfoReturnVo();
returnVo.setPerformanceDate(performanceDate);
returnVo.setOrderNumber(itemOrderInfo.size());
returnVo.setOrderContinueNumber(orderContinueNumber);
returnVo.setOrderRefundNumber(orderRefundNumber);
returnVo.setOrdersExpiredNumber(ordersExpiredNumber);
returnVo.setFinalAmount(finalAmount);
returnVo.setOrderFirstAmount(orderFirstAmount);
returnVo.setOrderTotalAmount(orderTotalAmount);
returnVo.setOrderRewardAmount(orderRewardAmount);
returnVo.setOrderRefundAmount(orderRefundAmount);
returnVo.setCustomNumber(customIds.size());
returnVo.setEstimatedRevenue(estimatedRevenue);
returnVo.setOrderMoney(estimatedRevenue);
return returnVo; return returnVo;
} }

View File

@@ -58,10 +58,21 @@ public class PlayClerkPerformanceInfoReturnVo {
* 超时未接单数 * 超时未接单数
*/ */
private Integer ordersExpiredNumber = 0; private Integer ordersExpiredNumber = 0;
/** /**
* 订单金额 * 订单金额
*/ */
private BigDecimal orderMoney;
/**
* 订单最终金额(支付金额)
*/
private BigDecimal finalAmount = BigDecimal.ZERO; private BigDecimal finalAmount = BigDecimal.ZERO;
/**
* 充值金额
*/
private BigDecimal rechargeAmount = BigDecimal.ZERO;
/** /**
* 首单金额 * 首单金额
*/ */