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 { default AfterSaleProblemDO selectByNo(String no) { return selectOne(AfterSaleProblemDO::getNo, no); } default AfterSaleProblemDO selectBySourceTicketId(Long sourceTicketId) { return selectOne(AfterSaleProblemDO::getSourceTicketId, sourceTicketId); } default PageResult selectPage(PageParam pageParam, String no, String keyword, Long sourceTicketId, Long itemId, String itemCode, String issueCategory, Integer issueType, Integer rootCauseCategory, Integer status) { LambdaQueryWrapperX query = new LambdaQueryWrapperX() .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 selectReferenceList(Long itemId, String issueCategory, Integer issueType, Integer rootCauseCategory, String keyword) { LambdaQueryWrapperX query = new LambdaQueryWrapperX() .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); } }