1.优化小程序端用户待付款、待发货、待收货、已完成、退货/售后总单量数据及对应订单明细查询功能

2.新增分销用户查询团队成员订单数、订单金额、团队成员数查询业务功能
This commit is contained in:
2026-05-05 17:39:26 +08:00
parent a575907623
commit 587caa78d7
7 changed files with 115 additions and 28 deletions

View File

@@ -1,19 +1,19 @@
package com.gxwebsoft.shop.controller;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.core.Constants;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.core.exception.BusinessException;
import com.gxwebsoft.shop.service.ShopDealerRefereeService;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.common.core.web.BatchParam;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.shop.entity.ShopDealerReferee;
import com.gxwebsoft.shop.param.ShopDealerRefereeParam;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.common.core.web.PageParam;
import com.gxwebsoft.common.core.web.BatchParam;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.shop.service.ShopDealerRefereeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springdoc.api.annotations.ParameterObject;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@@ -41,6 +41,13 @@ public class ShopDealerRefereeController extends BaseController {
return success(shopDealerRefereeService.pageRel(param));
}
@PreAuthorize("hasAuthority('shop:shopDealerReferee:list')")
@Operation(summary = "分页查询分销商推荐关系表")
@GetMapping("/appPage")
public ApiResult<PageResult<ShopDealerReferee>> appPage(@ParameterObject ShopDealerRefereeParam param) {
return success(shopDealerRefereeService.appPage(param));
}
@PreAuthorize("hasAuthority('shop:shopDealerReferee:list')")
@Operation(summary = "查询全部分销商推荐关系表")
@GetMapping()

View File

@@ -43,6 +43,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.Operation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springdoc.api.annotations.ParameterObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.Authentication;

View File

@@ -3,6 +3,8 @@ package com.gxwebsoft.shop.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
@@ -87,4 +89,16 @@ public class ShopDealerReferee implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
@Schema(description = "团队成员")
@TableField(exist = false)
private Integer teamNum;
@Schema(description = "订单数")
@TableField(exist = false)
private Integer orderNum;
@Schema(description = "订单金额")
@TableField(exist = false)
private BigDecimal orderAmount;
}

View File

@@ -233,10 +233,6 @@
OR b.nickname LIKE CONCAT('%', #{param.keywords}, '%')
)
</if>
<if test="param.statusFilter != 8">
<!-- 默认过滤已关闭订单 -->
AND a.order_status != 2
</if>
<!-- 订单状态筛选:-1全部0待支付1待发货2待核销3待收货4待评价5已完成6已退款7已删除 -->
<if test="param.statusFilter != null and param.statusFilter != -1">
<if test="param.statusFilter == 0">
@@ -245,27 +241,27 @@
</if>
<if test="param.statusFilter == 1">
<!-- 1待发货已付款但未发货 -->
AND a.pay_status = 1 AND a.delivery_status = 10 AND a.order_status = 0
AND a.pay_status = 1 AND a.delivery_status = 10 AND a.order_status = 0 AND a.order_type in(1, 3, 4)
</if>
<if test="param.statusFilter == 2">
<!-- 2待核销已付款但订单状态为未使用 -->
AND a.pay_status = 1 AND a.order_status = 0
AND a.pay_status = 1 AND a.order_status = 0 and order_type = 2
</if>
<if test="param.statusFilter == 3">
<!-- 3待收货已发货但订单状态不是已完成 -->
AND a.delivery_status = 20 AND a.order_status != 1
AND a.pay_status = 1 AND a.delivery_status = 20 AND a.order_status = 0
</if>
<if test="param.statusFilter == 4">
<!-- 4待评价订单已完成但可能需要评价 -->
AND a.order_status = 1 AND a.evaluate_status = 0
AND a.pay_status = 1 AND a.order_status = 1 AND a.evaluate_status = 0
</if>
<if test="param.statusFilter == 5">
<!-- 5已完成订单状态为已完成 -->
AND a.order_status = 1
AND a.pay_status = 1 AND a.order_status = 1
</if>
<if test="param.statusFilter == 6">
<!-- 6退款/售后:订单状态为退款成功 -->
AND (a.order_status = 4 OR a.order_status = 5 OR a.order_status = 6 OR a.order_status = 7)
AND a.pay_status = 1 AND a.order_status in(4, 5, 6, 7)
</if>
<if test="param.statusFilter == 7">
<!-- 7已删除订单被删除 -->
@@ -301,13 +297,13 @@
SELECT
-- “全部”默认也会过滤已关闭(取消)订单statusFilter != 8 时会加 a.order_status != 2
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.order_status != 2 THEN 1 ELSE 0 END), 0) AS total,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.order_status != 2 AND a.pay_status = 0 AND a.order_status = 0 THEN 1 ELSE 0 END), 0) AS waitPay,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.order_status != 2 AND a.pay_status = 1 AND a.delivery_status = 10 AND a.order_status = 0 THEN 1 ELSE 0 END), 0) AS waitDeliver,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.order_status != 2 AND a.pay_status = 1 AND a.order_status = 0 THEN 1 ELSE 0 END), 0) AS waitVerify,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.order_status != 2 AND a.delivery_status = 20 AND a.order_status != 1 THEN 1 ELSE 0 END), 0) AS waitReceive,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.order_status != 2 AND a.order_status = 1 AND a.evaluate_status = 0 THEN 1 ELSE 0 END), 0) AS waitComment,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.order_status != 2 AND a.order_status = 1 THEN 1 ELSE 0 END), 0) AS completed,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.order_status != 2 AND (a.order_status = 4 OR a.order_status = 5 OR a.order_status = 6 OR a.order_status = 7) THEN 1 ELSE 0 END), 0) AS refund,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 0 AND a.order_status = 0 THEN 1 ELSE 0 END), 0) AS waitPay,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 0 AND a.order_type in(1, 3, 4) AND a.delivery_status = 10 THEN 1 ELSE 0 END), 0) AS waitDeliver,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 0 AND a.order_type = 2 THEN 1 ELSE 0 END), 0) AS waitVerify,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 0 AND a.delivery_status = 20 THEN 1 ELSE 0 END), 0) AS waitReceive,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 1 AND a.evaluate_status = 0 THEN 1 ELSE 0 END), 0) AS waitComment,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status = 1 THEN 1 ELSE 0 END), 0) AS completed,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.pay_status = 1 AND a.order_status in(4, 5, 6, 7) THEN 1 ELSE 0 END), 0) AS refund,
COALESCE(SUM(CASE WHEN a.deleted = 1 THEN 1 ELSE 0 END), 0) AS deleted,
COALESCE(SUM(CASE WHEN a.deleted = 0 AND a.order_status = 2 THEN 1 ELSE 0 END), 0) AS canceled
FROM shop_order a

View File

@@ -1,15 +1,15 @@
package com.gxwebsoft.shop.param;
import java.math.BigDecimal;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.gxwebsoft.common.core.annotation.QueryField;
import com.gxwebsoft.common.core.annotation.QueryType;
import com.gxwebsoft.common.core.web.BaseParam;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 订单查询参数
*

View File

@@ -23,6 +23,13 @@ public interface ShopDealerRefereeService extends IService<ShopDealerReferee> {
*/
PageResult<ShopDealerReferee> pageRel(ShopDealerRefereeParam param);
/**
* app端查询用户层级关系
* @param param
* @return
*/
PageResult<ShopDealerReferee> appPage(ShopDealerRefereeParam param);
/**
* 关联查询全部
*

View File

@@ -3,22 +3,30 @@ package com.gxwebsoft.shop.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gxwebsoft.common.core.exception.BusinessException;
import com.gxwebsoft.shop.entity.ShopOrder;
import com.gxwebsoft.shop.mapper.ShopDealerRefereeMapper;
import com.gxwebsoft.shop.entity.ShopDealerUser;
import com.gxwebsoft.shop.mapper.ShopOrderMapper;
import com.gxwebsoft.shop.service.ShopDealerUserService;
import com.gxwebsoft.shop.service.ShopDealerRefereeService;
import com.gxwebsoft.shop.entity.ShopDealerReferee;
import com.gxwebsoft.shop.param.ShopDealerRefereeParam;
import com.gxwebsoft.common.core.web.PageParam;
import com.gxwebsoft.common.core.web.PageResult;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 分销商推荐关系表Service实现
@@ -32,6 +40,9 @@ public class ShopDealerRefereeServiceImpl extends ServiceImpl<ShopDealerRefereeM
@Resource
private ShopDealerUserService shopDealerUserService;
@Resource
private ShopOrderMapper shopOrderMapper;
@Override
public PageResult<ShopDealerReferee> pageRel(ShopDealerRefereeParam param) {
PageParam<ShopDealerReferee, ShopDealerRefereeParam> page = new PageParam<>(param);
@@ -40,6 +51,57 @@ public class ShopDealerRefereeServiceImpl extends ServiceImpl<ShopDealerRefereeM
return new PageResult<>(list, page.getTotal());
}
@Override
public PageResult<ShopDealerReferee> appPage(ShopDealerRefereeParam param) {
PageParam<ShopDealerReferee, ShopDealerRefereeParam> page = new PageParam<>(param);
page.setDefaultOrder("create_time desc");
List<ShopDealerReferee> list = baseMapper.selectPageRel(page, param);
if(CollectionUtils.isNotEmpty(list)){
List<Integer> userIdList = list.stream().map(ShopDealerReferee::getUserId).distinct().collect(Collectors.toList());
Map<Integer, Long> refereeMap = lambdaQuery().select(ShopDealerReferee::getDealerId, ShopDealerReferee::getUserId).in(ShopDealerReferee::getDealerId, userIdList).list()
.stream().collect(Collectors.groupingBy(ShopDealerReferee::getDealerId, Collectors.counting()));
LambdaQueryWrapper<ShopOrder> orderLambdaQueryWrapper = new LambdaQueryWrapper<ShopOrder>().select(ShopOrder::getOrderId, ShopOrder::getUserId, ShopOrder::getMoney).in(ShopOrder::getUserId, userIdList)
.in(ShopOrder::getOrderStatus, Arrays.asList(0, 1, 3, 4, 5, 7));
List<ShopOrder> shopOrderList = shopOrderMapper.selectList(orderLambdaQueryWrapper);
Map<Integer, Long> userOrderCountMap = new HashMap<>();
Map<Integer, BigDecimal> userAmountMap = new HashMap<>();
if(CollectionUtils.isNotEmpty(shopOrderList)){
userOrderCountMap = shopOrderList.stream().collect(Collectors.groupingBy(ShopOrder::getUserId, Collectors.counting()));
userAmountMap = shopOrderList.stream().collect(Collectors.groupingBy(ShopOrder::getUserId, Collectors.reducing(BigDecimal.ZERO, ShopOrder::getMoney, BigDecimal::add)));
}
Map<Integer, Long> finalUserOrderCountMap = userOrderCountMap;
Map<Integer, BigDecimal> finalUserAmountMap = userAmountMap;
list.forEach(shopDealerReferee -> {
Long teamNum = refereeMap.get(shopDealerReferee.getUserId());
if(teamNum != null){
shopDealerReferee.setTeamNum(teamNum.intValue());
}else {
shopDealerReferee.setTeamNum(0);
}
Long orderNum = finalUserOrderCountMap.get(shopDealerReferee.getUserId());
if(orderNum != null){
shopDealerReferee.setOrderNum(orderNum.intValue());
}else {
shopDealerReferee.setOrderNum(0);
}
BigDecimal orderAmount = finalUserAmountMap.get(shopDealerReferee.getUserId());
if(orderAmount != null){
shopDealerReferee.setOrderAmount(orderAmount);
}else {
shopDealerReferee.setOrderAmount(BigDecimal.ZERO);
}
});
}
return new PageResult<>(list, page.getTotal());
}
@Override
public List<ShopDealerReferee> listRel(ShopDealerRefereeParam param) {
List<ShopDealerReferee> list = baseMapper.selectListRel(param);