Files
klp-oa/klp-wms/src/main/java/com/klp/service/impl/WmsExpressServiceImpl.java
Joshi 55acbed0cb feat(klp-wms): 添加顺心捷达快递轨迹查询功能- 新增 SxjdRouteQueryUtil 工具类,实现顺心捷达快递的电子运单创建和轨迹查询
- 在 WmsExpressServiceImpl 中集成顺心捷达的轨迹查询功能
- 添加 jd-sdk 依赖,用于顺心捷达快递的相关操作
2025-08-13 13:57:59 +08:00

256 lines
10 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<WmsExpressVo> queryPageList(WmsExpressBo bo, PageQuery pageQuery) {
QueryWrapper<WmsExpress> lqw = buildQueryWrapperPlus(bo);
Page<WmsExpressVo> result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询物流预览列表
*/
@Override
public List<WmsExpressVo> queryList(WmsExpressBo bo) {
LambdaQueryWrapper<WmsExpress> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<WmsExpress> buildQueryWrapper(WmsExpressBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WmsExpress> 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<WmsExpress> buildQueryWrapperPlus(WmsExpressBo bo) {
Map<String, Object> params = bo.getParams();
QueryWrapper<WmsExpress> 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<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 获取所有需要刷新的快递ID示例所有类型为SF且状态为1的快递单
*/
public List<Long> getAllSfExpressIdsToRefresh() {
LambdaQueryWrapper<WmsExpress> lqw = Wrappers.lambdaQuery();
lqw.eq(WmsExpress::getExpressType, "SF");
lqw.eq(WmsExpress::getStatus, 1L);
List<WmsExpress> list = baseMapper.selectList(lqw);
return list.stream().map(WmsExpress::getExpressId).collect(Collectors.toList());
}
@Override
public Boolean getRefreshExpress(List<Long> 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;
}
}