package com.ruoyi.fakeWarehousing.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.fakeWarehousing.dto.FakeDeliveryTrackDto; import com.ruoyi.fakeWarehousing.mapper.FakeCarrierOrderMapper; import com.ruoyi.fakeWarehousing.mapper.FakeDeliveryTrackMapper; import com.ruoyi.fakeWarehousing.pojo.FakeCarrierOrder; import com.ruoyi.fakeWarehousing.pojo.FakeDeliveryTrack; import com.ruoyi.fakeWarehousing.service.IFakeDeliveryTrackService; import lombok.RequiredArgsConstructor; import org.apache.poi.util.StringUtil; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; /** * 发货跟踪管理Service实现类 */ @Service @RequiredArgsConstructor public class FakeDeliveryTrackServiceImpl extends ServiceImpl implements IFakeDeliveryTrackService { private final FakeCarrierOrderMapper fakeCarrierOrderMapper; /** * 分页查询发货跟踪列表 * @param page 分页参数 * @return 分页结果 */ @Override public IPage selectAll(Page page, FakeDeliveryTrackDto fakeDeliveryTrackDto) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); // 1. 关键字keyword:模糊匹配承运商名称、车牌号、订单编号(任意一个匹配) if (StringUtil.isNotBlank(fakeDeliveryTrackDto.getKeyword())) { wrapper.and(w -> w.like(FakeDeliveryTrack::getCarrierName, fakeDeliveryTrackDto.getKeyword()) .or().like(FakeDeliveryTrack::getVehicleNo, fakeDeliveryTrackDto.getKeyword()) .or().like(FakeDeliveryTrack::getOrderCode, fakeDeliveryTrackDto.getKeyword())); } // 2. 发货时间shipTime:匹配LocalDate[startDate, endDate]时间范围(核心适配逻辑) LocalDate startDate = fakeDeliveryTrackDto.getStartDate(); LocalDate endDate = fakeDeliveryTrackDto.getEndDate(); if (startDate != null) { LocalDateTime startDateTime = LocalDateTime.of(startDate, LocalTime.MIN); wrapper.ge(FakeDeliveryTrack::getShipTime, startDateTime); } if (endDate != null) { LocalDateTime endDateTime = LocalDateTime.of(endDate, LocalTime.MAX); wrapper.le(FakeDeliveryTrack::getShipTime, endDateTime); } wrapper.orderByDesc(FakeDeliveryTrack::getShipTime); return baseMapper.selectPage(page, wrapper); } @Override public boolean saveDetail(FakeDeliveryTrack track) { fakeCarrierOrderMapper.update(null, new LambdaUpdateWrapper() .eq(FakeCarrierOrder::getId, track.getOrderId()) .set(FakeCarrierOrder::getOrderStatus, 2)); return baseMapper.insert(track) > 0; } }