feat(order): 添加经销商ID和月份查询条件并优化订单列表查询逻辑

- 在OrderListQry中新增dealerId和month字段用于查询条件
- 实现了订单关联车辆、供应商、包裹、成本等数据的批量查询
- 重构OrderGatewayImpl中的查询逻辑,使用新的selectByQueryList方法
- 在OrderMapper中添加selectByQueryList接口方法
- 更新OrderMapper.xml实现关联查询和条件筛选功能
- 添加deliveryTime字段映射到订单结果中
This commit is contained in:
shenyifei 2026-01-04 17:43:52 +08:00
parent 596ec6d7fd
commit bdf900fcc5
4 changed files with 73 additions and 2 deletions

View File

@ -116,10 +116,41 @@ public class OrderGatewayImpl implements OrderGateway {
queryWrapper.eq(Objects.nonNull(orderListQry.getAuditState()), OrderDO::getAuditState, orderListQry.getAuditState()); queryWrapper.eq(Objects.nonNull(orderListQry.getAuditState()), OrderDO::getAuditState, orderListQry.getAuditState());
queryWrapper.eq(Objects.nonNull(orderListQry.getCreatedBy()), OrderDO::getCreatedBy, orderListQry.getCreatedBy()); queryWrapper.eq(Objects.nonNull(orderListQry.getCreatedBy()), OrderDO::getCreatedBy, orderListQry.getCreatedBy());
queryWrapper.eq(Objects.nonNull(orderListQry.getType()), OrderDO::getType, orderListQry.getType()); queryWrapper.eq(Objects.nonNull(orderListQry.getType()), OrderDO::getType, orderListQry.getType());
queryWrapper.select(OrderDO::getOrderId, OrderDO::getOrderSn, OrderDO::getState, OrderDO::getAuditState, OrderDO::getType);
queryWrapper.orderByDesc(OrderDO::getCreatedAt); queryWrapper.orderByDesc(OrderDO::getCreatedAt);
List<OrderDO> orderDOList = orderMapper.selectList(queryWrapper); List<OrderDO> orderDOList = orderMapper.selectByQueryList(queryWrapper, orderListQry);
List<Long> orderIdList = orderDOList.stream().map(OrderDO::getOrderId).toList();
if (CollUtil.isNotEmpty(orderIdList)) {
List<OrderVehicleDO> orderVehicleDOList = orderVehicleMapper.selectList(Wrappers.lambdaQuery(OrderVehicleDO.class).in(OrderVehicleDO::getOrderId, orderIdList));
Map<Long, OrderVehicleDO> orderVehicleDOMap = orderVehicleDOList.stream().collect(Collectors.toMap(OrderVehicleDO::getOrderId, Function.identity()));
List<OrderSupplierDO> orderSupplierDOList = orderSupplierMapper.selectList(Wrappers.lambdaQuery(OrderSupplierDO.class).in(OrderSupplierDO::getOrderId, orderIdList));
LambdaQueryWrapper<OrderPackageDO> queryWrapper1 = Wrappers.lambdaQuery(OrderPackageDO.class);
queryWrapper1.in(OrderPackageDO::getOrderId, orderIdList);
List<OrderPackageDO> orderPackageDOList = orderPackageMapper.selectList(queryWrapper1);
orderSupplierDOList.forEach(orderSupplierDO -> {
orderSupplierDO.setOrderPackageDOList(orderPackageDOList.stream().filter(orderPackageDO -> orderPackageDO.getOrderSupplierId().equals(orderSupplierDO.getOrderSupplierId())).toList());
});
LambdaQueryWrapper<OrderCostDO> queryWrapper4 = Wrappers.lambdaQuery(OrderCostDO.class);
queryWrapper4.in(OrderCostDO::getOrderId, orderIdList);
List<OrderCostDO> orderCostDOList = orderCostMapper.selectList(queryWrapper4);
LambdaQueryWrapper<OrderCostItemDO> queryWrapper5 = Wrappers.lambdaQuery(OrderCostItemDO.class);
queryWrapper5.in(OrderCostItemDO::getOrderId, orderIdList);
List<OrderCostItemDO> orderCostItemDOList = orderCostItemMapper.selectList(queryWrapper5);
orderDOList.forEach(orderDO -> {
orderDO.setOrderPackageDOList(orderPackageDOList.stream().filter(orderPackageDO -> Objects.isNull(orderPackageDO.getOrderSupplierId()) && orderPackageDO.getOrderId().equals(orderDO.getOrderId())).toList());
orderDO.setOrderCostDOList(orderCostDOList.stream().filter(orderCostDO -> orderCostDO.getOrderId().equals(orderDO.getOrderId())).toList());
orderDO.setOrderCostItemDOList(orderCostItemDOList.stream().filter(orderCostItemDO -> orderCostItemDO.getOrderId().equals(orderDO.getOrderId())).toList());
orderDO.setOrderVehicleDO(orderVehicleDOMap.get(orderDO.getOrderId()));
orderDO.setOrderSupplierDOList(orderSupplierDOList.stream().filter(orderSupplierDO -> orderSupplierDO.getOrderId().equals(orderDO.getOrderId())).toList());
});
}
return orderDOList.stream().map(orderConvert::toOrder).toList(); return orderDOList.stream().map(orderConvert::toOrder).toList();
} }

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.xunhong.erp.turbo.api.biz.dto.qry.OrderListQry;
import com.xunhong.erp.turbo.api.biz.dto.qry.OrderPageQry; import com.xunhong.erp.turbo.api.biz.dto.qry.OrderPageQry;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderDO; import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -22,5 +23,7 @@ public interface OrderMapper extends BaseMapper<OrderDO> {
OrderDO selectByOrderId(@Param("orderId") Long orderId); OrderDO selectByOrderId(@Param("orderId") Long orderId);
IPage<OrderDO> selectPage(IPage<OrderDO> page, @Param(Constants.WRAPPER) LambdaQueryWrapper<OrderDO> queryWrapper, @Param("query") OrderPageQry orderPageQry); IPage<OrderDO> selectPage(IPage<OrderDO> page, @Param(Constants.WRAPPER) LambdaQueryWrapper<OrderDO> queryWrapper, @Param("query") OrderPageQry orderPageQry);
List<OrderDO> selectByQueryList(@Param(Constants.WRAPPER)LambdaQueryWrapper<OrderDO> queryWrapper, @Param("query") OrderListQry orderListQry);
} }

View File

@ -31,6 +31,7 @@
<result property="dealerName" column="dealer_name"/> <result property="dealerName" column="dealer_name"/>
<result property="origin" column="origin"/> <result property="origin" column="origin"/>
<result property="destination" column="destination"/> <result property="destination" column="destination"/>
<result property="deliveryTime" column="deliveryTime"/>
</association> </association>
</resultMap> </resultMap>
@ -129,5 +130,32 @@
AND po.order_id = #{orderId} AND po.order_id = #{orderId}
limit 1 limit 1
</select> </select>
<select id="selectByQueryList"
resultType="com.xunhong.erp.turbo.biz.infrastructure.entity.OrderDO"
resultMap="BaseResultMap">
SELECT
po.*,
ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin,
ov.destination, ov.delivery_time
FROM `order` po
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete
= 0
<where>
po.is_delete = 0
<if test="query.dealerId != null">
AND ov.dealer_id = #{query.dealerId}
</if>
<if test="query.month != null">
AND ov.delivery_time between #{query.month} and #{query.month}
+ INTERVAL 1 MONTH
</if>
<if test="ew!= null">
<if test="ew.nonEmptyOfWhere">
AND
</if>
${ew.sqlSegment}
</if>
</where>
</select>
</mapper> </mapper>

View File

@ -19,6 +19,9 @@ public class OrderListQry extends Query {
@Schema(title = "采购订单ID", type = "string") @Schema(title = "采购订单ID", type = "string")
private Long orderId; private Long orderId;
@Schema(title = "经销商ID", type = "string")
private Long dealerId;
@Schema(title = "采购订单编号", type = "string") @Schema(title = "采购订单编号", type = "string")
private String orderSn; private String orderSn;
@ -39,5 +42,11 @@ public class OrderListQry extends Query {
*/ */
@Schema(title = "采购类型1_产地采购2_市场采购") @Schema(title = "采购类型1_产地采购2_市场采购")
private OrderTypeEnum type; private OrderTypeEnum type;
/**
* 月份
*/
@Schema(title = "月份")
private String month;
} }