package com.klp.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.klp.common.core.domain.PageQuery; import com.klp.common.core.page.TableDataInfo; import com.klp.common.utils.StringUtils; import com.klp.domain.WmsExpress; import com.klp.domain.bo.WmsExpressBo; import com.klp.domain.vo.WmsExpressVo; import com.klp.mapper.WmsExpressMapper; import com.klp.service.IWmsExpressService; import com.klp.utils.*; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 物流预览Service业务层处理 * * @author hdka * @date 2025-07-20 */ @RequiredArgsConstructor @Service public class WmsExpressServiceImpl implements IWmsExpressService { private final WmsExpressMapper baseMapper; /** * 查询物流预览 */ @Override public WmsExpressVo queryById(Long expressId){ return baseMapper.selectVoByIdPlus(expressId); } /** * 查询物流预览列表 */ @Override public TableDataInfo queryPageList(WmsExpressBo bo, PageQuery pageQuery) { QueryWrapper lqw = buildQueryWrapperPlus(bo); Page result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw); return TableDataInfo.build(result); } /** * 查询物流预览列表 */ @Override public List queryList(WmsExpressBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper buildQueryWrapper(WmsExpressBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(bo.getExpressCode())) { lqw.like(WmsExpress::getExpressCode, bo.getExpressCode()); } if (bo.getStatus() != null) { lqw.eq(WmsExpress::getStatus, bo.getStatus()); } if (StringUtils.isNotBlank(bo.getSupplyName())) { lqw.like(WmsExpress::getSupplyName, bo.getSupplyName()); } if (StringUtils.isNotBlank(bo.getSupplyPhone())) { lqw.eq(WmsExpress::getSupplyPhone, bo.getSupplyPhone()); } if (bo.getOwnerId() != null) { lqw.eq(WmsExpress::getOwnerId, bo.getOwnerId()); } if (StringUtils.isNotBlank(bo.getOwnerPhone())) { lqw.eq(WmsExpress::getOwnerPhone, bo.getOwnerPhone()); } if (bo.getPlanDate() != null) { lqw.eq(WmsExpress::getPlanDate, bo.getPlanDate()); } if (StringUtils.isNotBlank(bo.getExpressType())) { lqw.eq(WmsExpress::getExpressType, bo.getExpressType()); } return lqw; } private QueryWrapper buildQueryWrapperPlus(WmsExpressBo bo) { Map params = bo.getParams(); QueryWrapper qw = new QueryWrapper<>(); // 设置表别名 if (StringUtils.isNotBlank(bo.getExpressCode())) { qw.like("oe.express_code", bo.getExpressCode()); } if (bo.getStatus() != null) { qw.eq("oe.status", bo.getStatus()); } if (StringUtils.isNotBlank(bo.getSupplyName())) { qw.like("oe.supply_name", bo.getSupplyName()); } if (StringUtils.isNotBlank(bo.getSupplyPhone())) { qw.eq("oe.supply_phone", bo.getSupplyPhone()); } if (bo.getOwnerId() != null) { qw.eq("oe.owner_id", bo.getOwnerId()); } if (StringUtils.isNotBlank(bo.getOwnerPhone())) { qw.eq("oe.owner_phone", bo.getOwnerPhone()); } if (bo.getPlanDate() != null) { qw.eq("oe.plan_date", bo.getPlanDate()); } if (StringUtils.isNotBlank(bo.getExpressType())) { qw.eq("oe.express_type", bo.getExpressType()); } // 添加逻辑删除条件 qw.eq("oe.del_flag", 0); return qw; } /** * 新增物流预览 */ @Override public Boolean insertByBo(WmsExpressBo bo) { WmsExpress add = BeanUtil.toBean(bo, WmsExpress.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setExpressId(add.getExpressId()); } return flag; } /** * 修改物流预览 */ @Override public Boolean updateByBo(WmsExpressBo bo) { WmsExpress update = BeanUtil.toBean(bo, WmsExpress.class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(WmsExpress entity){ //TODO 做一些数据校验,如唯一约束 } /** * 批量删除物流预览 */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; } /** * 获取所有需要刷新的快递ID(示例:所有类型为SF且状态为1的快递单) */ public List getAllSfExpressIdsToRefresh() { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(WmsExpress::getExpressType, "SF"); lqw.eq(WmsExpress::getStatus, 1L); List list = baseMapper.selectList(lqw); return list.stream().map(WmsExpress::getExpressId).collect(Collectors.toList()); } @Override public Boolean getRefreshExpress(List expressIds) throws IOException { for (Long expressId : expressIds) { WmsExpressVo WmsExpressVo = baseMapper.selectVoById(expressId); String expressType = WmsExpressVo.getExpressType(); if (expressType.equals("SF") && WmsExpressVo.getStatus() ==1L) { // 校验为顺丰则进入此位置更新状态 String result = SfRouteQueryUtil.queryRoute(WmsExpressVo.getExpressCode(), WmsExpressVo.getOwnerPhone() != null ? WmsExpressVo.getOwnerPhone() : WmsExpressVo.getSupplyPhone()); WmsExpressVo WmsExpressVo1 = SfRouteQueryUtil.parseData(result); if (WmsExpressVo1 != null) { WmsExpressVo.setLastUpdateTime(WmsExpressVo1.getAcceptTime()); WmsExpressVo.setLastStatus(WmsExpressVo1.getFirstStatusName()); } } if (expressType.equals("ZTO") && WmsExpressVo.getStatus() ==1L) { // 校验为顺丰则进入此位置更新状态 WmsExpressVo WmsExpressVo1 = ZtoTrackQueryUtil.queryTrack(WmsExpressVo.getExpressCode(), WmsExpressVo.getOwnerPhone() != null ? WmsExpressVo.getOwnerPhone() : WmsExpressVo.getSupplyPhone()); if (WmsExpressVo1 != null) { WmsExpressVo.setLastUpdateTime(WmsExpressVo1.getAcceptTime()); WmsExpressVo.setLastStatus(WmsExpressVo1.getFirstStatusName()); } } if (expressType.equals("Best") && WmsExpressVo.getStatus() ==1L) { // 校验为顺丰则进入此位置更新状态 WmsExpressVo WmsExpressVo1 = BestRouteQueryUtil.queryRoute(WmsExpressVo.getExpressCode()); if (WmsExpressVo1 != null) { WmsExpressVo.setLastUpdateTime(WmsExpressVo1.getAcceptTime()); WmsExpressVo.setLastStatus(WmsExpressVo1.getFirstStatusName()); } } if (expressType.equals("YD") && WmsExpressVo.getStatus() == 1L) { // 韵达快递轨迹查询 String result = com.klp.utils.YdRouteQueryUtil.queryRoute(WmsExpressVo.getExpressCode()); WmsExpressVo ydVo = YdRouteQueryUtil.parseData(result); if (ydVo != null) { WmsExpressVo.setLastUpdateTime(ydVo.getLastUpdateTime()); WmsExpressVo.setLastStatus(ydVo.getLastStatus()); } } if (expressType.equals("YT") && WmsExpressVo.getStatus() == 1L) { // 圆通快递轨迹查询 String result = com.klp.utils.YtRouteQueryUtil.queryRoute(WmsExpressVo.getExpressCode()); WmsExpressVo ytVo = YtRouteQueryUtil.parseData(result); if (ytVo != null) { WmsExpressVo.setLastUpdateTime(ytVo.getLastUpdateTime()); WmsExpressVo.setLastStatus(ytVo.getLastStatus()); } } if (expressType.equals("STO") && WmsExpressVo.getStatus() == 1L) { // 申通快递轨迹查询 String result = StoRouteQueryUtil.queryRoute(Collections.singletonList(WmsExpressVo.getExpressCode())); WmsExpressVo stoVo = StoRouteQueryUtil.parseData(result); if (stoVo != null) { WmsExpressVo.setLastUpdateTime(stoVo.getAcceptTime()); WmsExpressVo.setLastStatus(stoVo.getFirstStatusName()); } } if (expressType.equals("SXJD") && WmsExpressVo.getStatus() == 1L) { // 顺心捷达快递轨迹查询 String result = SxjdRouteQueryUtil.queryRoute(WmsExpressVo.getExpressCode()); WmsExpressVo sxjdVo = SxjdRouteQueryUtil.parseData(result); if (sxjdVo != null) { WmsExpressVo.setLastUpdateTime(sxjdVo.getLastUpdateTime()); WmsExpressVo.setLastStatus(sxjdVo.getLastStatus()); } } WmsExpress add = BeanUtil.toBean(WmsExpressVo, WmsExpress.class); baseMapper.updateById(add);; } return true; } }