feat(order): 添加订单置顶功能并优化排序规则

- 在CrmOrder实体类中新增isTop字段用于标识是否置顶
- 在CrmOrderBo业务对象中添加isTop属性支持查询过滤
- 在CrmOrderVo视图对象中添加isTop属性并配置Excel导出
- 更新MyBatis映射文件添加isTop字段的数据库映射关系
- 修改订单查询服务实现支持按置顶状态进行查询过滤
- 重构排序逻辑将原有的订单类型+创建时间排序改为置顶优先+状态+创建时间排序
- 新排序规则:置顶订单优先显示、已生效状态次之、最后按创建时间倒序排列
This commit is contained in:
2026-05-05 16:48:13 +08:00
parent 8c1ba2bf07
commit 54adbd532e
5 changed files with 39 additions and 7 deletions

View File

@@ -226,4 +226,9 @@ public class CrmOrder extends BaseEntity {
@TableLogic
private Long delFlag;
/**
* 是否置顶 0-否 1-是
*/
private Integer isTop;
}

View File

@@ -235,6 +235,11 @@ public class CrmOrderBo extends BaseEntity {
*/
private String annexFiles;
/**
* 是否置顶 0-否 1-是
*/
private Integer isTop;
/**
* 关键字搜索
*/

View File

@@ -279,6 +279,12 @@ public class CrmOrderVo extends BaseEntity {
@ExcelProperty(value = "附件")
private String annexFiles;
/**
* 是否置顶 0-否 1-是
*/
@ExcelProperty(value = "是否置顶")
private Integer isTop;
// @ExcelProperty(value = "客户编号")
private String customerCode;

View File

@@ -208,11 +208,16 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
qw.eq(bo.getStatus() != null, "co.status", bo.getStatus());
qw.eq(bo.getContractId() != null, "co.contract_id", bo.getContractId());
qw.like(StringUtils.isNotBlank(bo.getAnnexFiles()), "co.annex_files", bo.getAnnexFiles());
qw.eq(bo.getIsTop() != null, "co.is_top", bo.getIsTop());
//逻辑删除
qw.eq("co.del_flag", 0);
//根据orderType排序预订单是0 正是订单是1 0排在前面 1排在后面 升序
qw.orderByAsc("co.order_type");
qw.orderByDesc("co.create_time");
//排序规则:
// 1. 置顶优先 (is_top=1 排在前面)
// 2. 状态为1(已生效)的排在前面
// 3. 创建时间倒序
qw.orderByDesc("co.is_top")
.orderByDesc("CASE WHEN co.status = 1 THEN 1 ELSE 0 END")
.orderByDesc("co.create_time");
return qw;
}
@@ -268,6 +273,14 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
lqw.eq(bo.getStatus() != null, CrmOrder::getStatus, bo.getStatus());
lqw.eq(bo.getContractId() != null, CrmOrder::getContractId, bo.getContractId());
lqw.like(StringUtils.isNotBlank(bo.getAnnexFiles()), CrmOrder::getAnnexFiles, bo.getAnnexFiles());
lqw.eq(bo.getIsTop() != null, CrmOrder::getIsTop, bo.getIsTop());
//逻辑删除
lqw.eq(CrmOrder::getDelFlag, 0);
//排序规则:
// 1. 置顶优先 (is_top=1 排在前面)
// 2. 状态为1(已生效)的排在前面
// 3. 创建时间倒序
lqw.last("ORDER BY is_top DESC, CASE WHEN status = 1 THEN 1 ELSE 0 END DESC, create_time DESC");
return lqw;
}

View File

@@ -52,6 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="isTop" column="is_top"/>
</resultMap>
<select id="selectVoPagePlus" resultType="com.klp.crm.domain.vo.CrmOrderVo">
SELECT
@@ -97,6 +98,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
co.status,
co.contract_id AS contractId,
co.annex_files AS annexFiles,
co.is_top AS isTop,
co.create_by AS createBy,
co.create_time AS createTime,
co.update_by AS updateBy,
@@ -156,6 +158,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
co.status,
co.contract_id AS contractId,
co.annex_files AS annexFiles,
co.is_top AS isTop,
co.create_by AS createBy,
co.create_time AS createTime,
co.update_by AS updateBy,