diff --git a/src/main/java/com/gxwebsoft/shop/controller/ShopDealerRefereeController.java b/src/main/java/com/gxwebsoft/shop/controller/ShopDealerRefereeController.java index 60a363f..bd5b9b0 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/ShopDealerRefereeController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/ShopDealerRefereeController.java @@ -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> appPage(@ParameterObject ShopDealerRefereeParam param) { + return success(shopDealerRefereeService.appPage(param)); + } + @PreAuthorize("hasAuthority('shop:shopDealerReferee:list')") @Operation(summary = "查询全部分销商推荐关系表") @GetMapping() diff --git a/src/main/java/com/gxwebsoft/shop/controller/ShopOrderController.java b/src/main/java/com/gxwebsoft/shop/controller/ShopOrderController.java index 32a3bc7..c731e78 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/ShopOrderController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/ShopOrderController.java @@ -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; diff --git a/src/main/java/com/gxwebsoft/shop/entity/ShopDealerReferee.java b/src/main/java/com/gxwebsoft/shop/entity/ShopDealerReferee.java index 24ac1f5..54d84a6 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/ShopDealerReferee.java +++ b/src/main/java/com/gxwebsoft/shop/entity/ShopDealerReferee.java @@ -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; + } diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml index fb70756..c2fd775 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml @@ -233,10 +233,6 @@ OR b.nickname LIKE CONCAT('%', #{param.keywords}, '%') ) - - - AND a.order_status != 2 - @@ -245,27 +241,27 @@ - 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) - AND a.pay_status = 1 AND a.order_status = 0 + AND a.pay_status = 1 AND a.order_status = 0 and order_type = 2 - 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 - 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 - AND a.order_status = 1 + AND a.pay_status = 1 AND a.order_status = 1 - 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) @@ -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 diff --git a/src/main/java/com/gxwebsoft/shop/param/ShopOrderParam.java b/src/main/java/com/gxwebsoft/shop/param/ShopOrderParam.java index 2d61365..becee7b 100644 --- a/src/main/java/com/gxwebsoft/shop/param/ShopOrderParam.java +++ b/src/main/java/com/gxwebsoft/shop/param/ShopOrderParam.java @@ -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; + /** * 订单查询参数 * diff --git a/src/main/java/com/gxwebsoft/shop/service/ShopDealerRefereeService.java b/src/main/java/com/gxwebsoft/shop/service/ShopDealerRefereeService.java index 2abc0ec..cfb28cf 100644 --- a/src/main/java/com/gxwebsoft/shop/service/ShopDealerRefereeService.java +++ b/src/main/java/com/gxwebsoft/shop/service/ShopDealerRefereeService.java @@ -23,6 +23,13 @@ public interface ShopDealerRefereeService extends IService { */ PageResult pageRel(ShopDealerRefereeParam param); + /** + * app端查询用户层级关系 + * @param param + * @return + */ + PageResult appPage(ShopDealerRefereeParam param); + /** * 关联查询全部 * diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerRefereeServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerRefereeServiceImpl.java index f2fa821..59ccbad 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerRefereeServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerRefereeServiceImpl.java @@ -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 pageRel(ShopDealerRefereeParam param) { PageParam page = new PageParam<>(param); @@ -40,6 +51,57 @@ public class ShopDealerRefereeServiceImpl extends ServiceImpl(list, page.getTotal()); } + @Override + public PageResult appPage(ShopDealerRefereeParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + List list = baseMapper.selectPageRel(page, param); + + if(CollectionUtils.isNotEmpty(list)){ + List userIdList = list.stream().map(ShopDealerReferee::getUserId).distinct().collect(Collectors.toList()); + + Map refereeMap = lambdaQuery().select(ShopDealerReferee::getDealerId, ShopDealerReferee::getUserId).in(ShopDealerReferee::getDealerId, userIdList).list() + .stream().collect(Collectors.groupingBy(ShopDealerReferee::getDealerId, Collectors.counting())); + + LambdaQueryWrapper orderLambdaQueryWrapper = new LambdaQueryWrapper().select(ShopOrder::getOrderId, ShopOrder::getUserId, ShopOrder::getMoney).in(ShopOrder::getUserId, userIdList) + .in(ShopOrder::getOrderStatus, Arrays.asList(0, 1, 3, 4, 5, 7)); + List shopOrderList = shopOrderMapper.selectList(orderLambdaQueryWrapper); + + Map userOrderCountMap = new HashMap<>(); + Map 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 finalUserOrderCountMap = userOrderCountMap; + Map 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 listRel(ShopDealerRefereeParam param) { List list = baseMapper.selectListRel(param);