package cn.iocoder.yudao.module.aftersales.dal.mysql.problem;
|
|
import cn.hutool.core.util.StrUtil;
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
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.module.aftersales.dal.dataobject.problem.AfterSaleProblemDO;
|
import cn.iocoder.yudao.module.aftersales.enums.AfterSaleProblemStatusEnum;
|
import org.apache.ibatis.annotations.Mapper;
|
|
import java.util.List;
|
|
/**
|
* 售后问题库 Mapper
|
*/
|
@Mapper
|
public interface AfterSaleProblemMapper extends BaseMapperX<AfterSaleProblemDO> {
|
|
default AfterSaleProblemDO selectByNo(String no) {
|
return selectOne(AfterSaleProblemDO::getNo, no);
|
}
|
|
default AfterSaleProblemDO selectBySourceTicketId(Long sourceTicketId) {
|
return selectOne(AfterSaleProblemDO::getSourceTicketId, sourceTicketId);
|
}
|
|
default PageResult<AfterSaleProblemDO> selectPage(PageParam pageParam, String no, String keyword,
|
Long sourceTicketId, Long itemId, String itemCode,
|
String issueCategory,
|
Integer issueType, Integer rootCauseCategory, Integer status) {
|
LambdaQueryWrapperX<AfterSaleProblemDO> query = new LambdaQueryWrapperX<AfterSaleProblemDO>()
|
.eqIfPresent(AfterSaleProblemDO::getNo, no)
|
.eqIfPresent(AfterSaleProblemDO::getSourceTicketId, sourceTicketId)
|
.eqIfPresent(AfterSaleProblemDO::getItemId, itemId)
|
.likeIfPresent(AfterSaleProblemDO::getItemCode, itemCode)
|
.eqIfPresent(AfterSaleProblemDO::getIssueCategory, issueCategory)
|
.eqIfPresent(AfterSaleProblemDO::getIssueType, issueType)
|
.eqIfPresent(AfterSaleProblemDO::getRootCauseCategory, rootCauseCategory)
|
.eqIfPresent(AfterSaleProblemDO::getStatus, status);
|
// 关键字检索:单号/标题/描述/解决方案
|
if (StrUtil.isNotBlank(keyword)) {
|
query.and(w -> w.like(AfterSaleProblemDO::getNo, keyword)
|
.or().like(AfterSaleProblemDO::getTitle, keyword)
|
.or().like(AfterSaleProblemDO::getDescription, keyword)
|
.or().like(AfterSaleProblemDO::getSolution, keyword));
|
}
|
query.orderByDesc(AfterSaleProblemDO::getUpdateTime);
|
return selectPage(pageParam, query);
|
}
|
|
/**
|
* 新工单受理参考检索:只返回已发布,按物料/分类/关键字命中,取最近更新 10 条
|
*/
|
default List<AfterSaleProblemDO> selectReferenceList(Long itemId, String issueCategory, Integer issueType,
|
Integer rootCauseCategory, String keyword) {
|
LambdaQueryWrapperX<AfterSaleProblemDO> query = new LambdaQueryWrapperX<AfterSaleProblemDO>()
|
.eq(AfterSaleProblemDO::getStatus, AfterSaleProblemStatusEnum.PUBLISHED.getStatus());
|
query.and(w -> {
|
boolean hasCond = false;
|
if (itemId != null) {
|
w.eq(AfterSaleProblemDO::getItemId, itemId);
|
hasCond = true;
|
}
|
if (StrUtil.isNotBlank(issueCategory)) {
|
if (hasCond) {
|
w.or();
|
}
|
w.eq(AfterSaleProblemDO::getIssueCategory, issueCategory);
|
hasCond = true;
|
}
|
if (issueType != null) {
|
if (hasCond) {
|
w.or();
|
}
|
w.eq(AfterSaleProblemDO::getIssueType, issueType);
|
hasCond = true;
|
}
|
if (rootCauseCategory != null) {
|
if (hasCond) {
|
w.or();
|
}
|
w.eq(AfterSaleProblemDO::getRootCauseCategory, rootCauseCategory);
|
hasCond = true;
|
}
|
if (StrUtil.isNotBlank(keyword)) {
|
if (hasCond) {
|
w.or();
|
}
|
w.like(AfterSaleProblemDO::getTitle, keyword);
|
hasCond = true;
|
}
|
if (!hasCond) {
|
w.eq(AfterSaleProblemDO::getId, -1L); // 无条件时返回空,避免全表拉取
|
}
|
});
|
query.orderByDesc(AfterSaleProblemDO::getUpdateTime).last("LIMIT 10");
|
return selectList(query);
|
}
|
|
}
|