店员业绩
This commit is contained in:
@@ -50,7 +50,7 @@ public class PlayClerkUserInfoEntity extends BaseEntity<PlayClerkUserInfoEntity>
|
||||
/**
|
||||
* 陪聊用户ID
|
||||
*/
|
||||
private String playUserId;
|
||||
private String sysUserId;
|
||||
|
||||
/**
|
||||
* 用户的标识,对当前公众号唯一
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.starry.admin.modules.clerk.module.entity.PlayClerkUserQueryVo;
|
||||
import com.starry.admin.modules.clerk.module.entity.PlayClerkUserReturnVo;
|
||||
import com.starry.admin.modules.clerk.module.vo.PlayClerkUnsettledWagesInfoQueryVo;
|
||||
import com.starry.admin.modules.clerk.module.vo.PlayClerkUnsettledWagesInfoReturnVo;
|
||||
import com.starry.admin.modules.statistics.module.vo.PlayClerkPerformanceInfoQueryVo;
|
||||
import com.starry.admin.modules.weichat.entity.PlayClerkUserLoginResponseVo;
|
||||
import com.starry.admin.modules.weichat.entity.clerk.PlayClerkUserInfoQueryVo;
|
||||
import com.starry.admin.modules.weichat.entity.clerk.PlayClerkUserInfoResultVo;
|
||||
@@ -25,6 +26,12 @@ import java.util.List;
|
||||
public interface IPlayClerkUserInfoService extends IService<PlayClerkUserInfoEntity> {
|
||||
|
||||
|
||||
/**
|
||||
* 根据分组ID查询店员列表
|
||||
*
|
||||
* @param groupId 分组ID
|
||||
* @return 店员列表
|
||||
*/
|
||||
List<PlayClerkUserInfoEntity> selecyByGroupId(String groupId);
|
||||
/**
|
||||
* 查询当前租户店员总数
|
||||
@@ -125,6 +132,17 @@ public interface IPlayClerkUserInfoService extends IService<PlayClerkUserInfoEnt
|
||||
*/
|
||||
IPage<PlayClerkUnsettledWagesInfoReturnVo> listUnsettledWagesByPage(PlayClerkUnsettledWagesInfoQueryVo vo);
|
||||
|
||||
|
||||
/**
|
||||
* 管理端分页查询店员信息
|
||||
*
|
||||
* @param vo 店员查询实体
|
||||
* @return 店员列表
|
||||
*/
|
||||
|
||||
IPage<PlayClerkUserInfoEntity> selectByPage(PlayClerkPerformanceInfoQueryVo vo);
|
||||
|
||||
|
||||
/**
|
||||
* 管理端分页查询店员信息
|
||||
*
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.starry.admin.modules.follow.module.entity.PlayCustomFollowInfoEntity;
|
||||
import com.starry.admin.modules.follow.service.IPlayCustomFollowInfoService;
|
||||
import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
|
||||
import com.starry.admin.modules.order.service.IPlayOrderInfoService;
|
||||
import com.starry.admin.modules.statistics.module.vo.PlayClerkPerformanceInfoQueryVo;
|
||||
import com.starry.admin.modules.weichat.entity.PlayClerkUserLoginResponseVo;
|
||||
import com.starry.admin.modules.weichat.entity.clerk.PlayClerkUserInfoQueryVo;
|
||||
import com.starry.admin.modules.weichat.entity.clerk.PlayClerkUserInfoResultVo;
|
||||
@@ -260,6 +261,24 @@ public class PlayClerkUserInfoServiceImpl extends ServiceImpl<PlayClerkUserInfoM
|
||||
return this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayClerkUnsettledWagesInfoReturnVo.class, lambdaQueryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<PlayClerkUserInfoEntity> selectByPage(PlayClerkPerformanceInfoQueryVo vo) {
|
||||
LambdaQueryWrapper<PlayClerkUserInfoEntity> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
if (StrUtil.isNotBlank(vo.getClerkId())) {
|
||||
lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getId, vo.getClerkId());
|
||||
}
|
||||
if (StrUtil.isNotBlank(vo.getGroupId())) {
|
||||
lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getGroupId, vo.getGroupId());
|
||||
}
|
||||
if (StrUtil.isNotBlank(vo.getSex())) {
|
||||
lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getSex, vo.getSex());
|
||||
}
|
||||
if (StrUtil.isNotBlank(vo.getListingState())) {
|
||||
lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getListingState, vo.getListingState());
|
||||
}
|
||||
return this.baseMapper.selectPage(new Page<>(vo.getPageNum(), vo.getPageSize()), lambdaQueryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<PlayClerkUserReturnVo> selectByPage(PlayClerkUserQueryVo vo) {
|
||||
MPJLambdaWrapper<PlayClerkUserInfoEntity> lambdaQueryWrapper = new MPJLambdaWrapper<>();
|
||||
@@ -271,9 +290,6 @@ public class PlayClerkUserInfoServiceImpl extends ServiceImpl<PlayClerkUserInfoM
|
||||
if (StrUtil.isNotBlank(vo.getNickname())) {
|
||||
lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getNickname, vo.getNickname());
|
||||
}
|
||||
if (StrUtil.isNotBlank(vo.getNickname())) {
|
||||
lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getNickname, vo.getNickname());
|
||||
}
|
||||
if (StrUtil.isNotBlank(vo.getPhone())) {
|
||||
lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getPhone, vo.getPhone());
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.starry.admin.modules.personnel.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.starry.admin.modules.personnel.module.vo.PlayPersonnelUserInfoQueryVo;
|
||||
import com.starry.admin.modules.personnel.module.vo.PlayPersonnelUserInfoReturnVo;
|
||||
import com.starry.admin.modules.system.service.SysUserService;
|
||||
import com.starry.common.result.R;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 管理员管理Controller
|
||||
*
|
||||
* @author admin
|
||||
* @since 2024-06-14
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/personnel/user")
|
||||
public class PlayPersonnelUserInfoController {
|
||||
|
||||
@Resource
|
||||
private SysUserService sysUserService;
|
||||
|
||||
|
||||
/**
|
||||
* 查询管理员管理信息列表
|
||||
*/
|
||||
@PostMapping("/listByPage")
|
||||
public R listByPage(@Validated @RequestBody PlayPersonnelUserInfoQueryVo vo) {
|
||||
IPage<PlayPersonnelUserInfoReturnVo> list = sysUserService.selectByPage(vo);
|
||||
return R.ok(list);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.starry.admin.modules.personnel.module.vo;
|
||||
|
||||
import com.starry.common.domain.BasePageEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author admin
|
||||
* @since 2024/6/15 下午9:42
|
||||
**/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class PlayPersonnelUserInfoQueryVo extends BasePageEntity {
|
||||
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
private String sysUserId;
|
||||
|
||||
|
||||
/**
|
||||
* 用户名称
|
||||
*/
|
||||
private String userCode;
|
||||
|
||||
/**
|
||||
* 角色类型[0:用户;1:店员;2:组长]
|
||||
*/
|
||||
private String ruleType;
|
||||
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
private String userId;
|
||||
|
||||
|
||||
private List<String> addTime;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.starry.admin.modules.personnel.module.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author admin
|
||||
* @since 2024/6/15 下午9:42
|
||||
**/
|
||||
@Data
|
||||
public class PlayPersonnelUserInfoReturnVo {
|
||||
/**
|
||||
* 店员ID
|
||||
*/
|
||||
private String clerkId;
|
||||
|
||||
/**
|
||||
* 店员昵称
|
||||
*/
|
||||
private String clerkNickname;
|
||||
|
||||
/**
|
||||
* 店员头像
|
||||
*/
|
||||
private String clerkAvatar;
|
||||
|
||||
private String userId;
|
||||
|
||||
private String userCode;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private String addTime;
|
||||
}
|
||||
@@ -6,6 +6,8 @@ import com.starry.admin.modules.personnel.module.entity.PlayPersonnelGroupInfoEn
|
||||
import com.starry.admin.modules.personnel.module.vo.PlayPersonnelGroupInfoQueryVo;
|
||||
import com.starry.admin.modules.personnel.module.vo.PlayPersonnelGroupInfoReturnVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 店员分组信息Service接口
|
||||
*
|
||||
@@ -21,6 +23,16 @@ public interface IPlayPersonnelGroupInfoService extends IService<PlayPersonnelGr
|
||||
*/
|
||||
PlayPersonnelGroupInfoEntity selectPlayClerkGroupInfoById(String id);
|
||||
|
||||
|
||||
/**
|
||||
* 查询店员分组信息列表
|
||||
*
|
||||
* @return PlayPersonnelGroupInfoReturnVo
|
||||
* @author 杭州世平信息科技有限公司-xuhq
|
||||
* @since 2024/6/14 15:46
|
||||
**/
|
||||
List<PlayPersonnelGroupInfoEntity> selectAll();
|
||||
|
||||
/**
|
||||
* 分页查询店员分组信息列表
|
||||
*
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.starry.admin.modules.personnel.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
@@ -15,6 +16,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 店员分组信息Service业务层处理
|
||||
@@ -38,6 +40,10 @@ public class PlayPersonnelGroupInfoServiceImpl extends ServiceImpl<PlayPersonnel
|
||||
return this.baseMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PlayPersonnelGroupInfoEntity> selectAll() {
|
||||
return this.baseMapper.selectList(new LambdaQueryWrapper<>());
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<PlayPersonnelGroupInfoReturnVo> selectByPage(PlayPersonnelGroupInfoQueryVo vo) {
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.starry.admin.modules.statistics.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.starry.admin.modules.clerk.module.entity.PlayClerkLevelInfoEntity;
|
||||
import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity;
|
||||
import com.starry.admin.modules.clerk.service.IPlayClerkLevelInfoService;
|
||||
import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService;
|
||||
import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
|
||||
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.module.vo.PlayClerkPerformanceInfoQueryVo;
|
||||
import com.starry.admin.modules.statistics.module.vo.PlayClerkPerformanceInfoReturnVo;
|
||||
import com.starry.admin.modules.statistics.service.IPlayClerkPerformanceService;
|
||||
import com.starry.common.result.R;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 店员业绩查询对
|
||||
*
|
||||
* @author admin
|
||||
* @since 2024/6/15 下午3:15
|
||||
**/
|
||||
@RestController
|
||||
@RequestMapping("/statistics/performance")
|
||||
public class PlayClerkPerformanceController {
|
||||
|
||||
@Resource
|
||||
private IPlayClerkUserInfoService clerkUserInfoService;
|
||||
|
||||
@Resource
|
||||
private IPlayOrderInfoService playOrderInfoService;
|
||||
|
||||
@Resource
|
||||
private IPlayClerkLevelInfoService playClerkLevelInfoService;
|
||||
|
||||
@Resource
|
||||
private IPlayPersonnelGroupInfoService playPersonnelGroupInfoService;
|
||||
|
||||
@Resource
|
||||
private IPlayClerkPerformanceService playClerkPerformanceService;
|
||||
|
||||
|
||||
@PostMapping("/listByPage")
|
||||
public R listByPage(@Validated @RequestBody PlayClerkPerformanceInfoQueryVo vo) {
|
||||
IPage<PlayClerkUserInfoEntity> page = clerkUserInfoService.selectByPage(vo);
|
||||
IPage<PlayClerkPerformanceInfoReturnVo> voPage = page.convert(u -> {
|
||||
List<PlayClerkLevelInfoEntity> clerkLevelInfoEntity = playClerkLevelInfoService.selectAll();
|
||||
String startTime = vo.getEndOrderTime() != null ? vo.getEndOrderTime().get(0) : "";
|
||||
String endTime = vo.getEndOrderTime() != null ? vo.getEndOrderTime().get(1) : "";
|
||||
List<PlayOrderInfoEntity> orderInfoEntities = playOrderInfoService.clerkSelectOrderInfoList(u.getId(), startTime, endTime);
|
||||
List<PlayPersonnelGroupInfoEntity> groupInfoEntities = playPersonnelGroupInfoService.selectAll();
|
||||
return playClerkPerformanceService.getClerkPerformanceInfo(u, orderInfoEntities, clerkLevelInfoEntity, groupInfoEntities);
|
||||
});
|
||||
return R.ok(voPage);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.starry.admin.modules.statistics.module.vo;
|
||||
|
||||
import com.starry.common.domain.BasePageEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author admin
|
||||
* @since 2024/6/10 下午8:58
|
||||
**/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class PlayClerkPerformanceInfoQueryVo extends BasePageEntity {
|
||||
|
||||
/**
|
||||
* 分组ID
|
||||
*/
|
||||
private String groupId;
|
||||
|
||||
|
||||
/**
|
||||
* 店员ID
|
||||
*/
|
||||
private String clerkId;
|
||||
|
||||
|
||||
/**
|
||||
* 店员性别
|
||||
*/
|
||||
private String sex;
|
||||
|
||||
|
||||
/**
|
||||
* 店员上架状态
|
||||
*/
|
||||
private String listingState;
|
||||
|
||||
|
||||
/**
|
||||
* 完成订单时间
|
||||
*/
|
||||
private List<String> endOrderTime;
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.starry.admin.modules.weichat.entity.clerk;
|
||||
package com.starry.admin.modules.statistics.module.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -16,14 +16,24 @@ public class PlayClerkPerformanceInfoReturnVo {
|
||||
* 店员ID
|
||||
*/
|
||||
private String clerkId;
|
||||
|
||||
/**
|
||||
* 店员昵称
|
||||
*/
|
||||
private String clerkNickname;
|
||||
|
||||
/**
|
||||
* 店员昵称
|
||||
*/
|
||||
private String clerkSex;
|
||||
/**
|
||||
* 分组名称
|
||||
*/
|
||||
private String groupName = "分组1";
|
||||
private String groupName = "";
|
||||
/**
|
||||
* 分组名称
|
||||
*/
|
||||
private String levelName = "金牌";
|
||||
private String levelName = "";
|
||||
/**
|
||||
* 在线时长
|
||||
*/
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.starry.admin.modules.statistics.service;
|
||||
|
||||
import com.starry.admin.modules.clerk.module.entity.PlayClerkLevelInfoEntity;
|
||||
import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity;
|
||||
import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
|
||||
import com.starry.admin.modules.personnel.module.entity.PlayPersonnelGroupInfoEntity;
|
||||
import com.starry.admin.modules.statistics.module.vo.PlayClerkPerformanceInfoReturnVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author admin
|
||||
* @since 2024/6/15 下午3:29
|
||||
**/
|
||||
public interface IPlayClerkPerformanceService {
|
||||
|
||||
|
||||
/**
|
||||
* 根据店员订单ID,生成店员业绩信息
|
||||
*
|
||||
* @param userInfo 店员信息
|
||||
* @param orderInfoEntities 店员订单列表
|
||||
* @param clerkLevelInfoEntity 店员等级信息
|
||||
* @param groupInfoEntities 店员分组信息
|
||||
* @return 业绩信息
|
||||
*/
|
||||
PlayClerkPerformanceInfoReturnVo getClerkPerformanceInfo(PlayClerkUserInfoEntity userInfo, List<PlayOrderInfoEntity> orderInfoEntities, List<PlayClerkLevelInfoEntity> clerkLevelInfoEntity, List<PlayPersonnelGroupInfoEntity> groupInfoEntities);
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.starry.admin.modules.statistics.service.impl;
|
||||
|
||||
import com.starry.admin.modules.clerk.module.entity.PlayClerkLevelInfoEntity;
|
||||
import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity;
|
||||
import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
|
||||
import com.starry.admin.modules.personnel.module.entity.PlayPersonnelGroupInfoEntity;
|
||||
import com.starry.admin.modules.statistics.module.vo.PlayClerkPerformanceInfoReturnVo;
|
||||
import com.starry.admin.modules.statistics.service.IPlayClerkPerformanceService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author admin
|
||||
* @since 2024/6/15 下午3:29
|
||||
**/
|
||||
@Service
|
||||
public class PlayClerkPerformanceServiceImpl implements IPlayClerkPerformanceService {
|
||||
|
||||
@Override
|
||||
public PlayClerkPerformanceInfoReturnVo getClerkPerformanceInfo(PlayClerkUserInfoEntity userInfo, List<PlayOrderInfoEntity> orderInfoEntities, List<PlayClerkLevelInfoEntity> clerkLevelInfoEntities, List<PlayPersonnelGroupInfoEntity> groupInfoEntities) {
|
||||
|
||||
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(userInfo.getId());
|
||||
returnVo.setClerkNickname(userInfo.getNickname());
|
||||
returnVo.setClerkSex(userInfo.getSex());
|
||||
for (PlayClerkLevelInfoEntity infoEntity : clerkLevelInfoEntities) {
|
||||
if (infoEntity.getId().equals(userInfo.getLevelId())) {
|
||||
returnVo.setLevelName(infoEntity.getName());
|
||||
}
|
||||
}
|
||||
for (PlayPersonnelGroupInfoEntity infoEntity : groupInfoEntities) {
|
||||
if (infoEntity.getId().equals(userInfo.getGroupId())) {
|
||||
returnVo.setGroupName(infoEntity.getGroupName());
|
||||
}
|
||||
}
|
||||
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 returnVo;
|
||||
}
|
||||
}
|
||||
@@ -4,13 +4,16 @@ import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.starry.common.domain.BaseEntity;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@@ -82,6 +85,11 @@ public class SysUserEntity extends BaseEntity<SysUserEntity> {
|
||||
@ApiModelProperty(value = "租户id")
|
||||
private String tenantId;
|
||||
|
||||
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private LocalDateTime addTime;
|
||||
|
||||
private String clerkId;
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.starry.admin.modules.system.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.starry.admin.modules.system.entity.SysUserEntity;
|
||||
import com.starry.admin.modules.system.vo.RoleUserResultVo;
|
||||
import com.starry.admin.modules.system.vo.SysUserQueryVo;
|
||||
@@ -20,7 +20,7 @@ import org.apache.ibatis.annotations.Param;
|
||||
* @since 2021-09-03
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysUserMapper extends BaseMapper<SysUserEntity> {
|
||||
public interface SysUserMapper extends MPJBaseMapper<SysUserEntity> {
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.starry.admin.modules.system.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.starry.admin.modules.personnel.module.vo.PlayPersonnelUserInfoQueryVo;
|
||||
import com.starry.admin.modules.personnel.module.vo.PlayPersonnelUserInfoReturnVo;
|
||||
import com.starry.admin.modules.system.entity.SysUserEntity;
|
||||
import com.starry.admin.modules.system.vo.*;
|
||||
|
||||
@@ -41,6 +43,15 @@ public interface SysUserService extends IService<SysUserEntity> {
|
||||
*/
|
||||
SysUserEntity selectUserByUserName(String userName);
|
||||
|
||||
|
||||
/**
|
||||
* 分页查询用户
|
||||
*
|
||||
* @param vo 查询参数
|
||||
* @return page
|
||||
*/
|
||||
IPage<PlayPersonnelUserInfoReturnVo> selectByPage(PlayPersonnelUserInfoQueryVo vo);
|
||||
|
||||
/**
|
||||
* 获取列表。分页
|
||||
*
|
||||
|
||||
@@ -7,8 +7,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity;
|
||||
import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService;
|
||||
import com.starry.admin.modules.personnel.module.entity.PlayPersonnelGroupInfoEntity;
|
||||
import com.starry.admin.modules.personnel.module.entity.PlayPersonnelWaiterInfoEntity;
|
||||
import com.starry.admin.modules.personnel.module.vo.PlayPersonnelUserInfoQueryVo;
|
||||
import com.starry.admin.modules.personnel.module.vo.PlayPersonnelUserInfoReturnVo;
|
||||
import com.starry.admin.modules.system.entity.SysRoleEntity;
|
||||
import com.starry.admin.modules.system.entity.SysUserEntity;
|
||||
import com.starry.admin.modules.system.entity.SysUserRoleEntity;
|
||||
@@ -57,6 +62,36 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
|
||||
private IPlayClerkUserInfoService clerkUserInfoService;
|
||||
|
||||
|
||||
@Override
|
||||
public IPage<PlayPersonnelUserInfoReturnVo> selectByPage(PlayPersonnelUserInfoQueryVo vo) {
|
||||
MPJLambdaWrapper<SysUserEntity> lambdaWrapper = new MPJLambdaWrapper<>();
|
||||
lambdaWrapper.selectAll(SysUserEntity.class);
|
||||
//店员表
|
||||
lambdaWrapper.selectAs(PlayClerkUserInfoEntity::getId, "clerkId").selectAs(PlayClerkUserInfoEntity::getAvatar, "clerkAvatar").selectAs(PlayClerkUserInfoEntity::getNickname, "clerkNickname");
|
||||
lambdaWrapper.leftJoin(PlayClerkUserInfoEntity.class, PlayClerkUserInfoEntity::getId, SysUserEntity::getUserId);
|
||||
if (StrUtil.isNotBlank(vo.getSysUserId())) {
|
||||
lambdaWrapper.eq(SysUserEntity::getUserId, vo.getSysUserId());
|
||||
}
|
||||
if (StrUtil.isNotBlank(vo.getUserCode())) {
|
||||
lambdaWrapper.eq(SysUserEntity::getUserCode, vo.getUserCode());
|
||||
}
|
||||
if (StrUtil.isNotBlank(vo.getRuleType())) {
|
||||
if ("0".equals(vo.getRuleType())) {
|
||||
lambdaWrapper.leftJoin(PlayClerkUserInfoEntity.class, PlayClerkUserInfoEntity::getSysUserId, SysUserEntity::getUserId);
|
||||
} else if ("1".equals(vo.getRuleType())) {
|
||||
lambdaWrapper.leftJoin(PlayPersonnelWaiterInfoEntity.class, PlayPersonnelWaiterInfoEntity::getSysUserId, SysUserEntity::getUserId);
|
||||
} else if ("2".equals(vo.getRuleType())) {
|
||||
lambdaWrapper.leftJoin(PlayPersonnelGroupInfoEntity.class, PlayPersonnelGroupInfoEntity::getSysUserId, SysUserEntity::getUserId);
|
||||
}
|
||||
}
|
||||
if (vo.getAddTime() != null && vo.getAddTime().size() == 2) {
|
||||
lambdaWrapper.between(SysUserEntity::getAddTime, vo.getAddTime().get(0), vo.getAddTime().get(1));
|
||||
}
|
||||
|
||||
|
||||
return this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayPersonnelUserInfoReturnVo.class, lambdaWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysUserEntity register(SysUserEntity user) {
|
||||
SysUserEntity newSysUserEntity = new SysUserEntity();
|
||||
@@ -233,7 +268,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
|
||||
user.setUserId(IdUtils.getUuid());
|
||||
user.setSuperAdmin(false);
|
||||
this.save(user);
|
||||
clerkUserInfoService.update(null, Wrappers.lambdaUpdate(PlayClerkUserInfoEntity.class).eq(PlayClerkUserInfoEntity::getId, param.getClerkId()).set(PlayClerkUserInfoEntity::getPlayUserId, user.getUserId()));
|
||||
clerkUserInfoService.update(null, Wrappers.lambdaUpdate(PlayClerkUserInfoEntity.class).eq(PlayClerkUserInfoEntity::getId, param.getClerkId()).set(PlayClerkUserInfoEntity::getSysUserId, user.getUserId()));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user