店员业绩

This commit is contained in:
admin
2024-06-16 13:14:46 +08:00
parent ea34e8c630
commit 4daabf1ea2
20 changed files with 512 additions and 83 deletions

View File

@@ -19,8 +19,14 @@ import com.starry.admin.modules.order.module.vo.PlayOrderEvaluateQueryVo;
import com.starry.admin.modules.order.module.vo.PlayOrderStateEditVo;
import com.starry.admin.modules.order.service.IPlayOrderEvaluateInfoService;
import com.starry.admin.modules.order.service.IPlayOrderInfoService;
import com.starry.admin.modules.personnel.module.entity.PlayPersonnelGroupInfoEntity;
import com.starry.admin.modules.personnel.service.IPlayPersonnelGroupInfoService;
import com.starry.admin.modules.statistics.service.IPlayClerkPerformanceService;
import com.starry.admin.modules.weichat.entity.*;
import com.starry.admin.modules.weichat.entity.clerk.*;
import com.starry.admin.modules.weichat.entity.clerk.PlayClerkLevelAndRankingVo;
import com.starry.admin.modules.weichat.entity.clerk.PlayClerkLevelInfoReturnVo;
import com.starry.admin.modules.weichat.entity.clerk.PlayClerkUserInfoQueryVo;
import com.starry.admin.modules.weichat.entity.clerk.PlayClerkUserInfoResultVo;
import com.starry.admin.modules.weichat.entity.gift.PlayClerkGiftReturnVo;
import com.starry.admin.modules.weichat.entity.order.PlayClerkOrderDetailsReturnVo;
import com.starry.admin.modules.weichat.entity.order.PlayClerkOrderInfoQueryVo;
@@ -36,9 +42,11 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
@@ -87,61 +95,24 @@ public class WxClerkController {
@Resource
private IPlayGiftInfoService giftInfoService;
@Resource
private IPlayClerkPerformanceService playClerkPerformanceService;
@Resource
private IPlayPersonnelGroupInfoService playPersonnelGroupInfoService;
/**
* 店员获取个人业绩信息
*/
@ClerkUserLogin
@PostMapping("/user/queryPerformanceInfo")
public R queryPerformanceInfo(@Validated @RequestBody PlayClerkPerformanceInfoQueryVo vo) {
public R queryPerformanceInfo(@Validated @RequestBody PlayClerkWxPerformanceInfoQueryVo vo) {
PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(ThreadLocalRequestDetail.getClerkUserInfo().getId());
PlayClerkLevelInfoEntity level = playClerkLevelInfoService.selectPlayClerkLevelInfoById(entity.getLevelId());
List<PlayClerkLevelInfoEntity> clerkLevelInfoEntity = playClerkLevelInfoService.selectAll();
List<PlayOrderInfoEntity> orderInfoEntities = playOrderInfoService.clerkSelectOrderInfoList(entity.getId(), vo.getStartTime(), vo.getEndTime());
Set<String> customIds = new HashSet<>();
int orderContinueNumber = 0;
int orderRefundNumber = 0;
int ordersExpiredNumber = 0;
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 : orderInfoEntities) {
customIds.add(orderInfoEntity.getPurchaserBy());
finalAmount = finalAmount.add(orderInfoEntity.getFinalAmount());
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.setClerkId(ThreadLocalRequestDetail.getClerkUserInfo().getId());
returnVo.setLevelName(level.getName());
returnVo.setOrderNumber(orderInfoEntities.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);
return R.ok(returnVo);
List<PlayPersonnelGroupInfoEntity> groupInfoEntities = playPersonnelGroupInfoService.selectAll();
return R.ok(playClerkPerformanceService.getClerkPerformanceInfo(entity, orderInfoEntities, clerkLevelInfoEntity, groupInfoEntities));
}

View File

@@ -0,0 +1,28 @@
package com.starry.admin.modules.weichat.entity;
import lombok.Data;
/**
* @author admin
* @since 2024/6/10 下午8:58
**/
@Data
public class PlayClerkWxPerformanceInfoQueryVo {
/**
* 店员ID
*/
private String clerkId;
/**
* 订单开始时间
*/
private String startTime;
/**
* 订单结束时间
*/
private String endTime;
}

View File

@@ -1,23 +0,0 @@
package com.starry.admin.modules.weichat.entity.clerk;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
/**
* @author admin
* @since 2024/6/10 下午8:58
**/
@Data
public class PlayClerkPerformanceInfoQueryVo {
private String clerkId;
private String startTime;
private String endTime;
}

View File

@@ -1,107 +0,0 @@
package com.starry.admin.modules.weichat.entity.clerk;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author admin
* @since 2024/6/10 下午8:58
**/
@Data
public class PlayClerkPerformanceInfoReturnVo {
/**
* 店员ID
*/
private String clerkId;
/**
* 分组名称
*/
private String groupName = "分组1";
/**
* 分组名称
*/
private String levelName = "金牌";
/**
* 在线时长
*/
private Integer onlineDuration = 0;
/**
* 订单总数
*/
private Integer orderNumber = 0;
/**
* 首单数
*/
private Integer orderFirstNumber = 0;
/**
* 续单数
*/
private Integer orderContinueNumber = 0;
/**
* 退款单数
*/
private Integer orderRefundNumber = 0;
/**
* 超时未接单数
*/
private Integer ordersExpiredNumber = 0;
/**
* 订单金额
*/
private BigDecimal finalAmount = BigDecimal.ZERO;
/**
* 首单金额
*/
private BigDecimal orderFirstAmount = BigDecimal.ZERO;
/**
* 续单金额
*/
private BigDecimal orderTotalAmount = BigDecimal.ZERO;
/**
* 打赏金额
*/
private BigDecimal orderRewardAmount = BigDecimal.ZERO;
/**
* 退款金额
*/
private BigDecimal orderRefundAmount = BigDecimal.ZERO;
/**
* 用户数
*/
private Integer customNumber = 0;
/**
* 连续用户数
*/
private final Integer continuousCustomNumber = 0;
/**
* 续单比例
*/
private final BigDecimal orderContinueProportion = BigDecimal.ZERO;
/**
* 订单平均价格
*/
private final BigDecimal averageUnitPrice = BigDecimal.ZERO;
/**
* 续费率
*/
private BigDecimal orderContinueRechargeProportion = BigDecimal.ZERO;
/**
* 退单率
*/
private BigDecimal orderChargebackProportion = BigDecimal.ZERO;
/**
* 续客率
*/
private BigDecimal continuousCustomProportion = BigDecimal.ZERO;
/**
* 店员预计收入
*/
private BigDecimal estimatedRevenue = BigDecimal.ZERO;
}