|
@@ -0,0 +1,104 @@
|
|
|
+package com.chelvc.cloud.vehicle.server.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+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.vehicle.api.dto.PlatformProfitRatioDTO;
|
|
|
+import com.chelvc.cloud.vehicle.api.param.EditPlatformProfitRatioParam;
|
|
|
+import com.chelvc.cloud.vehicle.api.param.QueryPlatformProfitRatioParam;
|
|
|
+import com.chelvc.cloud.vehicle.server.dao.PlatformProfitRatioMapper;
|
|
|
+import com.chelvc.cloud.vehicle.server.entity.PlatformProfitRatio;
|
|
|
+import com.chelvc.cloud.vehicle.server.entity.ProfitRatioConfig;
|
|
|
+import com.chelvc.cloud.vehicle.server.service.IOmsOrderService;
|
|
|
+import com.chelvc.cloud.vehicle.server.service.PlatformProfitRatioService;
|
|
|
+import com.chelvc.cloud.vehicle.server.service.ProfitRatioConfigService;
|
|
|
+import com.chelvc.framework.base.exception.ResourceUnavailableException;
|
|
|
+import com.chelvc.framework.common.model.Pagination;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import org.apache.dubbo.config.annotation.DubboService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
|
|
+@DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.PlatformProfitRatioService.class)
|
|
|
+public class PlatformProfitRatioServiceImpl extends ServiceImpl<PlatformProfitRatioMapper, PlatformProfitRatio>
|
|
|
+ implements PlatformProfitRatioService, com.chelvc.cloud.vehicle.api.service.PlatformProfitRatioService{
|
|
|
+
|
|
|
+ private final ProfitRatioConfigService profitRatioConfigService;
|
|
|
+
|
|
|
+ private final IOmsOrderService omsOrderService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Async
|
|
|
+ public void updateProfitRatio() {
|
|
|
+ Integer total = baseMapper.selectCount(null);
|
|
|
+ if (total <= 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<ProfitRatioConfig> profitRatioConfigs = profitRatioConfigService.queryListByType(1);
|
|
|
+ if(CollectionUtils.isEmpty(profitRatioConfigs)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ int pageNum = 1;
|
|
|
+ int pageSize = 100;
|
|
|
+ int pages = 1;
|
|
|
+ if (total > pageSize) {
|
|
|
+ pages = total % 100 != 0 ? (total / 100) + 1 : total / 100;
|
|
|
+ }
|
|
|
+ while (pageNum <= pages) {
|
|
|
+ Pagination<PlatformProfitRatioDTO> platformProfitRatioDTOPagination =
|
|
|
+ queryPageList(null, new Integer(pageNum).longValue(), new Integer(pageSize).longValue());
|
|
|
+ List<PlatformProfitRatioDTO> records = platformProfitRatioDTOPagination.getRecords();
|
|
|
+ if(!CollectionUtils.isEmpty(records)){
|
|
|
+ for(PlatformProfitRatioDTO dto : records){
|
|
|
+ Long userId = dto.getUserId();
|
|
|
+ BigDecimal amount = omsOrderService.queryAmountByLastMonth(userId);
|
|
|
+ for(ProfitRatioConfig config : profitRatioConfigs){
|
|
|
+ int num = config.getNum();
|
|
|
+ if(amount.compareTo(new BigDecimal(num)) > -1){
|
|
|
+ baseMapper.updateRatio(dto.getId(), config.getRatio(), LocalDateTime.now(), amount);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ pageNum += 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ 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());
|
|
|
+ wrapper.orderByAsc("t.create_time");
|
|
|
+ IPage<PlatformProfitRatioDTO> result = baseMapper.queryPageList(page, wrapper);
|
|
|
+ return Pagination.<PlatformProfitRatioDTO>builder().total(result.getTotal()).pages(result.getPages())
|
|
|
+ .records(result.getRecords()).build();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void edit(EditPlatformProfitRatioParam param) {
|
|
|
+ Long userId = param.getUserId();
|
|
|
+ LambdaQueryWrapper<PlatformProfitRatio> wrapper = Wrappers.lambdaQuery();
|
|
|
+ wrapper.eq(PlatformProfitRatio::getUserId, userId);
|
|
|
+ PlatformProfitRatio platformProfitRatio = baseMapper.selectOne(wrapper);
|
|
|
+ if(platformProfitRatio == null){
|
|
|
+ throw new ResourceUnavailableException("商家不存在");
|
|
|
+ }
|
|
|
+ platformProfitRatio.setRatio(param.getRatio());
|
|
|
+ platformProfitRatio.setUpdater(param.getOperateUserId());
|
|
|
+ platformProfitRatio.setUpdateTime(LocalDateTime.now());
|
|
|
+ baseMapper.updateById(platformProfitRatio);
|
|
|
+ }
|
|
|
+}
|