package cn.iocoder.yudao.module.crm.dal.mysql.business;
|
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
|
import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO;
|
import cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.funnel.CrmStatisticsFunnelReqVO;
|
import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
|
import cn.iocoder.yudao.module.crm.enums.business.CrmBusinessEndStatusEnum;
|
import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
|
import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import org.apache.ibatis.annotations.Mapper;
|
|
import java.math.BigDecimal;
|
import java.time.LocalDateTime;
|
import java.util.Collection;
|
import java.util.List;
|
|
/**
|
* 商机 Mapper
|
*
|
* @author ljlleo
|
*/
|
@Mapper
|
public interface CrmBusinessMapper extends BaseMapperX<CrmBusinessDO> {
|
|
default int updateOwnerUserIdById(Long id, Long ownerUserId) {
|
return update(new LambdaUpdateWrapper<CrmBusinessDO>()
|
.eq(CrmBusinessDO::getId, id)
|
.set(CrmBusinessDO::getOwnerUserId, ownerUserId));
|
}
|
|
default PageResult<CrmBusinessDO> selectPageByCustomerId(CrmBusinessPageReqVO pageReqVO) {
|
return selectPage(pageReqVO, new LambdaQueryWrapperX<CrmBusinessDO>()
|
.eq(CrmBusinessDO::getCustomerId, pageReqVO.getCustomerId()) // 指定客户编号
|
.likeIfPresent(CrmBusinessDO::getName, pageReqVO.getName())
|
.orderByDesc(CrmBusinessDO::getId));
|
}
|
|
default PageResult<CrmBusinessDO> selectPageByContactId(CrmBusinessPageReqVO pageReqVO, Collection<Long> businessIds) {
|
return selectPage(pageReqVO, new LambdaQueryWrapperX<CrmBusinessDO>()
|
.in(CrmBusinessDO::getId, businessIds) // 指定商机编号
|
.likeIfPresent(CrmBusinessDO::getName, pageReqVO.getName())
|
.orderByDesc(CrmBusinessDO::getId));
|
}
|
|
default PageResult<CrmBusinessDO> selectPage(CrmBusinessPageReqVO pageReqVO, Long userId) {
|
MPJLambdaWrapperX<CrmBusinessDO> query = new MPJLambdaWrapperX<>();
|
// 拼接数据权限的查询条件
|
CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_BUSINESS.getType(),
|
CrmBusinessDO::getId, userId, pageReqVO.getSceneType());
|
// 拼接自身的查询条件
|
query.selectAll(CrmBusinessDO.class)
|
.likeIfPresent(CrmBusinessDO::getName, pageReqVO.getName())
|
.orderByDesc(CrmBusinessDO::getId);
|
return selectJoinPage(pageReqVO, CrmBusinessDO.class, query);
|
}
|
|
default Long selectCountByStatusTypeId(Long statusTypeId) {
|
return selectCount(CrmBusinessDO::getStatusTypeId, statusTypeId);
|
}
|
|
default List<CrmBusinessDO> selectListByCustomerIdOwnerUserId(Long customerId, Long ownerUserId) {
|
return selectList(new LambdaQueryWrapperX<CrmBusinessDO>()
|
.eq(CrmBusinessDO::getCustomerId, customerId)
|
.eq(CrmBusinessDO::getOwnerUserId, ownerUserId));
|
}
|
|
default List<CrmBusinessDO> selectListByCustomerId(Long customerId) {
|
return selectList(CrmBusinessDO::getCustomerId, customerId);
|
}
|
|
default PageResult<CrmBusinessDO> selectPage(CrmStatisticsFunnelReqVO pageVO) {
|
return selectPage(pageVO, new LambdaQueryWrapperX<CrmBusinessDO>()
|
.in(CrmBusinessDO::getOwnerUserId, pageVO.getUserIds())
|
.betweenIfPresent(CrmBusinessDO::getCreateTime, pageVO.getTimes()));
|
}
|
|
// ========== 统计方法 ==========
|
|
default Long selectTodayCount() {
|
LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now());
|
LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now());
|
return selectCount(new LambdaQueryWrapperX<CrmBusinessDO>()
|
.between(CrmBusinessDO::getCreateTime, beginOfToday, endOfToday));
|
}
|
|
default BigDecimal selectTotalPriceSum() {
|
LambdaQueryWrapperX<CrmBusinessDO> query = new LambdaQueryWrapperX<>();
|
query.select(CrmBusinessDO::getTotalPrice);
|
List<CrmBusinessDO> list = selectList(query);
|
return list.stream()
|
.map(CrmBusinessDO::getTotalPrice)
|
.filter(p -> p != null)
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
}
|
|
default Long selectSuccessCount() {
|
return selectCount(new LambdaQueryWrapperX<CrmBusinessDO>()
|
.eq(CrmBusinessDO::getEndStatus, CrmBusinessEndStatusEnum.WIN.getStatus()));
|
}
|
|
default BigDecimal selectSuccessPriceSum() {
|
LambdaQueryWrapperX<CrmBusinessDO> query = new LambdaQueryWrapperX<>();
|
query.eq(CrmBusinessDO::getEndStatus, CrmBusinessEndStatusEnum.WIN.getStatus())
|
.select(CrmBusinessDO::getTotalPrice);
|
List<CrmBusinessDO> list = selectList(query);
|
return list.stream()
|
.map(CrmBusinessDO::getTotalPrice)
|
.filter(p -> p != null)
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
}
|
|
default Long selectProcessingCount() {
|
return selectCount(new LambdaQueryWrapperX<CrmBusinessDO>()
|
.isNull(CrmBusinessDO::getEndStatus));
|
}
|
|
default Long selectFailCount() {
|
return selectCount(new LambdaQueryWrapperX<CrmBusinessDO>()
|
.eq(CrmBusinessDO::getEndStatus, CrmBusinessEndStatusEnum.LOSE.getStatus()));
|
}
|
|
default List<Long> selectOwnerUserIds() {
|
LambdaQueryWrapperX<CrmBusinessDO> query = new LambdaQueryWrapperX<>();
|
query.select(CrmBusinessDO::getOwnerUserId).isNotNull(CrmBusinessDO::getOwnerUserId);
|
List<CrmBusinessDO> list = selectList(query);
|
return list.stream().map(CrmBusinessDO::getOwnerUserId).distinct().toList();
|
}
|
|
default Long selectCountByOwnerUserId(Long ownerUserId) {
|
return selectCount(CrmBusinessDO::getOwnerUserId, ownerUserId);
|
}
|
|
default BigDecimal selectPriceSumByOwnerUserId(Long ownerUserId) {
|
LambdaQueryWrapperX<CrmBusinessDO> query = new LambdaQueryWrapperX<>();
|
query.eq(CrmBusinessDO::getOwnerUserId, ownerUserId).select(CrmBusinessDO::getTotalPrice);
|
List<CrmBusinessDO> list = selectList(query);
|
return list.stream()
|
.map(CrmBusinessDO::getTotalPrice)
|
.filter(p -> p != null)
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
}
|
|
}
|