diff --git a/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleNumVO.java b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleNumVO.java new file mode 100644 index 000000000..ab9d9c3df --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleNumVO.java @@ -0,0 +1,33 @@ +package cn.lili.modules.order.aftersale.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 售后数量VO + * + * @author Bulbasaur + * @since 2021/3/12 10:32 上午 + */ +@Data +public class AfterSaleNumVO { + + @ApiModelProperty(value = "申请中售后数量") + private Integer applyNum; + @ApiModelProperty(value = "已通过售后数量") + private Integer passNum; + @ApiModelProperty(value = "已拒绝售后数量") + private Integer refuseNum; + @ApiModelProperty(value = "待卖家收货售后数量") + private Integer buyerReturnNum; + @ApiModelProperty(value = "卖家确认收货售后数量") + private Integer sellerConfirmNum; + @ApiModelProperty(value = "卖家终止售后售后数量") + private Integer sellerTerminationNum; + @ApiModelProperty(value = "买家取消售后售后数量") + private Integer buyerCancelNum; + @ApiModelProperty(value = "等待平台退款售后数量") + private Integer waitRefundNum; + @ApiModelProperty(value = "已完成售后数量") + private Integer completeNum; +} diff --git a/framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleService.java b/framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleService.java index 9a16a4cb9..4fa8f7ef1 100644 --- a/framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleService.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleService.java @@ -4,6 +4,7 @@ package cn.lili.modules.order.aftersale.service; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleApplyVO; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleNumVO; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; @@ -30,6 +31,9 @@ public interface AfterSaleService extends IService { */ IPage getAfterSalePages(AfterSaleSearchParams saleSearchParams); + + AfterSaleNumVO getAfterSaleNumVO(AfterSaleSearchParams saleSearchParams); + /** * 查询导出售后信息 * diff --git a/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java index 98bb2f96b..26ab8341f 100644 --- a/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java @@ -2,7 +2,6 @@ package cn.lili.modules.order.aftersale.serviceimpl; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.NumberUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.event.TransactionCommitSendMQEvent; @@ -18,6 +17,7 @@ import cn.lili.modules.order.aftersale.aop.AfterSaleLogPoint; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleApplyVO; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleNumVO; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO; import cn.lili.modules.order.aftersale.mapper.AfterSaleMapper; @@ -39,16 +39,13 @@ import cn.lili.modules.system.entity.dos.Logistics; import cn.lili.modules.system.entity.vo.Traces; import cn.lili.modules.system.service.LogisticsService; import cn.lili.mybatis.util.PageUtil; -import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.AfterSaleTagsEnum; -import cn.lili.rocketmq.tags.OrderTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; @@ -56,6 +53,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @@ -98,11 +96,6 @@ public class AfterSaleServiceImpl extends ServiceImpl baseWrapper = saleSearchParams.queryWrapper(); + + // 使用聚合查询一次性获取所有状态的售后数量 + List> results = this.baseMapper.selectMaps( + baseWrapper.select( + "COUNT(CASE WHEN service_status = 'APPLY' THEN 1 END) as applyNum", + "COUNT(CASE WHEN service_status = 'PASS' THEN 1 END) as passNum", + "COUNT(CASE WHEN service_status = 'REFUSE' THEN 1 END) as refuseNum", + "COUNT(CASE WHEN service_status = 'BUYER_RETURN' THEN 1 END) as buyerReturnNum", + "COUNT(CASE WHEN service_status = 'SELLER_CONFIRM' THEN 1 END) as sellerConfirmNum", + "COUNT(CASE WHEN service_status = 'SELLER_TERMINATION' THEN 1 END) as sellerTerminationNum", + "COUNT(CASE WHEN service_status = 'BUYER_CANCEL' THEN 1 END) as buyerCancelNum", + "COUNT(CASE WHEN service_status = 'WAIT_REFUND' THEN 1 END) as waitRefundNum", + "COUNT(CASE WHEN service_status = 'COMPLETE' THEN 1 END) as completeNum" + ) + ); + + if (!results.isEmpty()) { + Map result = results.get(0); + afterSaleNumVO.setApplyNum(((Number) result.get("applyNum")).intValue()); + afterSaleNumVO.setPassNum(((Number) result.get("passNum")).intValue()); + afterSaleNumVO.setRefuseNum(((Number) result.get("refuseNum")).intValue()); + afterSaleNumVO.setBuyerReturnNum(((Number) result.get("buyerReturnNum")).intValue()); + afterSaleNumVO.setSellerConfirmNum(((Number) result.get("sellerConfirmNum")).intValue()); + afterSaleNumVO.setSellerTerminationNum(((Number) result.get("sellerTerminationNum")).intValue()); + afterSaleNumVO.setBuyerCancelNum(((Number) result.get("buyerCancelNum")).intValue()); + afterSaleNumVO.setWaitRefundNum(((Number) result.get("waitRefundNum")).intValue()); + afterSaleNumVO.setCompleteNum(((Number) result.get("completeNum")).intValue()); + } else { + // 如果没有结果,设置默认值为0 + afterSaleNumVO.setApplyNum(0); + afterSaleNumVO.setPassNum(0); + afterSaleNumVO.setRefuseNum(0); + afterSaleNumVO.setBuyerReturnNum(0); + afterSaleNumVO.setSellerConfirmNum(0); + afterSaleNumVO.setSellerTerminationNum(0); + afterSaleNumVO.setBuyerCancelNum(0); + afterSaleNumVO.setWaitRefundNum(0); + afterSaleNumVO.setCompleteNum(0); + } + + return afterSaleNumVO; + } + @Override public List exportAfterSaleOrder(AfterSaleSearchParams saleSearchParams) { return this.list(saleSearchParams.queryWrapper()); diff --git a/manager-api/src/main/java/cn/lili/controller/order/AfterSaleManagerController.java b/manager-api/src/main/java/cn/lili/controller/order/AfterSaleManagerController.java index 2764615b5..4f6200a2c 100644 --- a/manager-api/src/main/java/cn/lili/controller/order/AfterSaleManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/order/AfterSaleManagerController.java @@ -4,6 +4,7 @@ import cn.lili.common.aop.annotation.PreventDuplicateSubmissions; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleNumVO; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO; import cn.lili.modules.order.aftersale.service.AfterSaleService; @@ -43,6 +44,12 @@ public class AfterSaleManagerController { return ResultUtil.data(afterSaleService.getAfterSalePages(searchParams)); } + @ApiOperation(value = "获取售后数量") + @GetMapping(value = "/afterSaleNumVO") + public ResultMessage getAfterSaleNumVO(AfterSaleSearchParams afterSaleSearchParams) { + return ResultUtil.data(afterSaleService.getAfterSaleNumVO(afterSaleSearchParams)); + } + @ApiOperation(value = "获取导出售后服务列表列表") @GetMapping(value = "/exportAfterSaleOrder") public ResultMessage> exportAfterSaleOrder(AfterSaleSearchParams searchParams) { diff --git a/seller-api/src/main/java/cn/lili/controller/order/AfterSaleStoreController.java b/seller-api/src/main/java/cn/lili/controller/order/AfterSaleStoreController.java index a8e99527e..b82b4b5b5 100644 --- a/seller-api/src/main/java/cn/lili/controller/order/AfterSaleStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/order/AfterSaleStoreController.java @@ -6,6 +6,7 @@ import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleNumVO; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO; import cn.lili.modules.order.aftersale.service.AfterSaleService; @@ -53,6 +54,12 @@ public class AfterSaleStoreController { return ResultUtil.data(afterSaleService.getAfterSalePages(searchParams)); } + @ApiOperation(value = "获取售后数量") + @GetMapping(value = "/afterSaleNumVO") + public ResultMessage getAfterSaleNumVO(AfterSaleSearchParams afterSaleSearchParams) { + return ResultUtil.data(afterSaleService.getAfterSaleNumVO(afterSaleSearchParams)); + } + @ApiOperation(value = "获取导出售后服务列表列表") @GetMapping(value = "/exportAfterSaleOrder") public ResultMessage> exportAfterSaleOrder(AfterSaleSearchParams searchParams) {