diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/AlipayCallbackController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/AlipayCallbackController.java index 548657e74..1f11b5f86 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/AlipayCallbackController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/AlipayCallbackController.java @@ -155,7 +155,7 @@ public class AlipayCallbackController extends XktBaseController { } } logger.warn("支付宝回调订单匹配失败:{}", params); - return FAILURE; + return SUCCESS; } logger.warn("支付宝验签未通过:{}", params); return FAILURE; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreOrderController.java index 77f4b67b7..210cddeb9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreOrderController.java @@ -1,6 +1,7 @@ package com.ruoyi.web.controller.xkt; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.ListUtil; import com.alibaba.fastjson2.JSON; import com.github.pagehelper.Page; import com.ruoyi.common.annotation.Log; @@ -139,6 +140,20 @@ public class StoreOrderController extends XktBaseController { return success(); } + @ApiOperation(value = "订单物流信息") + @GetMapping(value = "/{id}/track") + public R> getOrderTracks(@PathVariable("id") Long id) { + StoreOrder order = storeOrderService.getById(id); + if (SecurityUtils.isAdmin() + || Objects.equals(order.getOrderUserId(), SecurityUtils.getUserId()) + || Objects.equals(order.getStoreId(), SecurityUtils.getStoreId())) { + return success(BeanUtil.copyToList(storeOrderService.getOrderExpressTracks(id), + StoreOrderInfoVO.Track.class)); + } + //没有订单权限 + return success(ListUtil.empty()); + } + @PreAuthorize("@ss.hasAnyRoles('store,seller')||@ss.hasSupplierSubRole()") @ApiOperation(value = "订单分页查询") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderInfoVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderInfoVO.java index c8131ccfe..c4f7ab967 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderInfoVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderInfoVO.java @@ -245,9 +245,6 @@ public class StoreOrderInfoVO { @ApiModelProperty(value = "订单明细") private List orderDetails; - @ApiModelProperty(value = "轨迹信息") - private List expressTracks; - @ApiModelProperty(value = "下单用户昵称") private String orderUserNickName; @@ -392,8 +389,8 @@ public class StoreOrderInfoVO { @ApiModelProperty(value = "更新时间") private Date updateTime; - @ApiModelProperty(value = "档口商品名称") - private String prodName; +// @ApiModelProperty(value = "档口商品名称") +// private String prodName; @ApiModelProperty(value = "商品货号") private String prodArtNum; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderPageItemVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderPageItemVO.java index b6039e982..cb650bf43 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderPageItemVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderPageItemVO.java @@ -390,8 +390,8 @@ public class StoreOrderPageItemVO extends StoreOrderDTO { @ApiModelProperty(value = "更新时间") private Date updateTime; - @ApiModelProperty(value = "档口商品名称") - private String prodName; +// @ApiModelProperty(value = "档口商品名称") +// private String prodName; @ApiModelProperty(value = "商品货号") private String prodArtNum; diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderDetailDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderDetailDTO.java index c4f06bc9b..ef70d0c6f 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderDetailDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderDetailDTO.java @@ -29,10 +29,6 @@ public class StoreOrderDetailDTO { * 商品ID */ private Long storeProdId; - /** - * 商品名称 - */ - private String prodName; /** * 商品货号 */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderInfoDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderInfoDTO.java index ec7d73866..eb458c509 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderInfoDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderInfoDTO.java @@ -43,5 +43,4 @@ public class StoreOrderInfoDTO extends StoreOrderDTO { private List orderDetails; - private List expressTracks; } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreOrderService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreOrderService.java index 5e87d0a46..9a07afb87 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreOrderService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreOrderService.java @@ -3,6 +3,7 @@ package com.ruoyi.xkt.service; import com.github.pagehelper.Page; import com.ruoyi.xkt.domain.StoreOrder; import com.ruoyi.xkt.dto.express.ExpressPrintDTO; +import com.ruoyi.xkt.dto.express.ExpressTrackDTO; import com.ruoyi.xkt.dto.order.*; import com.ruoyi.xkt.enums.EPayChannel; import com.ruoyi.xkt.enums.EPayPage; @@ -61,6 +62,14 @@ public interface IStoreOrderService { */ StoreOrderInfoDTO getInfo(Long storeOrderId); + /** + * 获取订单轨迹 + * + * @param storeOrderId + * @return + */ + List getOrderExpressTracks(Long storeOrderId); + /** * 分页查询订单 * diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java index 5ce1620f2..76f9ad929 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java @@ -383,34 +383,6 @@ public class StoreOrderServiceImpl implements IStoreOrderService { //物流信息 Map expressNameMap = expressService.getAllExpressNameMap(); orderInfo.setExpressName(expressNameMap.get(order.getExpressId())); - Map> expressWaybillGroupMap = detailInfos.stream() - .filter(o -> StrUtil.isNotEmpty(o.getExpressWaybillNo())) - .collect(Collectors.groupingBy(StoreOrderDetailInfoDTO::getExpressWaybillNo)); - Map> trackRecordGroupMap = expressService.listTrackRecord( - expressWaybillGroupMap.keySet()) - .stream() - .collect(Collectors.groupingBy(ExpressTrackRecordDTO::getExpressWaybillNo)); - List expressTracks = new ArrayList<>(expressWaybillGroupMap.size()); - for (Map.Entry> entry : expressWaybillGroupMap.entrySet()) { - ExpressTrackDTO expressTrackDTO = new ExpressTrackDTO(); - List goodsSummaries = entry.getValue().stream() - .map(o -> StrUtil.concat(true, o.getProdArtNum(), ", ", o.getColorName(), ", ", - String.valueOf(o.getSize()))).collect(Collectors.toList()); - //发货时间 - Long detailId = CollUtil.getFirst(entry.getValue()).getId(); - StoreOrderOperationRecordDTO shipRecord = operationRecordService.getOneRecord(detailId, - EOrderTargetTypeAction.ORDER_DETAIL, EOrderAction.SHIP); - expressTrackDTO.setCreateTime(Optional.ofNullable(shipRecord) - .map(StoreOrderOperationRecordDTO::getOperationTime).orElse(null)); - Long expressId = CollUtil.getFirst(entry.getValue()).getExpressId(); - expressTrackDTO.setExpressId(expressId); - expressTrackDTO.setExpressName(expressNameMap.get(expressId)); - expressTrackDTO.setExpressWaybillNo(entry.getKey()); - expressTrackDTO.setGoodsSummary(StrUtil.join("; ", goodsSummaries)); - expressTrackDTO.setRecords(trackRecordGroupMap.get(entry.getKey())); - expressTracks.add(expressTrackDTO); - } - orderInfo.setExpressTracks(expressTracks); Map regionMap = expressService.getRegionNameMapCache(); orderInfo.setDestinationProvinceName(regionMap.get(orderInfo.getDestinationProvinceCode())); orderInfo.setDestinationCityName(regionMap.get(orderInfo.getDestinationCityCode())); @@ -449,6 +421,51 @@ public class StoreOrderServiceImpl implements IStoreOrderService { return orderInfo; } + @Override + public List getOrderExpressTracks(Long storeOrderId) { + Assert.notNull(storeOrderId); + //物流信息 + Map expressNameMap = expressService.getAllExpressNameMap(); + Map> expressWaybillGroupMap = storeOrderDetailMapper.selectList(Wrappers + .lambdaQuery(StoreOrderDetail.class) + .eq(StoreOrderDetail::getStoreOrderId, storeOrderId) + .eq(SimpleEntity::getDelFlag, Constants.UNDELETED)) + .stream() + .filter(o -> StrUtil.isNotEmpty(o.getExpressWaybillNo())) + .collect(Collectors.groupingBy(StoreOrderDetail::getExpressWaybillNo)); + Map> trackRecordGroupMap = expressService.listTrackRecord( + expressWaybillGroupMap.keySet()) + .stream() + .collect(Collectors.groupingBy(ExpressTrackRecordDTO::getExpressWaybillNo)); + List expressTracks = new ArrayList<>(expressWaybillGroupMap.size()); + for (Map.Entry> entry : expressWaybillGroupMap.entrySet()) { + ExpressTrackDTO expressTrackDTO = new ExpressTrackDTO(); + List goodsSummaries = entry.getValue().stream() + .map(o -> StrUtil.concat(true, o.getProdArtNum(), ", ", o.getColorName(), ", ", + String.valueOf(o.getSize()))).collect(Collectors.toList()); + //发货时间 + Long detailId = CollUtil.getFirst(entry.getValue()).getId(); + StoreOrderOperationRecordDTO shipRecord = operationRecordService.getOneRecord(detailId, + EOrderTargetTypeAction.ORDER_DETAIL, EOrderAction.SHIP); + expressTrackDTO.setCreateTime(Optional.ofNullable(shipRecord) + .map(StoreOrderOperationRecordDTO::getOperationTime).orElse(null)); + StoreOrderDetail oneDetail = CollUtil.getFirst(entry.getValue()); + Long expressId = oneDetail.getExpressId(); + expressTrackDTO.setExpressId(expressId); + expressTrackDTO.setExpressName(expressNameMap.get(expressId)); + expressTrackDTO.setExpressWaybillNo(entry.getKey()); + expressTrackDTO.setGoodsSummary(StrUtil.join("; ", goodsSummaries)); + if (EExpressType.PLATFORM.getValue().equals(oneDetail.getExpressType())) { + expressTrackDTO.setRecords(trackRecordGroupMap.get(entry.getKey())); + } else { + //TODO 商家自发货,从三方接口查询轨迹 +// String [] expressWaybillNos = entry.getKey().split(","); + } + expressTracks.add(expressTrackDTO); + } + return expressTracks; + } + @Override public Page page(StoreOrderQueryDTO queryDTO) { Page page = PageHelper.startPage(queryDTO.getPageNum(), queryDTO.getPageSize());