igl 1 anno fa
parent
commit
1f85eb7f79
19 ha cambiato i file con 355 aggiunte e 19 eliminazioni
  1. 37 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantRankCountDTO.java
  2. 1 1
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/HandRankAwardParam.java
  3. 3 1
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/RankAwardRecordService.java
  4. 16 4
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/util/DateTimeUtils.java
  5. 4 3
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/DynamicResourceMapper.java
  6. 11 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/MerchantMapper.java
  7. 7 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/RankAwardRecordMapper.java
  8. 7 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/RegionMapper.java
  9. 6 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/RankAwardRecord.java
  10. 20 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/MerchantService.java
  11. 11 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/RankAwardConfigService.java
  12. 1 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicResourceServiceImpl.java
  13. 13 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java
  14. 12 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/RankAwardConfigServiceImpl.java
  15. 101 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/RankAwardRecordServiceImpl.java
  16. 13 4
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/task/RankAwardTask.java
  17. 20 0
      vehicle-server/src/main/resources/mapper/DynamicResourceMapper.xml
  18. 50 1
      vehicle-server/src/main/resources/mapper/MerchantMapper.xml
  19. 22 0
      vehicle-server/src/main/resources/mapper/RankAwardRecordMapper.xml

+ 37 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/MerchantRankCountDTO.java

@@ -0,0 +1,37 @@
+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 MerchantRankCountDTO implements Serializable {
+
+    private static final long serialVersionUID = -8220382300856423786L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 当月营业额
+     */
+    private BigDecimal amount;
+}

+ 1 - 1
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/HandRankAwardParam.java

@@ -29,5 +29,5 @@ public class HandRankAwardParam implements Serializable {
      * 周期
      */
     @NotNull(message = "周期不能为空")
-    private Integer period;
+    private String period;
 }

+ 3 - 1
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/RankAwardRecordService.java

@@ -12,5 +12,7 @@ public interface RankAwardRecordService {
 
     void handOutPrize(HandRankAwardParam param);
 
-    void awardRank();
+    void cityAwardRank();
+
+    void districtAwardRank();
 }

+ 16 - 4
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/util/DateTimeUtils.java

@@ -1,8 +1,6 @@
 package com.chelvc.cloud.vehicle.api.util;
 
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
+import java.time.*;
 import java.util.Calendar;
 import java.util.TimeZone;
 
@@ -67,7 +65,7 @@ public class DateTimeUtils {
     }
 
     /**
-     * 获取个月开始时间
+     * 获取个月开始时间
      *
      * @return
      */
@@ -85,4 +83,18 @@ public class DateTimeUtils {
         Long endTime = getLastMonthEndTime();
         return LocalDateTime.ofInstant(Instant.ofEpochMilli(endTime), ZoneId.systemDefault());
     }
+
+    /**
+     * 获取上个月的月份
+     */
+    public static String getLastYearMonth(){
+        LocalDate currentDate = LocalDate.now();
+        LocalDate previousMonth = currentDate.minusMonths(1);
+        int year = previousMonth.getYear();
+        int month = previousMonth.getMonthValue();
+        if(month < 10){
+            return year+"-0"+month;
+        }
+        return year+"-"+month;
+    }
 }

+ 4 - 3
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/DynamicResourceMapper.java

@@ -3,9 +3,10 @@ package com.chelvc.cloud.vehicle.server.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.chelvc.cloud.vehicle.server.entity.DynamicResource;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
-import java.util.Collection;
+import java.util.List;
 
 /**
  * @PACKAGE_NAME: net.yeeu.collision.dynamic.mapper
@@ -20,10 +21,10 @@ public interface DynamicResourceMapper extends BaseMapper<DynamicResource> {
   /**
    * 批量插入
    *
-   * @param dataList
+   * @param list
    * @return {@link Integer}
    * @author igl
    * @date 2023/8/14 16:18
    */
-  Integer insertBatchSomeColumn(Collection<DynamicResource> dataList);
+  Integer batchInsert(@Param("list") List<DynamicResource> list);
 }

+ 11 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/MerchantMapper.java

@@ -2,6 +2,7 @@ package com.chelvc.cloud.vehicle.server.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
+import com.chelvc.cloud.vehicle.api.dto.MerchantRankCountDTO;
 import com.chelvc.cloud.vehicle.api.dto.MerchantRankDTO;
 import com.chelvc.cloud.vehicle.api.param.LocationQueryParam;
 import com.chelvc.cloud.vehicle.api.param.MerchantQueryParam;
@@ -9,6 +10,7 @@ import com.chelvc.cloud.vehicle.server.entity.Merchant;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -90,4 +92,13 @@ public interface MerchantMapper extends BaseMapper<Merchant> {
     public void updateMerchantBusinessStatus(@Param("merchantId")Long merchantId,
                                              @Param("businessStatus")String businessStatus,
                                              @Param("automatic")String automatic);
+
+    List<MerchantRankCountDTO> rankMerchants(@Param("monthStartLocalTime") LocalDateTime monthStartLocalTime,
+                                             @Param("monthEndLocalTime") LocalDateTime monthEndLocalTime,
+                                             @Param("regionId") Integer regionId,
+                                             @Param("limit") Integer limit, @Param("level") Integer level);
+
+    BigDecimal queryTotalCommissionAmountByLastMonth(@Param("lastMonthStartLocalTime") LocalDateTime lastMonthStartLocalTime,
+                                           @Param("lastMonthEndLocalTime") LocalDateTime lastMonthEndLocalTime,
+                                           @Param("regionId") Integer regionId, @Param("level") Integer level);
 }

+ 7 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/RankAwardRecordMapper.java

@@ -11,9 +11,16 @@ import com.chelvc.cloud.vehicle.server.entity.RankAwardRecord;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 @Mapper
 public interface RankAwardRecordMapper extends BaseMapper<RankAwardRecord> {
 
     IPage<RankAwardRecordDTO> queryPageList(@Param("page") Page<RankAwardRecordDTO> page,
                                             @Param(Constants.WRAPPER) QueryWrapper<RankAwardConfig> wrapper);
+
+    Integer batchInsert(@Param("list") List<RankAwardRecord> list);
+
+    BigDecimal queryAmountByRegion(@Param("regionId") Integer regionId, @Param("lastYearMonth") String lastYearMonth);
 }

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

@@ -5,6 +5,7 @@ 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 org.apache.ibatis.annotations.Select;
 
 import java.util.List;
 
@@ -12,4 +13,10 @@ import java.util.List;
 public interface RegionMapper extends BaseMapper<Region> {
 
     List<RegionDTO> getRegionByPid(@Param("pid")Integer pid);
+
+    @Select("select id from region where level = #{level}")
+    List<Integer> queryIdsByLevel(@Param("level")Integer level);
+
+    @Select("select id from region where level = #{level} limit #{pageNum}, #{pageSize}")
+    List<Integer> queryPageIdsByLevel(Integer level, int pageNum, int pageSize);
 }

+ 6 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/RankAwardRecord.java

@@ -40,7 +40,7 @@ public class RankAwardRecord implements Serializable {
     /**
      * 周期
      */
-    private int period;
+    private String period;
 
     /**
      * 类类型:类型:0-年;1-季;2-月;3-周;4-日  暂时默认为2
@@ -57,6 +57,11 @@ public class RankAwardRecord implements Serializable {
      */
     private Integer regionLevel;
 
+    /**
+     * 状态:0-未确认;1-已确认
+     */
+    private Integer status;
+
     /**
      * 奖励金额
      */

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

@@ -2,8 +2,10 @@ package com.chelvc.cloud.vehicle.server.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.chelvc.cloud.vehicle.api.dto.MerchantDTO;
+import com.chelvc.cloud.vehicle.api.dto.MerchantRankCountDTO;
 import com.chelvc.cloud.vehicle.server.entity.Merchant;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -31,4 +33,22 @@ public interface MerchantService extends IService<Merchant> {
      * 获取商家名称
      */
     String getMerchantName(Long merchantId);
+
+
+    /**
+     * 查询商家排名
+     * @param regionId
+     * @param limit
+     * @param level
+     * @return
+     */
+    List<MerchantRankCountDTO> rankMerchants(Integer regionId, Integer limit, Integer level);
+
+    /**
+     * 根据地区查询上个月所有商家的平台抽成金额
+     * @param regionId
+     * @param level
+     * @return
+     */
+    BigDecimal queryTotalCommissionAmountByLastMonth(Integer regionId, Integer level);
 }

+ 11 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/RankAwardConfigService.java

@@ -2,7 +2,18 @@ package com.chelvc.cloud.vehicle.server.service;
 
 import com.chelvc.cloud.vehicle.server.entity.RankAwardConfig;
 
+import java.util.List;
+
 public interface RankAwardConfigService {
 
     RankAwardConfig queryById(Long id);
+
+    /**
+     *
+     * @param type 类型:0-年;1-季;2-月;3-周;4-日
+     * @param platformType 平台类型:1-用户;2-商家
+     * @param regionLevel 区域等级:0-国家;1-省;2-市;3-区
+     * @return
+     */
+    List<RankAwardConfig> queryList(Integer type, Integer platformType, Integer regionLevel);
 }

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

@@ -29,7 +29,7 @@ public class DynamicResourceServiceImpl implements DynamicResourceService {
 
     @Override
     public void batchInsert(List<DynamicResource> list) {
-        int b = baseMapper.insertBatchSomeColumn(list);
+        int b = baseMapper.batchInsert(list);
         if(b != list.size()){
             throw new ResourceUnavailableException("保存动态资源失败");
         }

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

@@ -37,6 +37,7 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.annotation.Scheduled;
 
+import java.math.BigDecimal;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -261,6 +262,18 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
         return result;
     }
 
+    @Override
+    public List<MerchantRankCountDTO> rankMerchants(Integer regionId, Integer limit, Integer level) {
+        return baseMapper.rankMerchants(DateTimeUtils.getLastMonthStartLocalTime(),
+                DateTimeUtils.getLastMonthEndLocalTime(), regionId, limit, level);
+    }
+
+    @Override
+    public BigDecimal queryTotalCommissionAmountByLastMonth(Integer regionId, Integer level) {
+        return baseMapper.queryTotalCommissionAmountByLastMonth(DateTimeUtils.getLastMonthStartLocalTime(),
+                DateTimeUtils.getLastMonthEndLocalTime(), regionId, level);
+    }
+
     @Override
     public MerchantDTO getMerchantById(Long merchantId){
         return MerchantCopier.INSTANCE.copying(this.getById(merchantId));

+ 12 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/RankAwardConfigServiceImpl.java

@@ -21,13 +21,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
+import java.util.List;
 
 @RequiredArgsConstructor(onConstructor = @__(@Autowired))
 @DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.RankAwardConfigService.class)
 public class RankAwardConfigServiceImpl extends ServiceImpl<RankAwardConfigMapper, RankAwardConfig> implements
         RankAwardConfigService, com.chelvc.cloud.vehicle.api.service.RankAwardConfigService{
 
-
     @Override
     public void add(AddRankAwardConfigParams params) {
         Integer rank = params.getRank();
@@ -130,4 +130,15 @@ public class RankAwardConfigServiceImpl extends ServiceImpl<RankAwardConfigMappe
     public RankAwardConfig queryById(Long id) {
         return baseMapper.selectById(id);
     }
+
+    @Override
+    public List<RankAwardConfig> queryList(Integer type, Integer platformType, Integer regionLevel) {
+        LambdaQueryWrapper<RankAwardConfig> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(RankAwardConfig::getType, type);
+        wrapper.eq(RankAwardConfig::getPlatformType, platformType);
+        wrapper.eq(RankAwardConfig::getRegionLevel, regionLevel);
+        wrapper.eq(RankAwardConfig::getStatus, 0);
+        wrapper.orderByAsc(RankAwardConfig::getRank);
+        return baseMapper.selectList(wrapper);
+    }
 }

+ 101 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/RankAwardRecordServiceImpl.java

@@ -8,13 +8,18 @@ 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.UserService;
+import com.chelvc.cloud.vehicle.api.dto.MerchantRankCountDTO;
 import com.chelvc.cloud.vehicle.api.dto.RankAwardRecordDTO;
 import com.chelvc.cloud.vehicle.api.param.HandRankAwardParam;
 import com.chelvc.cloud.vehicle.api.param.QueryRankAwardRecordParam;
 import com.chelvc.cloud.vehicle.api.service.RankAwardRecordService;
+import com.chelvc.cloud.vehicle.api.util.DateTimeUtils;
 import com.chelvc.cloud.vehicle.server.dao.RankAwardRecordMapper;
+import com.chelvc.cloud.vehicle.server.dao.RegionMapper;
 import com.chelvc.cloud.vehicle.server.entity.RankAwardConfig;
 import com.chelvc.cloud.vehicle.server.entity.RankAwardRecord;
+import com.chelvc.cloud.vehicle.server.entity.Region;
+import com.chelvc.cloud.vehicle.server.service.MerchantService;
 import com.chelvc.cloud.vehicle.server.service.RankAwardConfigService;
 import com.chelvc.framework.base.exception.ResourceUnavailableException;
 import com.chelvc.framework.common.model.Pagination;
@@ -25,7 +30,9 @@ import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -37,6 +44,8 @@ public class RankAwardRecordServiceImpl extends ServiceImpl<RankAwardRecordMappe
     @DubboReference
     UserService userService;
     private final RankAwardConfigService rankAwardConfigService;
+    private final RegionMapper regionMapper;
+    private final MerchantService merchantService;
 
     @Override
     public Pagination<RankAwardRecordDTO> queryPageList(QueryRankAwardRecordParam param, Long pageNum, Long pageSize) {
@@ -74,7 +83,7 @@ public class RankAwardRecordServiceImpl extends ServiceImpl<RankAwardRecordMappe
         if(config == null){
             throw new ResourceUnavailableException("参数错误");
         }
-        Integer period = param.getPeriod();
+        String period = param.getPeriod();
         Long userId = param.getUserId();
         LambdaQueryWrapper<RankAwardRecord> wrapper = Wrappers.lambdaQuery();
         wrapper.eq(RankAwardRecord::getUserId, userId);
@@ -101,7 +110,97 @@ public class RankAwardRecordServiceImpl extends ServiceImpl<RankAwardRecordMappe
     }
 
     @Override
-    public void awardRank() {
+    public void cityAwardRank() {
+        Integer level = 2;
+        List<Integer> ids = regionMapper.queryIdsByLevel(level);
+        List<RankAwardConfig> rankAwardConfigs = rankAwardConfigService.queryList(2, 2, level);
+        if(CollectionUtils.isEmpty(rankAwardConfigs)){
+            return;
+        }
+        Map<Integer, RankAwardConfig> map = rankAwardConfigs.stream().collect(Collectors.toMap(RankAwardConfig::getRank, (p) -> p));
+        int limit = rankAwardConfigs.size();
+        for(Integer id : ids){
+            List<RankAwardRecord> list = new ArrayList<>();
+            List<MerchantRankCountDTO> result = merchantService.rankMerchants(id, limit, level);
+            BigDecimal totalCommissionAmount = merchantService.queryTotalCommissionAmountByLastMonth(id, level);
+            if(totalCommissionAmount == null || totalCommissionAmount.compareTo(BigDecimal.ZERO) == 0){
+                break;
+            }
+            //查询区县已发出的奖励
+            BigDecimal totalAmount = baseMapper.queryAmountByRegion(id, DateTimeUtils.getLastYearMonth());
+            if(totalAmount != null && totalAmount.compareTo(BigDecimal.ZERO) > 0){
+                totalCommissionAmount = totalCommissionAmount.subtract(totalAmount);
+            }
+            for(int i = 1; i <= result.size(); i++){
+                MerchantRankCountDTO merchantRankCountDTO = result.get(i);
+                RankAwardConfig config = map.get(i);
+                BigDecimal bonus = totalCommissionAmount.multiply(new BigDecimal(config.getCommissionRatio()).divide(new BigDecimal("100"), 2, RoundingMode.FLOOR))
+                        .multiply(new BigDecimal(config.getRatio()).divide(new BigDecimal("100"), 2, RoundingMode.FLOOR));
+                RankAwardRecord rankAwardRecord = new RankAwardRecord();
+                rankAwardRecord.setRank(i);
+                rankAwardRecord.setUserId(merchantRankCountDTO.getUserId());
+                rankAwardRecord.setBonus(bonus);
+                rankAwardRecord.setPeriod(DateTimeUtils.getLastYearMonth());
+                rankAwardRecord.setType(2);
+                rankAwardRecord.setPlatformType(2);
+                rankAwardRecord.setRegionLevel(level);
+                rankAwardRecord.setStatus(0);
+                rankAwardRecord.setAwardTime(LocalDateTime.now());
+                rankAwardRecord.setCreateTime(LocalDateTime.now());
+                list.add(rankAwardRecord);
+            }
+            baseMapper.batchInsert(list);
+        }
+    }
 
+    @Override
+    public void districtAwardRank() {
+        Integer level = 3;
+        List<RankAwardConfig> rankAwardConfigs = rankAwardConfigService.queryList(2, 2, level);
+        if(CollectionUtils.isEmpty(rankAwardConfigs)){
+            return;
+        }
+        Map<Integer, RankAwardConfig> map = rankAwardConfigs.stream().collect(Collectors.toMap(RankAwardConfig::getRank, (p) -> p));
+        LambdaQueryWrapper<Region> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(Region::getLevel, level);
+        Integer total = regionMapper.selectCount(wrapper);
+        int pageNum = 1;
+        int pageSize = 500;
+        int pages = 1;
+        if (total > pageSize) {
+            pages = total % pageSize != 0 ? (total / pageSize) + 1 : total / pageSize;
+        }
+        while (pageNum <= pages) {
+            List<RankAwardRecord> list = new ArrayList<>();
+            List<Integer> ids = regionMapper.queryPageIdsByLevel(level, pageNum, pageSize);
+            int limit = rankAwardConfigs.size();
+            for(Integer id : ids){
+                List<MerchantRankCountDTO> result = merchantService.rankMerchants(id, limit, level);
+                BigDecimal totalCommissionAmount = merchantService.queryTotalCommissionAmountByLastMonth(id, level);
+                if(totalCommissionAmount == null || totalCommissionAmount.compareTo(BigDecimal.ZERO) == 0){
+                    break;
+                }
+                for(int i = 1; i <= result.size(); i++){
+                    MerchantRankCountDTO merchantRankCountDTO = result.get(i);
+                    RankAwardConfig config = map.get(i);
+                    BigDecimal bonus = totalCommissionAmount.multiply(new BigDecimal(config.getCommissionRatio()).divide(new BigDecimal("100"), 2, RoundingMode.FLOOR))
+                            .multiply(new BigDecimal(config.getRatio()).divide(new BigDecimal("100"), 2, RoundingMode.FLOOR));
+                    RankAwardRecord rankAwardRecord = new RankAwardRecord();
+                    rankAwardRecord.setRank(i);
+                    rankAwardRecord.setUserId(merchantRankCountDTO.getUserId());
+                    rankAwardRecord.setBonus(bonus);
+                    rankAwardRecord.setPeriod(DateTimeUtils.getLastYearMonth());
+                    rankAwardRecord.setType(2);
+                    rankAwardRecord.setPlatformType(2);
+                    rankAwardRecord.setRegionLevel(level);
+                    rankAwardRecord.setStatus(0);
+                    rankAwardRecord.setAwardTime(LocalDateTime.now());
+                    rankAwardRecord.setCreateTime(LocalDateTime.now());
+                    list.add(rankAwardRecord);
+                }
+            }
+            baseMapper.batchInsert(list);
+            pageNum += 1;
+        }
     }
 }

+ 13 - 4
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/task/RankAwardTask.java

@@ -19,11 +19,20 @@ public class RankAwardTask {
     RankAwardRecordService rankAwardRecordService;
 
     /**
-     * 月榜
+     * 月榜
      */
     @Scheduled(cron = "0 0 5 1 * ?") //每月第一天凌晨5点
-    public void awardRank(){
-        log.info("触发发送商家月排行榜奖励定时任务==============");
-        rankAwardRecordService.awardRank();
+    public void cityAwardRank(){
+        log.info("触发城市商家月排行榜奖励定时任务==============");
+        rankAwardRecordService.cityAwardRank();
+    }
+
+    /**
+     * 区月榜
+     */
+    @Scheduled(cron = "0 10 5 1 * ?") //每月第一天凌晨5点10
+    public void districtAwardRank(){
+        log.info("触发区域商家月排行榜奖励定时任务==============");
+        rankAwardRecordService.districtAwardRank();
     }
 }

+ 20 - 0
vehicle-server/src/main/resources/mapper/DynamicResourceMapper.xml

@@ -0,0 +1,20 @@
+<?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.DynamicResourceMapper">
+
+    <resultMap type="com.chelvc.cloud.vehicle.server.entity.DynamicResource" id="DynamicResourceResult">
+    <result property="id" column="id"/>
+    <result property="dynamicId" column="dynamic_id"/>
+    <result property="resourceKey" column="resource_key"/>
+    <result property="sort" column="sort"/>
+    </resultMap>
+
+    <insert id="batchInsert" keyColumn="id" keyProperty="list.id" parameterType="java.util.List" useGeneratedKeys="true">
+        insert into dynamic_resource (id,dynamic_id,resource_frame,resource_key,sort) values
+        <foreach collection="list" item="item" index="index" separator="," >
+            (#{item.id},  #{item.dynamicId}, #{item.resourceKey}, #{item.resourceFrame}, #{item.sort})
+        </foreach>
+    </insert>
+</mapper>

+ 50 - 1
vehicle-server/src/main/resources/mapper/MerchantMapper.xml

@@ -109,7 +109,7 @@
             `merchant` mt
                 LEFT JOIN oms_order om ON mt.user_id = om.merchant_id
         WHERE
-            om.STATUS = 3
+            om.STATUS = 4
         <if test="level == 1">
             and mt.province = #{regionId}
         </if>
@@ -136,4 +136,53 @@
         update merchant set business_status = #{businessStatus} ,automatic = #{automatic}
         where id = #{merchantId}
     </update>
+
+    <select id="rankMerchants" resultType="com.chelvc.cloud.vehicle.api.dto.MerchantRankCountDTO">
+        SELECT
+        mt.id,
+        mt.user_id as userId,
+        SUM( om.pay_amount ) amount
+        FROM
+        `merchant` mt
+        LEFT JOIN oms_order om ON mt.user_id = om.merchant_id
+        WHERE
+        om.STATUS = 4
+        <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 between #{monthStartLocalTime} and #{monthEndLocalTime})
+        GROUP BY
+        mt.id
+        ORDER BY
+        amount DESC
+        limit #{limit}
+    </select>
+
+    <select id="queryTotalCommissionAmountByLastMonth" resultType="java.math.BigDecimal">
+        SELECT
+        SUM( r.reality_amount ) amount
+        FROM
+        `merchant` mt
+        LEFT JOIN oms_order om ON mt.user_id = om.merchant_id
+        LEFT JOIN currency_record r ON r.order_id = om.id
+        WHERE
+        om.STATUS = 4
+        and r.source_type = 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 between #{monthStartLocalTime} and #{monthEndLocalTime})
+    </select>
 </mapper>

+ 22 - 0
vehicle-server/src/main/resources/mapper/RankAwardRecordMapper.xml

@@ -14,4 +14,26 @@
             rank_award_record r
             ${ew.getCustomSqlSegment}
     </select>
+
+    <insert id="batchInsert" keyColumn="id" keyProperty="list.id" parameterType="java.util.List" useGeneratedKeys="true">
+        insert into rank_award_record (id,user_id,type,region_level,period,platform_type,rank,bonus,status,award_time,create_time) values
+        <foreach collection="list" item="item" index="index" separator="," >
+            (#{item.id},#{item.userId},#{item.type},#{item.regionLevel},#{item.period},#{item.platformType},#{item.rank},#{item.bonus}
+            ,#{item.status},#{item.awardTime},#{item.createTime})
+        </foreach>
+    </insert>
+
+    <select id="queryAmountByRegion" resultType="java.math.BigDecimal">
+        SELECT
+            SUM( a.bonus ) amount
+        FROM
+            rank_award_record a
+                LEFT JOIN merchant om ON a.user_id = om.user_id
+        WHERE
+            a.type = 2
+          AND a.region_level = 3
+          AND a.platform_type = 2
+          AND a.period = #{lastYearMonth}
+          AND om.city = #{regionId}
+    </select>
 </mapper>