igl 1 anno fa
parent
commit
01acc93be0
25 ha cambiato i file con 565 aggiunte e 28 eliminazioni
  1. 5 4
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantDTO.java
  2. 32 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/RegionDTO.java
  3. 25 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/TeamDTO.java
  4. 43 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/TeamDetailsDTO.java
  5. 28 8
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/MerchantModifyParam.java
  6. 19 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/MerchantRankParam.java
  7. 17 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/TeamInvitePageParam.java
  8. 10 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/CommonService.java
  9. 11 6
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/MerchantService.java
  10. 4 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/UserInviteService.java
  11. 26 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/util/DateTimeUtils.java
  12. 6 0
      vehicle-server/pom.xml
  13. 16 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/MerchantMapper.java
  14. 15 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/RegionMapper.java
  15. 9 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/UserInviteMapper.java
  16. 18 7
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Merchant.java
  17. 28 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Region.java
  18. 5 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/MerchantService.java
  19. 29 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/CommonServiceImpl.java
  20. 68 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java
  21. 3 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/PlatformProfitRatioServiceImpl.java
  22. 47 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserInviteServiceImpl.java
  23. 33 0
      vehicle-server/src/main/resources/mapper/MerchantMapper.xml
  24. 19 0
      vehicle-server/src/main/resources/mapper/RegionMapper.xml
  25. 49 0
      vehicle-server/src/main/resources/mapper/UserInviteMapper.xml

+ 5 - 4
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantDTO.java

@@ -1,9 +1,5 @@
 package com.chelvc.cloud.vehicle.api.dto;
 
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-
 import com.chelvc.cloud.vehicle.api.constant.MerchantStatus;
 import com.chelvc.framework.common.model.File;
 import lombok.AllArgsConstructor;
@@ -11,6 +7,10 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.SuperBuilder;
 
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 商家信息
  *
@@ -126,4 +126,5 @@ public class MerchantDTO implements Serializable {
      * 所属地区
      */
     private Integer region;
+
 }

+ 32 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/RegionDTO.java

@@ -0,0 +1,32 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class RegionDTO implements Serializable {
+
+    private static final long serialVersionUID = 5068010923329475966L;
+
+    /**
+     * 区域主键
+     */
+    private int id;
+    /**
+     * 区域名称
+     */
+    private String name;
+    /**
+     * 区域上级标识
+     */
+    private int pid;
+    /**
+     * 地名简称
+     */
+    private String sname;
+    /**
+     * 区域等级
+     */
+    private int level;
+}

+ 25 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/TeamDTO.java

@@ -0,0 +1,25 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TeamDTO implements Serializable {
+
+    private static final long serialVersionUID = 830186969637948801L;
+
+    private Long total;
+
+    private BigDecimal totalAmount;
+
+    private List<TeamDetailsDTO> records;
+}

+ 43 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/TeamDetailsDTO.java

@@ -0,0 +1,43 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TeamDetailsDTO implements Serializable {
+
+    private static final long serialVersionUID = -7589217012828810404L;
+
+    /**
+     * 用户标识
+     */
+    private Long userId;
+
+    /**
+     * 邀请用户
+     */
+    private Long inviteUserId;
+
+    /**
+     * 用户名称
+     */
+    private String name;
+
+    /**
+     * 总金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 来源类型:1-用户分佣;2-商户分佣
+     */
+    private Integer sourceType;
+}

+ 28 - 8
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/MerchantModifyParam.java

@@ -1,19 +1,15 @@
 package com.chelvc.cloud.vehicle.api.param;
 
-import java.io.Serializable;
-import java.util.List;
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-
 import com.chelvc.framework.common.model.File;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.SuperBuilder;
 
+import javax.validation.constraints.*;
+import java.io.Serializable;
+import java.util.List;
+
 /**
  * 商家数据模型
  *
@@ -79,6 +75,30 @@ public class MerchantModifyParam implements Serializable {
     @Max(value = 999999, message = "所属地区不能大于999999")
     private Integer region;
 
+    /**
+     * 省
+     */
+    @NotNull(message = "所属省份不能为空")
+    @Min(value = 100000, message = "所属地区不能小于100000")
+    @Max(value = 999999, message = "所属地区不能大于999999")
+    private Integer province;
+
+    /**
+     * 市
+     */
+    @NotNull(message = "所属城市不能为空")
+    @Min(value = 100000, message = "所属地区不能小于100000")
+    @Max(value = 999999, message = "所属地区不能大于999999")
+    private Integer city;
+
+    /**
+     * 区
+     */
+    @NotNull(message = "所属地区不能为空")
+    @Min(value = 100000, message = "所属地区不能小于100000")
+    @Max(value = 999999, message = "所属地区不能大于999999")
+    private Integer district;
+
     /**
      * 经度
      */

+ 19 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/MerchantRankParam.java

@@ -0,0 +1,19 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 商家排名查询参数
+ */
+@Data
+public class MerchantRankParam implements Serializable {
+
+    private static final long serialVersionUID = -8647347791206819264L;
+
+    /**
+     * 区域id,不传默认查询当前用户当前区域
+     */
+    private Integer regionId;
+}

+ 17 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/TeamInvitePageParam.java

@@ -0,0 +1,17 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import com.chelvc.framework.common.model.Paging;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class TeamInvitePageParam implements Serializable {
+
+    private static final long serialVersionUID = 1789614357588228530L;
+
+    //类型:1-用户;2-商家;不传值-查所有
+    private Integer type;
+
+    private Paging paging;
+}

+ 10 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/CommonService.java

@@ -0,0 +1,10 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+import com.chelvc.cloud.vehicle.api.dto.RegionDTO;
+
+import java.util.List;
+
+public interface CommonService {
+
+    List<RegionDTO> getRegionByPid(Integer pid);
+}

+ 11 - 6
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/MerchantService.java

@@ -1,15 +1,12 @@
 package com.chelvc.cloud.vehicle.api.service;
 
-import java.util.List;
-
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDetailDTO;
-import com.chelvc.cloud.vehicle.api.param.LocationQueryParam;
-import com.chelvc.cloud.vehicle.api.param.MerchantModifyParam;
-import com.chelvc.cloud.vehicle.api.param.MerchantPagingParam;
-import com.chelvc.cloud.vehicle.api.param.MerchantQueryParam;
+import com.chelvc.cloud.vehicle.api.param.*;
 import com.chelvc.framework.common.model.Pagination;
 
+import java.util.List;
+
 /**
  * 商家业务接口
  *
@@ -104,4 +101,12 @@ public interface MerchantService {
      * @return
      */
     List<MerchantDTO> getMerchantIdsByUserId();
+
+    /**
+     * 查询商家排名
+     * @param param
+     * @param userId
+     * @return
+     */
+    List<MerchantDTO> listRankMerchants(MerchantRankParam param, Long userId);
 }

+ 4 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/UserInviteService.java

@@ -1,8 +1,12 @@
 package com.chelvc.cloud.vehicle.api.service;
 
+import com.chelvc.cloud.vehicle.api.dto.TeamDTO;
+import com.chelvc.cloud.vehicle.api.param.TeamInvitePageParam;
 import com.chelvc.cloud.vehicle.api.param.UserInviteParams;
 
 public interface UserInviteService {
 
     void bindInvite(UserInviteParams params);
+
+    TeamDTO teamList(TeamInvitePageParam param, Long userId);
 }

+ 26 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/util/DateTimeUtils.java

@@ -40,6 +40,22 @@ public class DateTimeUtils {
         return calendar.getTimeInMillis();
     }
 
+    public static Long getMonthStartTime() {
+        Long currentTime = System.currentTimeMillis();
+        String timeZone = "GMT+8:00";
+        Calendar calendar = Calendar.getInstance();// 获取当前日期
+        calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
+        calendar.setTimeInMillis(currentTime);
+        calendar.add(Calendar.YEAR, 0);
+        calendar.add(Calendar.MONTH, 0);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        return calendar.getTimeInMillis();
+    }
+
     /**
      * 获取上个月开始时间
      *
@@ -50,6 +66,16 @@ public class DateTimeUtils {
         return LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault());
     }
 
+    /**
+     * 获取上个月开始时间
+     *
+     * @return
+     */
+    public static LocalDateTime getMonthStartLocalTime()  {
+        Long startTime = getMonthStartTime();
+        return LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault());
+    }
+
     /**
      * 获取上个月结束时间
      *

+ 6 - 0
vehicle-server/pom.xml

@@ -20,6 +20,7 @@
         <vehicle-api.version>1.0.0-SNAPSHOT</vehicle-api.version>
         <framework-redis.version>1.0.0-RELEASE</framework-redis.version>
         <framework-database.version>1.0.0-RELEASE</framework-database.version>
+        <framework-location.version>1.0.0-RELEASE</framework-location.version>
     </properties>
 
     <dependencies>
@@ -33,6 +34,11 @@
             <artifactId>framework-redis</artifactId>
             <version>${framework-redis.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.chelvc.framework</groupId>
+            <artifactId>framework-location</artifactId>
+            <version>${framework-location.version}</version>
+        </dependency>
         <dependency>
             <groupId>com.chelvc.framework</groupId>
             <artifactId>framework-database</artifactId>

+ 16 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/MerchantMapper.java

@@ -1,7 +1,5 @@
 package com.chelvc.cloud.vehicle.server.dao;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.api.param.LocationQueryParam;
@@ -10,6 +8,9 @@ import com.chelvc.cloud.vehicle.server.entity.Merchant;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDateTime;
+import java.util.List;
+
 /**
  * 商家数据操作接口
  *
@@ -59,4 +60,17 @@ public interface MerchantMapper extends BaseMapper<Merchant> {
      * @return
      */
     Integer merchantFavorite(@Param("merchantId") Long merchantId,@Param("userId") Long userId);
+
+    /**
+     * 商家排名
+     * @param monthStartLocalTime
+     * @param longitude
+     * @param latitude
+     * @param regionId
+     * @param level
+     * @return
+     */
+    List<MerchantDTO> listRankMerchants(@Param("merchantId")LocalDateTime monthStartLocalTime, @Param("regionId")Integer regionId,
+                                        @Param("longitude")Double longitude,
+                                        @Param("latitude")Double latitude, @Param("level")int level);
 }

+ 15 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/RegionMapper.java

@@ -0,0 +1,15 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.api.dto.RegionDTO;
+import com.chelvc.cloud.vehicle.server.entity.Region;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface RegionMapper extends BaseMapper<Region> {
+
+    List<RegionDTO> getRegionByPid(@Param("pid")Integer pid);
+}

+ 9 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/UserInviteMapper.java

@@ -1,9 +1,18 @@
 package com.chelvc.cloud.vehicle.server.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chelvc.cloud.vehicle.api.dto.TeamDTO;
+import com.chelvc.cloud.vehicle.api.dto.TeamDetailsDTO;
 import com.chelvc.cloud.vehicle.server.entity.UserInvite;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 @Mapper
 public interface UserInviteMapper extends BaseMapper<UserInvite> {
+    List<TeamDetailsDTO> teamList(@Param("type") Integer type, @Param("pageNum") int pageNum,
+                                              @Param("pageSize") int pageSize, @Param("userId") Long userId);
+
+    TeamDTO teamTotalStatistics(@Param("type") Integer type, @Param("userId") Long userId);
 }

+ 18 - 7
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Merchant.java

@@ -1,7 +1,5 @@
 package com.chelvc.cloud.vehicle.server.entity;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -10,13 +8,11 @@ import com.chelvc.cloud.vehicle.api.constant.MerchantStatus;
 import com.chelvc.framework.common.model.File;
 import com.chelvc.framework.database.entity.ModifyEntity;
 import com.chelvc.framework.database.interceptor.FilesTypeHandler;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import lombok.ToString;
+import lombok.*;
 import lombok.experimental.SuperBuilder;
 
+import java.util.List;
+
 /**
  * 商家数据模型
  *
@@ -93,6 +89,21 @@ public class Merchant extends ModifyEntity<Long> {
      */
     private Integer region;
 
+    /**
+     * 所属省份
+     */
+    private Integer province;
+
+    /**
+     * 所属城市
+     */
+    private Integer city;
+
+    /**
+     * 所属地区
+     */
+    private Integer district;
+
     /**
      * 经度
      */

+ 28 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Region.java

@@ -0,0 +1,28 @@
+package com.chelvc.cloud.vehicle.server.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(callSuper = true)
+public class Region implements Serializable {
+
+    private static final long serialVersionUID = 1639376448398184907L;
+
+    private int id;
+    private String NAME;
+    private int pid;
+    private String sname;
+    private int level;
+    private String citycode;
+    private String yzcode;
+    private String mername;
+}

+ 5 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/MerchantService.java

@@ -26,4 +26,9 @@ public interface MerchantService extends IService<Merchant> {
      * @return
      */
     MerchantDTO getMerchantById(Long merchantId);
+
+    /**
+     * 获取商家名称
+     */
+    String getMerchantName(Long merchantId);
 }

+ 29 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/CommonServiceImpl.java

@@ -0,0 +1,29 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import com.chelvc.cloud.vehicle.api.dto.RegionDTO;
+import com.chelvc.cloud.vehicle.api.service.CommonService;
+import com.chelvc.cloud.vehicle.server.dao.RegionMapper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.CommonService.class)
+@Service
+@Slf4j
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class CommonServiceImpl implements CommonService {
+
+    private final RegionMapper regionMapper;
+
+    @Override
+    public List<RegionDTO> getRegionByPid(Integer pid) {
+        if(pid == null){
+            pid = 100000;
+        }
+        return regionMapper.getRegionByPid(pid);
+    }
+}

+ 68 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java

@@ -1,17 +1,24 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.uc.api.dto.UserDTO;
 import com.chelvc.cloud.uc.api.service.EmployeeService;
+import com.chelvc.cloud.uc.api.service.UserService;
 import com.chelvc.cloud.vehicle.api.constant.MerchantStatus;
 import com.chelvc.cloud.vehicle.api.dto.CategoryDTO;
 import com.chelvc.cloud.vehicle.api.dto.GoodsDTO;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDetailDTO;
 import com.chelvc.cloud.vehicle.api.param.*;
+import com.chelvc.cloud.vehicle.api.util.DateTimeUtils;
 import com.chelvc.cloud.vehicle.server.copier.MerchantCopier;
 import com.chelvc.cloud.vehicle.server.dao.MerchantMapper;
+import com.chelvc.cloud.vehicle.server.dao.RegionMapper;
 import com.chelvc.cloud.vehicle.server.entity.Merchant;
+import com.chelvc.cloud.vehicle.server.entity.Region;
 import com.chelvc.cloud.vehicle.server.service.CategoryService;
 import com.chelvc.cloud.vehicle.server.service.GoodsService;
 import com.chelvc.cloud.vehicle.server.service.MerchantService;
@@ -20,12 +27,18 @@ import com.chelvc.framework.base.util.ResourceUtils;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.util.StringUtils;
 import com.chelvc.framework.database.util.PagingUtils;
+import com.chelvc.framework.location.Address;
+import com.chelvc.framework.location.LocationHandler;
+import com.chelvc.framework.redis.RedisConstant;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 
+import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -44,9 +57,18 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
 
     private final CategoryService categoryService;
 
+    private final RedisTemplate<String, Serializable> redisTemplate;
+
+    private final LocationHandler locationHandler;
+
+    private final RegionMapper regionMapper;
+
     @DubboReference
     EmployeeService employeeService;
 
+    @DubboReference
+    UserService userService;
+
     @Override
     public List<MerchantDTO> listNearbyMerchants(@NonNull LocationQueryParam param, int size) {
         return this.baseMapper.listNearbyMerchants(param, size);
@@ -198,8 +220,54 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
                 .list();
         return MerchantCopier.INSTANCE.copying(merchants);
     }
+
+    @Override
+    public List<MerchantDTO> listRankMerchants(MerchantRankParam param, Long userId) {
+        List<MerchantDTO> result = new ArrayList<>();
+        Integer regionId = param.getRegionId();
+        Double longitude = (double) 0;
+        Double latitude = (double) 0;
+        if(regionId == null){
+            if(Boolean.TRUE.equals(redisTemplate.hasKey(RedisConstant.USER_ADDRESS + userId))){
+                Address address = (Address)redisTemplate.opsForValue().get(RedisConstant.USER_ADDRESS + userId);
+                if(address != null){
+                    regionId = address.getDistrict().getId();
+                    longitude = address.getLongitude();
+                    latitude = address.getLatitude();
+                }
+            }
+        }
+        if(regionId == null){
+            UserDTO user = userService.getUser(userId);
+            if(user == null){
+                return result;
+            }
+            Address address = locationHandler.ip2address(user.getHost());
+            if(address == null){
+               return result;
+            }
+            regionId = address.getDistrict().getId();
+            longitude = address.getLongitude();
+            latitude = address.getLatitude();
+        }
+        Region region = regionMapper.selectById(regionId);
+        if(region == null){
+            return result;
+        }
+        result = baseMapper.listRankMerchants(DateTimeUtils.getMonthStartLocalTime(), regionId, longitude, latitude, region.getLevel());
+        return result;
+    }
+
     @Override
     public MerchantDTO getMerchantById(Long merchantId){
         return MerchantCopier.INSTANCE.copying(this.getById(merchantId));
     }
+
+    @Override
+    public String getMerchantName(Long merchantId) {
+        LambdaQueryWrapper<Merchant> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(Merchant::getUserId, merchantId);
+        Merchant merchant = baseMapper.selectOne(wrapper);
+        return merchant != null ? merchant.getName() : "";
+    }
 }

+ 3 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/PlatformProfitRatioServiceImpl.java

@@ -80,7 +80,9 @@ public class PlatformProfitRatioServiceImpl extends ServiceImpl<PlatformProfitRa
     public Pagination<PlatformProfitRatioDTO> queryPageList(QueryPlatformProfitRatioParam param, Long pageNum, Long pageSize) {
         Page<PlatformProfitRatioDTO> page = new Page<>(pageNum, pageSize);
         QueryWrapper<PlatformProfitRatioDTO> wrapper = Wrappers.query();
-        wrapper.eq(param != null && param.getUserId() != null, "t.user_id", param.getUserId());
+        if(param != null){
+            wrapper.eq(param.getUserId() != null, "t.user_id", param.getUserId());
+        }
         wrapper.orderByAsc("t.create_time");
         IPage<PlatformProfitRatioDTO> result = baseMapper.queryPageList(page, wrapper);
         return Pagination.<PlatformProfitRatioDTO>builder().total(result.getTotal()).pages(result.getPages())

+ 47 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserInviteServiceImpl.java

@@ -3,6 +3,11 @@ package com.chelvc.cloud.vehicle.server.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chelvc.cloud.uc.api.dto.UserDTO;
+import com.chelvc.cloud.uc.api.service.UserService;
+import com.chelvc.cloud.vehicle.api.dto.TeamDTO;
+import com.chelvc.cloud.vehicle.api.dto.TeamDetailsDTO;
+import com.chelvc.cloud.vehicle.api.param.TeamInvitePageParam;
 import com.chelvc.cloud.vehicle.api.param.UserInviteParams;
 import com.chelvc.cloud.vehicle.api.service.UserInviteService;
 import com.chelvc.cloud.vehicle.server.dao.ProfitRatioConfigMapper;
@@ -11,15 +16,21 @@ import com.chelvc.cloud.vehicle.server.dao.UserProfitRatioMapper;
 import com.chelvc.cloud.vehicle.server.entity.ProfitRatioConfig;
 import com.chelvc.cloud.vehicle.server.entity.UserInvite;
 import com.chelvc.cloud.vehicle.server.entity.UserProfitRatio;
+import com.chelvc.cloud.vehicle.server.service.MerchantService;
 import com.chelvc.framework.base.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.model.Paging;
 import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.time.LocalDateTime;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @RequiredArgsConstructor(onConstructor = @__(@Autowired))
 @DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.UserInviteService.class)
@@ -29,6 +40,11 @@ public class UserInviteServiceImpl extends ServiceImpl<UserInviteMapper, UserInv
 
     private final UserProfitRatioMapper userProfitRatioMapper;
 
+    @DubboReference
+    UserService userService;
+
+    private final MerchantService merchantService;
+
     @Override
     @Transactional
     public void bindInvite(UserInviteParams params) {
@@ -95,4 +111,35 @@ public class UserInviteServiceImpl extends ServiceImpl<UserInviteMapper, UserInv
             userProfitRatioMapper.update(userProfitRatio, null);
         }
     }
+
+    @Override
+    public TeamDTO teamList(TeamInvitePageParam param, Long userId) {
+        TeamDTO dto = new TeamDTO();
+        Paging paging = param.getPaging();
+        int pageNum = (paging.getIndex() - 1) * paging.getNumber();
+        if(pageNum < 0){
+            return dto;
+        }
+        List<TeamDetailsDTO> records = baseMapper.teamList(param.getType(), pageNum, paging.getNumber(), userId);
+        if(CollectionUtils.isEmpty(records)){
+            return dto;
+        }
+        Map<Long, UserDTO> map = new HashMap<>();
+        if(param.getType() == null || param.getType() == 1){
+            List<Long> ids = records.stream().filter(e -> e.getSourceType() == 1).map(TeamDetailsDTO::getInviteUserId).collect(Collectors.toList());
+            map = userService.queryUserByIds(ids);
+        }
+        for(TeamDetailsDTO detailsDTO : records){
+            Integer sourceType = detailsDTO.getSourceType();
+            if(sourceType == 1){
+                UserDTO userDTO = map.get(detailsDTO.getInviteUserId());
+                detailsDTO.setName(userDTO == null ? "" : userDTO.getNickname());
+            } else {
+                detailsDTO.setName(merchantService.getMerchantName(detailsDTO.getInviteUserId()));
+            }
+        }
+        dto = baseMapper.teamTotalStatistics(param.getType(), userId);
+        dto.setRecords(records);
+        return dto;
+    }
 }

+ 33 - 0
vehicle-server/src/main/resources/mapper/MerchantMapper.xml

@@ -90,4 +90,37 @@
           AND content_id = #{merchantId}
           AND user_id = #{userId}
     </select>
+
+    <select id="listRankMerchants" resultType="com.chelvc.cloud.vehicle.api.dto.MerchantDTO">
+        SELECT
+            mt.id,
+            mt.NAME,
+            mt.logo,
+            mt.score,
+            mt.sale,
+            mt.address,
+            SUM( om.pay_amount ) amount,
+            round(
+                    st_distance_sphere ( POINT ( mt.longitude, mt.latitude ), POINT ( #{param.longitude}, #{param.latitude}) )) distance
+        FROM
+            `merchant` mt
+                LEFT JOIN oms_order om ON mt.user_id = om.merchant_id
+        WHERE
+            om.STATUS = 3
+        <if test="level == 1">
+            and mt.province = #{regionId}
+        </if>
+        <if test="level == 2">
+            and mt.city = #{regionId}
+        </if>
+        <if test="level == 3">
+            and mt.district = #{regionId}
+        </if>
+          AND om.create_time >= #{monthStartLocalTime}
+        GROUP BY
+            mt.id
+        ORDER BY
+            amount DESC
+        limit 10
+    </select>
 </mapper>

+ 19 - 0
vehicle-server/src/main/resources/mapper/RegionMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.chelvc.cloud.vehicle.server.dao.RegionMapper">
+
+
+
+    <select id="getRegionByPid" resultType="com.chelvc.cloud.vehicle.api.dto.RegionDTO">
+       select
+           id,
+           name,
+           pid,
+           sname,
+           level
+       from
+           region
+        where
+            pid = #{pid}
+    </select>
+</mapper>

+ 49 - 0
vehicle-server/src/main/resources/mapper/UserInviteMapper.xml

@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.chelvc.cloud.vehicle.server.dao.UserInviteMapper">
+
+
+
+    <select id="teamList" resultType="com.chelvc.cloud.vehicle.api.dto.TeamDetailsDTO">
+        SELECT
+            i.user_id,
+            target_id AS inviteUserId,
+            SUM( r.reality_amount ) amount,
+            r.source_type sourceType
+        FROM
+            user_invite i
+                LEFT JOIN currency_record r ON i.user_id = r.user_id
+                AND i.target_id = r.source_user_id
+                AND r.type = 0
+                AND i.type = r.source_type
+        WHERE
+            1 = 1
+            and i.user_id = #{userId}
+            <if test="type != null">
+                and i.type = #{type}
+            </if>
+        GROUP BY
+            i.id
+        ORDER BY
+            amount DESC
+        limit #{pageNum}, #{pageSize}
+    </select>
+
+    <select id="teamTotalStatistics" resultType="com.chelvc.cloud.vehicle.api.dto.TeamDTO">
+        SELECT
+        count(i.id) total,
+        sum(r.reality_amount) totalAmount
+        FROM
+        user_invite i
+        LEFT JOIN currency_record r ON i.user_id = r.user_id
+        AND i.target_id = r.source_user_id
+        AND r.type = 0
+        AND i.type = r.source_type
+        WHERE
+        1 = 1
+        and i.user_id = #{userId}
+        <if test="type != null">
+            and i.type = #{type}
+        </if>
+    </select>
+</mapper>