From 1c2bbe27279510d1ffd65d192fa277299fb6e6e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E5=AE=87=E5=A5=87?= Date: Thu, 24 Jul 2025 00:29:09 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/xkt/StoreOrderController.java | 31 +++++++-- .../xkt/vo/order/StoreOrderCountVO.java | 69 +++++++++++++++++++ .../xkt/vo/order/StoreOrderPrintReqVO.java | 3 + .../xkt/vo/order/StoreOrderQueryVO.java | 3 + .../xkt/dto/order/StoreOrderCountDTO.java | 55 +++++++++++++++ .../dto/order/StoreOrderCountQueryDTO.java | 29 ++++++++ .../xkt/dto/order/StoreOrderQueryDTO.java | 4 ++ .../ruoyi/xkt/mapper/StoreOrderMapper.java | 4 ++ .../ruoyi/xkt/service/IStoreOrderService.java | 11 ++- .../service/impl/StoreOrderServiceImpl.java | 13 +++- .../resources/mapper/StoreOrderMapper.xml | 32 +++++++++ 11 files changed, 247 insertions(+), 7 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderCountVO.java create mode 100644 xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderCountDTO.java create mode 100644 xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderCountQueryDTO.java 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 35c74845c..e27cbb4ed 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 @@ -2,6 +2,8 @@ package com.ruoyi.web.controller.xkt; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson2.JSON; import com.github.pagehelper.Page; import com.ruoyi.common.annotation.Log; @@ -43,10 +45,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -179,6 +178,28 @@ public class StoreOrderController extends XktBaseController { return success(PageVO.of(pageDTO, StoreOrderPageItemVO.class)); } + @PreAuthorize("@ss.hasAnyRoles('store,seller')||@ss.hasSupplierSubRole()") + @ApiOperation(value = "订单物流信息") + @GetMapping(value = "/count/{srcPage}") + public R count(@PathVariable("srcPage") Long srcPage) { + StoreOrderCountQueryDTO queryDTO = new StoreOrderCountQueryDTO(); + if (1 == srcPage) { + queryDTO.setOrderUserId(SecurityUtils.getUserId()); + } else { + Long storeId = SecurityUtils.getStoreId(); + if (storeId == null && !SecurityUtils.isAdmin()) { + //没有权限 + return R.fail(); + } + queryDTO.setStoreId(storeId); + } + //半年内 + Date now = new Date(); + queryDTO.setCreateTimeBegin(DateUtil.offset(now, DateField.MONTH, -6)); + queryDTO.setCreateTimeEnd(now); + return success(BeanUtil.toBean(storeOrderService.count(queryDTO), StoreOrderCountVO.class)); + } + @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()") @Log(title = "订单", businessType = BusinessType.OTHER) @ApiOperation("发货-有单号(已打印快递单)") @@ -229,7 +250,7 @@ public class StoreOrderController extends XktBaseController { storeOrderService.checkOrderStore(vo.getStoreOrderDetailIds(), SecurityUtils.getStoreId()); } ExpressShippingLabelDTO dto = storeOrderService.printOrder(vo.getStoreOrderId(), - vo.getStoreOrderDetailIds(), vo.getExpressId(), SecurityUtils.getUserId()); + vo.getStoreOrderDetailIds(), vo.getExpressId(), vo.getNeedShip(), SecurityUtils.getUserId()); return success(DesensitizationUtil.desensitize(BeanUtil.toBean(dto, ExpressShippingLabelVO.class))); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderCountVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderCountVO.java new file mode 100644 index 000000000..e26c034be --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderCountVO.java @@ -0,0 +1,69 @@ +package com.ruoyi.web.controller.xkt.vo.order; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author liangyq + * @date 2025-07-23 + */ +@ApiModel +@Data +public class StoreOrderCountVO { + /** + * 全部订单 + */ + @ApiModelProperty(value = "全部订单") + private Integer all; + /** + * 售后订单(退款/售后) + */ + @ApiModelProperty(value = "售后订单(退款/售后)") + private Integer afterSale; + /** + * 已取消 + */ + @ApiModelProperty(value = "已取消") + private Integer cancelled; + /** + * 待付款 + */ + @ApiModelProperty(value = "待付款") + private Integer pendingPayment; + /** + * 待发货 + */ + @ApiModelProperty(value = "待发货") + private Integer pendingShipment; + /** + * 已发货 + */ + @ApiModelProperty(value = "已发货") + private Integer shipped; + /** + * 已完成 + */ + @ApiModelProperty(value = "已完成") + private Integer completed; + /** + * 售后中 + */ + @ApiModelProperty(value = "售后中") + private Integer afterSaleInProgress; + /** + * 售后拒绝 + */ + @ApiModelProperty(value = "售后拒绝") + private Integer afterSaleRejected; + /** + * 平台介入 + */ + @ApiModelProperty(value = "平台介入") + private Integer platformIntervened; + /** + * 售后完成 + */ + @ApiModelProperty(value = "售后完成") + private Integer afterSaleCompleted; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderPrintReqVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderPrintReqVO.java index def3a7608..2ad953c1b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderPrintReqVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderPrintReqVO.java @@ -27,4 +27,7 @@ public class StoreOrderPrintReqVO { @NotNull(message = "物流ID不能为空") @ApiModelProperty(value = "物流ID", required = true) private Long expressId; + + @ApiModelProperty(value = "打印成功后立即发货", required = true) + private Boolean needShip; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderQueryVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderQueryVO.java index 3cc381bf6..d21a875ea 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderQueryVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/order/StoreOrderQueryVO.java @@ -34,6 +34,9 @@ public class StoreOrderQueryVO extends BasePageVO { */ @ApiModelProperty(value = "订单号(模糊)") private String orderNo; + + @ApiModelProperty(value = "售后订单原订单号") + private String originOrderNo; /** * 订单类型[1:销售订单 2:退货订单] */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderCountDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderCountDTO.java new file mode 100644 index 000000000..27878fa2c --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderCountDTO.java @@ -0,0 +1,55 @@ +package com.ruoyi.xkt.dto.order; + +import lombok.Data; + +/** + * @author liangyq + * @date 2025-07-23 + */ +@Data +public class StoreOrderCountDTO { + /** + * 全部订单 + */ + private Integer all; + /** + * 售后订单(退款/售后) + */ + private Integer afterSale; + /** + * 已取消 + */ + private Integer cancelled; + /** + * 待付款 + */ + private Integer pendingPayment; + /** + * 待发货 + */ + private Integer pendingShipment; + /** + * 已发货 + */ + private Integer shipped; + /** + * 已完成 + */ + private Integer completed; + /** + * 售后中 + */ + private Integer afterSaleInProgress; + /** + * 售后拒绝 + */ + private Integer afterSaleRejected; + /** + * 平台介入 + */ + private Integer platformIntervened; + /** + * 售后完成 + */ + private Integer afterSaleCompleted; +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderCountQueryDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderCountQueryDTO.java new file mode 100644 index 000000000..c9335c69d --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderCountQueryDTO.java @@ -0,0 +1,29 @@ +package com.ruoyi.xkt.dto.order; + +import lombok.Data; + +import java.util.Date; + +/** + * @author liangyq + * @date 2025-07-23 + */ +@Data +public class StoreOrderCountQueryDTO { + /** + * 档口ID + */ + private Long storeId; + /** + * 下单用户ID + */ + private Long orderUserId; + /** + * 开始时间 + */ + private Date createTimeBegin; + /** + * 结束时间 + */ + private Date createTimeEnd; +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderQueryDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderQueryDTO.java index d8670f07b..383d05bdb 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderQueryDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderQueryDTO.java @@ -27,6 +27,10 @@ public class StoreOrderQueryDTO extends BasePageDTO { * 订单号(模糊) */ private String orderNo; + /** + * 售后订单原订单号 + */ + private String originOrderNo; /** * 订单类型[1:销售订单 2:退货订单] */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreOrderMapper.java b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreOrderMapper.java index 7140141db..21e391296 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreOrderMapper.java +++ b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreOrderMapper.java @@ -2,6 +2,8 @@ package com.ruoyi.xkt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.xkt.domain.StoreOrder; +import com.ruoyi.xkt.dto.order.StoreOrderCountDTO; +import com.ruoyi.xkt.dto.order.StoreOrderCountQueryDTO; import com.ruoyi.xkt.dto.order.StoreOrderPageItemDTO; import com.ruoyi.xkt.dto.order.StoreOrderQueryDTO; import org.springframework.stereotype.Repository; @@ -18,4 +20,6 @@ public interface StoreOrderMapper extends BaseMapper { List listStoreOrderPageItem(StoreOrderQueryDTO queryDTO); List listNeedContinueRefundOrder(); + + StoreOrderCountDTO countOrder(StoreOrderCountQueryDTO queryDTO); } 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 a7cc3b500..b4c2d2812 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreOrderService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreOrderService.java @@ -94,6 +94,14 @@ public interface IStoreOrderService { */ Page page(StoreOrderQueryDTO queryDTO); + /** + * 订单统计 + * + * @param queryDTO + * @return + */ + StoreOrderCountDTO count(StoreOrderCountQueryDTO queryDTO); + /** * 准备支付订单 * @@ -150,11 +158,12 @@ public interface IStoreOrderService { * @param storeOrderId * @param storeOrderDetailIds * @param expressId + * @param needShip * @param operatorId * @return */ ExpressShippingLabelDTO printOrder(Long storeOrderId, List storeOrderDetailIds, Long expressId, - Long operatorId); + Boolean needShip, Long operatorId); /** * 确认收货 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 229a2f3ef..a4128793f 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 @@ -20,6 +20,7 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.bean.BeanValidators; +import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.xkt.domain.*; import com.ruoyi.xkt.dto.express.*; @@ -594,6 +595,11 @@ public class StoreOrderServiceImpl implements IStoreOrderService { return page; } + @Override + public StoreOrderCountDTO count(StoreOrderCountQueryDTO queryDTO) { + return storeOrderMapper.countOrder(queryDTO); + } + @Transactional(rollbackFor = Exception.class) @Override public StoreOrderExt preparePayOrder(Long storeOrderId, EPayChannel payChannel) { @@ -898,9 +904,10 @@ public class StoreOrderServiceImpl implements IStoreOrderService { return new StoreOrderExt(order, orderDetails); } + @Transactional(rollbackFor = Exception.class) @Override public ExpressShippingLabelDTO printOrder(Long storeOrderId, List storeOrderDetailIds, Long expressId, - Long operatorId) { + Boolean needShip, Long operatorId) { Assert.notEmpty(storeOrderDetailIds); ExpressManager expressManager = expressService.getExpressManager(expressId); Express express = expressService.getById(expressId); @@ -982,6 +989,10 @@ public class StoreOrderServiceImpl implements IStoreOrderService { //操作记录 addOperationRecords(order.getId(), EOrderAction.EXPRESS_SHIP, orderDetailIdList, EOrderAction.EXPRESS_SHIP, "打印快递单", operatorId, new Date()); + if (Boolean.TRUE.equals(needShip)) { + //立即发货 + SpringUtils.getAopProxy(this).shipOrderByPlatform(storeOrderId, storeOrderDetailIds, operatorId); + } return shippingLabelDTO; } diff --git a/xkt/src/main/resources/mapper/StoreOrderMapper.xml b/xkt/src/main/resources/mapper/StoreOrderMapper.xml index d1c7c4aa2..17f1b1818 100644 --- a/xkt/src/main/resources/mapper/StoreOrderMapper.xml +++ b/xkt/src/main/resources/mapper/StoreOrderMapper.xml @@ -24,6 +24,9 @@ AND so.order_no LIKE CONCAT('%', #{orderNo}, '%') + + AND EXISTS (SELECT 1 FROM store_order so1 WHERE so1.id = so.origin_order_id AND so1.order_no = #{originOrderNo} AND so1.del_flag = '0') + AND so.order_type = #{orderType} @@ -70,4 +73,33 @@ AND sod.pay_status = 2 ) + \ No newline at end of file