diff --git a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderItemVo.java b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderItemVo.java index d8553f4b..d0a5da63 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderItemVo.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderItemVo.java @@ -181,6 +181,59 @@ public class CrmOrderItemVo { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; + /** + * 创建人 + */ + private String createBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 删除标志 + */ + private Long delFlag; + + /** + * 合同号(联表查询直接映射) + */ + @ExcelProperty(value = "合同号") + private String contractCode; + + /** + * 供方(联表查询直接映射) + */ + @ExcelProperty(value = "供方") + private String supplier; + + /** + * 需方(联表查询直接映射) + */ + @ExcelProperty(value = "需方") + private String customer; + + /** + * 签订时间(联表查询直接映射) + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @ExcelProperty(value = "签订时间") + private Date signTime; + + /** + * 交货日期(联表查询直接映射) + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @ExcelProperty(value = "交货日期") + private Date deliveryDate; + /** * 订单信息 */ diff --git a/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderItemMapper.java b/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderItemMapper.java index 530c9a1f..946f6ff5 100644 --- a/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderItemMapper.java +++ b/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderItemMapper.java @@ -1,8 +1,10 @@ package com.klp.crm.mapper; import com.klp.crm.domain.CrmOrderItem; +import com.klp.crm.domain.bo.CrmOrderItemBo; import com.klp.crm.domain.vo.CrmOrderItemVo; import com.klp.common.core.mapper.BaseMapperPlus; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -22,4 +24,14 @@ public interface CrmOrderItemMapper extends BaseMapperPlus selectOrderItemsByOrderIds(@Param("orderIds") List orderIds); + + /** + * 联表查询订单明细(支持排序和分页) + * 排序规则:deliveryDate DESC -> orderId ASC -> createTime DESC + * + * @param page 分页对象 + * @param bo 查询条件 + * @return 分页结果 + */ + Page selectVoListWithOrder(Page page, @Param("bo") CrmOrderItemBo bo); } diff --git a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderItemServiceImpl.java b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderItemServiceImpl.java index d2210951..7d751054 100644 --- a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderItemServiceImpl.java +++ b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderItemServiceImpl.java @@ -69,51 +69,19 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService { /** * 查询正式订单明细列表 - * 实现逻辑:查出全部匹配记录 → Java内存排序(交货日期倒序→订单ID升序→创建时间倒序)→ 手动分页 - * 排序跨页生效,同一合同明细连续排列 + * 实现逻辑:SQL联表查询 → 数据库层排序(交货日期倒序→订单ID升序→创建时间倒序)→ 物理分页 + * 排序跨页生效,同一合同明细连续排列,避免内存排序大数据量问题 */ @Override public TableDataInfo queryPageList(CrmOrderItemBo bo, PageQuery pageQuery) { - List orderIdScope = resolveOrderIdScope(bo); - if (orderIdScope != null && orderIdScope.isEmpty()) { - Page emptyPage = new Page<>(ObjectUtil.defaultIfNull(pageQuery.getPageNum(), 1), - ObjectUtil.defaultIfNull(pageQuery.getPageSize(), 10), 0); - emptyPage.setRecords(Collections.emptyList()); - return TableDataInfo.build(emptyPage); - } - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - if (orderIdScope != null) { - lqw.in(CrmOrderItem::getOrderId, orderIdScope); - } - // 1. 查出全部匹配记录 - List allItems = baseMapper.selectVoList(lqw); - // 2. 填充订单信息(含 deliveryDate) - fillOrderInfoOnItems(allItems); - // 3. 三级排序:deliveryDate DESC → orderId ASC → createTime DESC - allItems.sort((a, b) -> { - // 同一合同组内:按创建时间倒序 - if (Objects.equals(a.getOrderId(), b.getOrderId())) { - return compareDate(a.getCreateTime(), b.getCreateTime(), true); - } - // 不同合同组:按交货日期倒序 - Date dateA = a.getOrderInfo() != null ? a.getOrderInfo().getDeliveryDate() : null; - Date dateB = b.getOrderInfo() != null ? b.getOrderInfo().getDeliveryDate() : null; - int cmp = compareDate(dateA, dateB, true); - if (cmp != 0) return cmp; - // 交货日期相同:按订单ID升序,保证同一合同组连续 - return Long.compare(a.getOrderId(), b.getOrderId()); - }); - // 4. 手动分页 - int total = allItems.size(); - int pageNum = ObjectUtil.defaultIfNull(pageQuery.getPageNum(), 1); - int pageSize = ObjectUtil.defaultIfNull(pageQuery.getPageSize(), 10); - int from = (pageNum - 1) * pageSize; - int to = Math.min(from + pageSize, total); - List pageItems = from >= total ? Collections.emptyList() : allItems.subList(from, to); - - Page page = new Page<>(pageNum, pageSize, total); - page.setRecords(pageItems); - return TableDataInfo.build(page); + // 使用MyBatis-Plus分页插件,SQL层完成联表查询、排序和分页 + Page page = new Page<>( + ObjectUtil.defaultIfNull(pageQuery.getPageNum(), 1), + ObjectUtil.defaultIfNull(pageQuery.getPageSize(), 10) + ); + // 联表查询:在SQL层完成排序,避免内存排序 + Page resultPage = baseMapper.selectVoListWithOrder(page, bo); + return TableDataInfo.build(resultPage); } /** diff --git a/klp-crm/src/main/resources/mapper/CrmOrderItemMapper.xml b/klp-crm/src/main/resources/mapper/CrmOrderItemMapper.xml index 1df4a74b..040882f6 100644 --- a/klp-crm/src/main/resources/mapper/CrmOrderItemMapper.xml +++ b/klp-crm/src/main/resources/mapper/CrmOrderItemMapper.xml @@ -1,7 +1,7 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> @@ -36,6 +36,46 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/klp-ui/src/views/crm/orderItem/index.vue b/klp-ui/src/views/crm/orderItem/index.vue index d1f7be81..9c1b3090 100644 --- a/klp-ui/src/views/crm/orderItem/index.vue +++ b/klp-ui/src/views/crm/orderItem/index.vue @@ -314,7 +314,6 @@ + + diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsReceivableVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsReceivableVo.java index d235638a..a73bf774 100644 --- a/klp-wms/src/main/java/com/klp/domain/vo/WmsReceivableVo.java +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsReceivableVo.java @@ -87,4 +87,14 @@ public class WmsReceivableVo { // 客户编号 private String customerCode; + + /** + * 订单编号 + */ + private String orderCode; + + /** + * 订单名称 + */ + private String orderName; } diff --git a/klp-wms/src/main/resources/mapper/klp/WmsReceivableMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsReceivableMapper.xml index 0218b8fa..181b8020 100644 --- a/klp-wms/src/main/resources/mapper/klp/WmsReceivableMapper.xml +++ b/klp-wms/src/main/resources/mapper/klp/WmsReceivableMapper.xml @@ -37,9 +37,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" r.update_time, r.update_by, c.company_name as customerName, - c.customer_code as customerCode + c.customer_code as customerCode, + o.order_code as orderCode, + o.contract_name as orderName from wms_receivable r left join crm_customer c on r.customer_id = c.customer_id and c.del_flag = 0 + left join crm_order o on r.order_id = o.order_id and o.del_flag = 0 ${ew.customSqlSegment}