店员业绩

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

@@ -50,7 +50,7 @@ public class PlayClerkUserInfoEntity extends BaseEntity<PlayClerkUserInfoEntity>
/** /**
* 陪聊用户ID * 陪聊用户ID
*/ */
private String playUserId; private String sysUserId;
/** /**
* 用户的标识,对当前公众号唯一 * 用户的标识,对当前公众号唯一

View File

@@ -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.entity.PlayClerkUserReturnVo;
import com.starry.admin.modules.clerk.module.vo.PlayClerkUnsettledWagesInfoQueryVo; import com.starry.admin.modules.clerk.module.vo.PlayClerkUnsettledWagesInfoQueryVo;
import com.starry.admin.modules.clerk.module.vo.PlayClerkUnsettledWagesInfoReturnVo; 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.PlayClerkUserLoginResponseVo;
import com.starry.admin.modules.weichat.entity.clerk.PlayClerkUserInfoQueryVo; 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.clerk.PlayClerkUserInfoResultVo;
@@ -25,6 +26,12 @@ import java.util.List;
public interface IPlayClerkUserInfoService extends IService<PlayClerkUserInfoEntity> { public interface IPlayClerkUserInfoService extends IService<PlayClerkUserInfoEntity> {
/**
* 根据分组ID查询店员列表
*
* @param groupId 分组ID
* @return 店员列表
*/
List<PlayClerkUserInfoEntity> selecyByGroupId(String groupId); List<PlayClerkUserInfoEntity> selecyByGroupId(String groupId);
/** /**
* 查询当前租户店员总数 * 查询当前租户店员总数
@@ -125,6 +132,17 @@ public interface IPlayClerkUserInfoService extends IService<PlayClerkUserInfoEnt
*/ */
IPage<PlayClerkUnsettledWagesInfoReturnVo> listUnsettledWagesByPage(PlayClerkUnsettledWagesInfoQueryVo vo); IPage<PlayClerkUnsettledWagesInfoReturnVo> listUnsettledWagesByPage(PlayClerkUnsettledWagesInfoQueryVo vo);
/**
* 管理端分页查询店员信息
*
* @param vo 店员查询实体
* @return 店员列表
*/
IPage<PlayClerkUserInfoEntity> selectByPage(PlayClerkPerformanceInfoQueryVo vo);
/** /**
* 管理端分页查询店员信息 * 管理端分页查询店员信息
* *

View File

@@ -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.follow.service.IPlayCustomFollowInfoService;
import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity; import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
import com.starry.admin.modules.order.service.IPlayOrderInfoService; 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.PlayClerkUserLoginResponseVo;
import com.starry.admin.modules.weichat.entity.clerk.PlayClerkUserInfoQueryVo; 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.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); 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 @Override
public IPage<PlayClerkUserReturnVo> selectByPage(PlayClerkUserQueryVo vo) { public IPage<PlayClerkUserReturnVo> selectByPage(PlayClerkUserQueryVo vo) {
MPJLambdaWrapper<PlayClerkUserInfoEntity> lambdaQueryWrapper = new MPJLambdaWrapper<>(); MPJLambdaWrapper<PlayClerkUserInfoEntity> lambdaQueryWrapper = new MPJLambdaWrapper<>();
@@ -271,9 +290,6 @@ public class PlayClerkUserInfoServiceImpl extends ServiceImpl<PlayClerkUserInfoM
if (StrUtil.isNotBlank(vo.getNickname())) { if (StrUtil.isNotBlank(vo.getNickname())) {
lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getNickname, vo.getNickname()); lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getNickname, vo.getNickname());
} }
if (StrUtil.isNotBlank(vo.getNickname())) {
lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getNickname, vo.getNickname());
}
if (StrUtil.isNotBlank(vo.getPhone())) { if (StrUtil.isNotBlank(vo.getPhone())) {
lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getPhone, vo.getPhone()); lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getPhone, vo.getPhone());
} }

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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.PlayPersonnelGroupInfoQueryVo;
import com.starry.admin.modules.personnel.module.vo.PlayPersonnelGroupInfoReturnVo; import com.starry.admin.modules.personnel.module.vo.PlayPersonnelGroupInfoReturnVo;
import java.util.List;
/** /**
* 店员分组信息Service接口 * 店员分组信息Service接口
* *
@@ -21,6 +23,16 @@ public interface IPlayPersonnelGroupInfoService extends IService<PlayPersonnelGr
*/ */
PlayPersonnelGroupInfoEntity selectPlayClerkGroupInfoById(String id); PlayPersonnelGroupInfoEntity selectPlayClerkGroupInfoById(String id);
/**
* 查询店员分组信息列表
*
* @return PlayPersonnelGroupInfoReturnVo
* @author 杭州世平信息科技有限公司-xuhq
* @since 2024/6/14 15:46
**/
List<PlayPersonnelGroupInfoEntity> selectAll();
/** /**
* 分页查询店员分组信息列表 * 分页查询店员分组信息列表
* *

View File

@@ -1,6 +1,7 @@
package com.starry.admin.modules.personnel.service.impl; package com.starry.admin.modules.personnel.service.impl;
import cn.hutool.core.util.StrUtil; 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.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -15,6 +16,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
/** /**
* 店员分组信息Service业务层处理 * 店员分组信息Service业务层处理
@@ -38,6 +40,10 @@ public class PlayPersonnelGroupInfoServiceImpl extends ServiceImpl<PlayPersonnel
return this.baseMapper.selectById(id); return this.baseMapper.selectById(id);
} }
@Override
public List<PlayPersonnelGroupInfoEntity> selectAll() {
return this.baseMapper.selectList(new LambdaQueryWrapper<>());
}
@Override @Override
public IPage<PlayPersonnelGroupInfoReturnVo> selectByPage(PlayPersonnelGroupInfoQueryVo vo) { public IPage<PlayPersonnelGroupInfoReturnVo> selectByPage(PlayPersonnelGroupInfoQueryVo vo) {

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -1,4 +1,4 @@
package com.starry.admin.modules.weichat.entity.clerk; package com.starry.admin.modules.statistics.module.vo;
import lombok.Data; import lombok.Data;
@@ -16,14 +16,24 @@ public class PlayClerkPerformanceInfoReturnVo {
* 店员ID * 店员ID
*/ */
private String clerkId; private String clerkId;
/**
* 店员昵称
*/
private String clerkNickname;
/**
* 店员昵称
*/
private String clerkSex;
/** /**
* 分组名称 * 分组名称
*/ */
private String groupName = "分组1"; private String groupName = "";
/** /**
* 分组名称 * 分组名称
*/ */
private String levelName = "金牌"; private String levelName = "";
/** /**
* 在线时长 * 在线时长
*/ */

View File

@@ -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);
}

View File

@@ -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;
}
}

View File

@@ -4,13 +4,16 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.starry.common.domain.BaseEntity; import com.starry.common.domain.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@@ -82,6 +85,11 @@ public class SysUserEntity extends BaseEntity<SysUserEntity> {
@ApiModelProperty(value = "租户id") @ApiModelProperty(value = "租户id")
private String tenantId; 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; private String clerkId;
/** /**

View File

@@ -1,9 +1,9 @@
package com.starry.admin.modules.system.mapper; package com.starry.admin.modules.system.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.entity.SysUserEntity;
import com.starry.admin.modules.system.vo.RoleUserResultVo; import com.starry.admin.modules.system.vo.RoleUserResultVo;
import com.starry.admin.modules.system.vo.SysUserQueryVo; import com.starry.admin.modules.system.vo.SysUserQueryVo;
@@ -20,7 +20,7 @@ import org.apache.ibatis.annotations.Param;
* @since 2021-09-03 * @since 2021-09-03
*/ */
@Mapper @Mapper
public interface SysUserMapper extends BaseMapper<SysUserEntity> { public interface SysUserMapper extends MPJBaseMapper<SysUserEntity> {
/** /**

View File

@@ -2,6 +2,8 @@ package com.starry.admin.modules.system.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; 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.entity.SysUserEntity;
import com.starry.admin.modules.system.vo.*; import com.starry.admin.modules.system.vo.*;
@@ -41,6 +43,15 @@ public interface SysUserService extends IService<SysUserEntity> {
*/ */
SysUserEntity selectUserByUserName(String userName); SysUserEntity selectUserByUserName(String userName);
/**
* 分页查询用户
*
* @param vo 查询参数
* @return page
*/
IPage<PlayPersonnelUserInfoReturnVo> selectByPage(PlayPersonnelUserInfoQueryVo vo);
/** /**
* 获取列表。分页 * 获取列表。分页
* *

View File

@@ -7,8 +7,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService; 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.SysRoleEntity;
import com.starry.admin.modules.system.entity.SysUserEntity; import com.starry.admin.modules.system.entity.SysUserEntity;
import com.starry.admin.modules.system.entity.SysUserRoleEntity; import com.starry.admin.modules.system.entity.SysUserRoleEntity;
@@ -57,6 +62,36 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
private IPlayClerkUserInfoService clerkUserInfoService; 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 @Override
public SysUserEntity register(SysUserEntity user) { public SysUserEntity register(SysUserEntity user) {
SysUserEntity newSysUserEntity = new SysUserEntity(); SysUserEntity newSysUserEntity = new SysUserEntity();
@@ -233,7 +268,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
user.setUserId(IdUtils.getUuid()); user.setUserId(IdUtils.getUuid());
user.setSuperAdmin(false); user.setSuperAdmin(false);
this.save(user); 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; return true;
} }

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.module.vo.PlayOrderStateEditVo;
import com.starry.admin.modules.order.service.IPlayOrderEvaluateInfoService; import com.starry.admin.modules.order.service.IPlayOrderEvaluateInfoService;
import com.starry.admin.modules.order.service.IPlayOrderInfoService; 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.*;
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.gift.PlayClerkGiftReturnVo;
import com.starry.admin.modules.weichat.entity.order.PlayClerkOrderDetailsReturnVo; import com.starry.admin.modules.weichat.entity.order.PlayClerkOrderDetailsReturnVo;
import com.starry.admin.modules.weichat.entity.order.PlayClerkOrderInfoQueryVo; 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 org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime; 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; import java.util.concurrent.TimeUnit;
/** /**
@@ -87,61 +95,24 @@ public class WxClerkController {
@Resource @Resource
private IPlayGiftInfoService giftInfoService; private IPlayGiftInfoService giftInfoService;
@Resource
private IPlayClerkPerformanceService playClerkPerformanceService;
@Resource
private IPlayPersonnelGroupInfoService playPersonnelGroupInfoService;
/** /**
* 店员获取个人业绩信息 * 店员获取个人业绩信息
*/ */
@ClerkUserLogin @ClerkUserLogin
@PostMapping("/user/queryPerformanceInfo") @PostMapping("/user/queryPerformanceInfo")
public R queryPerformanceInfo(@Validated @RequestBody PlayClerkPerformanceInfoQueryVo vo) { public R queryPerformanceInfo(@Validated @RequestBody PlayClerkWxPerformanceInfoQueryVo vo) {
PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(ThreadLocalRequestDetail.getClerkUserInfo().getId()); 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()); List<PlayOrderInfoEntity> orderInfoEntities = playOrderInfoService.clerkSelectOrderInfoList(entity.getId(), vo.getStartTime(), vo.getEndTime());
Set<String> customIds = new HashSet<>(); List<PlayPersonnelGroupInfoEntity> groupInfoEntities = playPersonnelGroupInfoService.selectAll();
int orderContinueNumber = 0; return R.ok(playClerkPerformanceService.getClerkPerformanceInfo(entity, orderInfoEntities, clerkLevelInfoEntity, groupInfoEntities));
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);
} }

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;
}