|
@@ -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;
|
|
|
+ }
|
|
|
}
|
|
|
}
|