Selaa lähdekoodia

分佣比例配置

igl 1 vuosi sitten
vanhempi
commit
45fa557ea4
18 muutettua tiedostoa jossa 430 lisäystä ja 41 poistoa
  1. 48 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/PlatformProfitRatioDTO.java
  2. 32 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EditPlatformProfitRatioParam.java
  3. 13 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/QueryPlatformProfitRatioParam.java
  4. 13 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/PlatformProfitRatioService.java
  5. 1 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/ProfitRatioConfigService.java
  6. 62 0
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/util/DateTimeUtils.java
  7. 5 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/OmsOrderMapper.java
  8. 22 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/PlatformProfitRatioMapper.java
  9. 8 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/IOmsOrderService.java
  10. 6 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/PlatformProfitRatioService.java
  11. 10 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/ProfitRatioConfigService.java
  12. 18 36
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderServiceImpl.java
  13. 104 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/PlatformProfitRatioServiceImpl.java
  14. 16 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ProfitRatioConfigServiceImpl.java
  15. 26 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/task/PlatformProfitRatioTask.java
  16. 12 1
      vehicle-server/src/main/resources/mapper/OmsOrderMapper.xml
  17. 33 0
      vehicle-server/src/main/resources/mapper/PlatformProfitRatioMapper.xml
  18. 1 1
      vehicle-server/src/main/resources/mapper/ProfitRatioConfigMapper.xml

+ 48 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/PlatformProfitRatioDTO.java

@@ -0,0 +1,48 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class PlatformProfitRatioDTO implements Serializable {
+
+    private static final long serialVersionUID = 4624792200393967056L;
+    /**
+     * 主键标识
+     */
+    private Long id;
+    /**
+     * 商家id
+     */
+    private Long userId;
+    /**
+     * 商家名称
+     */
+    private String name;
+    /**
+     * 商家上个月营业额
+     */
+    private BigDecimal turnover;
+    /**
+     * 平台商家分佣比例
+     */
+    private int ratio;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新用户
+     */
+    private Long updater;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+}

+ 32 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/EditPlatformProfitRatioParam.java

@@ -0,0 +1,32 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+public class EditPlatformProfitRatioParam implements Serializable {
+
+    private static final long serialVersionUID = 436283372436763938L;
+
+    /**
+     * 商家标识
+     */
+    @NotNull(message = "商家不能为空")
+    private Long userId;
+
+    /**
+     * 分佣比例
+     */
+    @Min(value = 0, message = "分佣比例不能小于0")
+    @Max(value = 100, message = "分佣比例不能大于100")
+    private int ratio;
+
+    /**
+     * 操作用户标识
+     */
+    private Long operateUserId;
+}

+ 13 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/param/QueryPlatformProfitRatioParam.java

@@ -0,0 +1,13 @@
+package com.chelvc.cloud.vehicle.api.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class QueryPlatformProfitRatioParam implements Serializable {
+
+    private static final long serialVersionUID = -1491557397318158754L;
+
+    private Long userId;
+}

+ 13 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/PlatformProfitRatioService.java

@@ -0,0 +1,13 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+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.framework.common.model.Pagination;
+
+public interface PlatformProfitRatioService {
+
+    void edit(EditPlatformProfitRatioParam param);
+
+    Pagination<PlatformProfitRatioDTO> queryPageList(QueryPlatformProfitRatioParam param, Long pageNum, Long pageSize);
+}

+ 1 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/ProfitRatioConfigService.java

@@ -16,4 +16,5 @@ public interface ProfitRatioConfigService {
 
     Pagination<ProfitRatioConfigDTO> queryPageList(QueryProfitRatioConfigParam param, Long pageNum,
                                                    Long pageSize);
+
 }

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

@@ -0,0 +1,62 @@
+package com.chelvc.cloud.vehicle.api.util;
+
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Calendar;
+import java.util.TimeZone;
+
+public class DateTimeUtils {
+
+    public static Long getLastMonthStartTime() {
+        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, -1);
+        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();
+    }
+
+    public static Long getLastMonthEndTime() {
+        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, -1);
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));// 获取当前月最后一天
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        calendar.set(Calendar.MILLISECOND, 999);
+        return calendar.getTimeInMillis();
+    }
+
+    /**
+     * 获取上个月开始时间
+     *
+     * @return
+     */
+    public static LocalDateTime getLastMonthStartLocalTime()  {
+        Long startTime = getLastMonthStartTime();
+        return LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneId.systemDefault());
+    }
+
+    /**
+     * 获取上个月结束时间
+     *
+     * @return
+     */
+    public static LocalDateTime getLastMonthEndLocalTime() {
+        Long endTime = getLastMonthEndTime();
+        return LocalDateTime.ofInstant(Instant.ofEpochMilli(endTime), ZoneId.systemDefault());
+    }
+}

+ 5 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/OmsOrderMapper.java

@@ -6,10 +6,11 @@ import com.chelvc.cloud.vehicle.api.dto.OmsOrderExampleDTO;
 import com.chelvc.cloud.vehicle.api.dto.OmsOrderItemDTO;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrderItem;
-import com.chelvc.cloud.vehicle.server.entity.Reservation;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 
@@ -116,4 +117,7 @@ public interface OmsOrderMapper extends BaseMapper<OmsOrder>
      * @return
      */
     Map<String,Object> getOrderQuantity();
+
+    BigDecimal queryAmountByLastMonth(@Param("merchantId")Long merchantId,
+                                      @Param("startLocalTime")LocalDateTime startLocalTime, @Param("endLocalTime")LocalDateTime endLocalTime);
 }

+ 22 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/PlatformProfitRatioMapper.java

@@ -0,0 +1,22 @@
+package com.chelvc.cloud.vehicle.server.dao;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.chelvc.cloud.vehicle.api.dto.PlatformProfitRatioDTO;
+import com.chelvc.cloud.vehicle.server.entity.PlatformProfitRatio;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Mapper
+public interface PlatformProfitRatioMapper extends BaseMapper<PlatformProfitRatio> {
+
+    IPage<PlatformProfitRatioDTO> queryPageList(@Param("page") Page<PlatformProfitRatioDTO> page, @Param(Constants.WRAPPER) QueryWrapper<PlatformProfitRatioDTO> wrapper);
+
+    int updateRatio(@Param("id") Long id, @Param("ratio") int ratio, @Param("now") LocalDateTime now, @Param("amount") BigDecimal amount);
+}

+ 8 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/IOmsOrderService.java

@@ -3,6 +3,8 @@ package com.chelvc.cloud.vehicle.server.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
 
+import java.math.BigDecimal;
+
 /**
  * 订单Service接口
  * 
@@ -11,4 +13,10 @@ import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
  */
 public interface IOmsOrderService  extends IService<OmsOrder>
 {
+    /**
+     * 查询商家上个月的营业额
+     * @param merchantId
+     * @return
+     */
+    BigDecimal queryAmountByLastMonth(Long merchantId);
 }

+ 6 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/PlatformProfitRatioService.java

@@ -0,0 +1,6 @@
+package com.chelvc.cloud.vehicle.server.service;
+
+public interface PlatformProfitRatioService {
+
+    void  updateProfitRatio();
+}

+ 10 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/ProfitRatioConfigService.java

@@ -0,0 +1,10 @@
+package com.chelvc.cloud.vehicle.server.service;
+
+import com.chelvc.cloud.vehicle.server.entity.ProfitRatioConfig;
+
+import java.util.List;
+
+public interface ProfitRatioConfigService {
+
+    List<ProfitRatioConfig> queryListByType(Integer type);
+}

+ 18 - 36
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderServiceImpl.java

@@ -1,46 +1,18 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.chelvc.cloud.uc.api.service.EmployeeService;
-import com.chelvc.cloud.vehicle.api.dto.CalcAmountDTO;
-import com.chelvc.cloud.vehicle.api.dto.CartPromotionItemDTO;
-import com.chelvc.cloud.vehicle.api.dto.ConfirmOrderResultDTO;
-import com.chelvc.cloud.vehicle.api.dto.CouponDTO;
-import com.chelvc.cloud.vehicle.api.dto.OmsCartItemDTO;
-import com.chelvc.cloud.vehicle.api.dto.OmsOrderDTO;
-import com.chelvc.cloud.vehicle.api.dto.OmsOrderDetailDTO;
-import com.chelvc.cloud.vehicle.api.dto.OmsOrderExampleDTO;
-import com.chelvc.cloud.vehicle.api.dto.OmsOrderItemDTO;
-import com.chelvc.cloud.vehicle.api.dto.UserCouponDTO;
+import com.chelvc.cloud.vehicle.api.dto.*;
 import com.chelvc.cloud.vehicle.api.param.OmsOrderModifyParam;
 import com.chelvc.cloud.vehicle.api.param.OrderPagingParam;
+import com.chelvc.cloud.vehicle.api.util.DateTimeUtils;
 import com.chelvc.cloud.vehicle.server.copier.MerchantCopier;
 import com.chelvc.cloud.vehicle.server.copier.OrderCopier;
 import com.chelvc.cloud.vehicle.server.dao.OmsOrderMapper;
 import com.chelvc.cloud.vehicle.server.dao.OmsOrderSettingMapper;
-import com.chelvc.cloud.vehicle.server.entity.Goods;
-import com.chelvc.cloud.vehicle.server.entity.Merchant;
-import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
-import com.chelvc.cloud.vehicle.server.entity.OmsOrderItem;
-import com.chelvc.cloud.vehicle.server.entity.OmsOrderSetting;
-import com.chelvc.cloud.vehicle.server.entity.UserCoupon;
-import com.chelvc.cloud.vehicle.server.service.GoodsService;
-import com.chelvc.cloud.vehicle.server.service.IOmsOrderItemService;
-import com.chelvc.cloud.vehicle.server.service.IOmsOrderService;
-import com.chelvc.cloud.vehicle.server.service.MerchantService;
-import com.chelvc.cloud.vehicle.server.service.OmsCartItemService;
-import com.chelvc.cloud.vehicle.server.service.OmsOrderSettingService;
-import com.chelvc.cloud.vehicle.server.service.UserCouponService;
+import com.chelvc.cloud.vehicle.server.entity.*;
+import com.chelvc.cloud.vehicle.server.service.*;
 import com.chelvc.framework.base.context.SessionContextHolder;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.util.StringUtils;
@@ -52,6 +24,12 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.*;
+
 /**
  * 订单Service业务层处理
  * 
@@ -62,6 +40,8 @@ import org.springframework.util.CollectionUtils;
 @DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.IOmsOrderService.class)
 public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> implements IOmsOrderService,
         com.chelvc.cloud.vehicle.api.service.IOmsOrderService {
+
+    private final OmsOrderMapper omsOrderMapper;
     private final OmsCartItemService omsCartItemService;
 
     private final OmsOrderSettingService orderSettingService;
@@ -762,8 +742,10 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
     }
 
 
-
-
-
-
+    @Override
+    public BigDecimal queryAmountByLastMonth(Long merchantId) {
+        LocalDateTime startLocalTime = DateTimeUtils.getLastMonthStartLocalTime();
+        LocalDateTime endLocalTime = DateTimeUtils.getLastMonthEndLocalTime();
+        return omsOrderMapper.queryAmountByLastMonth(merchantId, startLocalTime, endLocalTime);
+    }
 }

+ 104 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/PlatformProfitRatioServiceImpl.java

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

+ 16 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ProfitRatioConfigServiceImpl.java

@@ -1,5 +1,6 @@
 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;
@@ -9,21 +10,25 @@ import com.chelvc.cloud.vehicle.api.dto.ProfitRatioConfigDTO;
 import com.chelvc.cloud.vehicle.api.param.AddProfitRatioConfigParams;
 import com.chelvc.cloud.vehicle.api.param.EditProfitRatioConfigParams;
 import com.chelvc.cloud.vehicle.api.param.QueryProfitRatioConfigParam;
-import com.chelvc.cloud.vehicle.api.service.ProfitRatioConfigService;
 import com.chelvc.cloud.vehicle.server.dao.ProfitRatioConfigMapper;
 import com.chelvc.cloud.vehicle.server.entity.ProfitRatioConfig;
+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.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
+import java.util.List;
 
+@Service
 @RequiredArgsConstructor(onConstructor = @__(@Autowired))
 @DubboService(interfaceClass = com.chelvc.cloud.vehicle.api.service.ProfitRatioConfigService.class)
-public class ProfitRatioConfigServiceImpl extends ServiceImpl<ProfitRatioConfigMapper, ProfitRatioConfig> implements ProfitRatioConfigService {
+public class ProfitRatioConfigServiceImpl extends ServiceImpl<ProfitRatioConfigMapper, ProfitRatioConfig> implements
+        ProfitRatioConfigService, com.chelvc.cloud.vehicle.api.service.ProfitRatioConfigService {
 
     private final ProfitRatioConfigMapper baseMapper;
 
@@ -83,4 +88,13 @@ public class ProfitRatioConfigServiceImpl extends ServiceImpl<ProfitRatioConfigM
         return Pagination.<ProfitRatioConfigDTO>builder().total(result.getTotal()).pages(result.getPages())
                 .records(result.getRecords()).build();
     }
+
+    @Override
+    public List<ProfitRatioConfig> queryListByType(Integer type) {
+        LambdaQueryWrapper<ProfitRatioConfig> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(ProfitRatioConfig::getType, type);
+        wrapper.eq(ProfitRatioConfig::getStatus, 0);
+        wrapper.orderByDesc(ProfitRatioConfig::getNum);
+        return baseMapper.selectList(wrapper);
+    }
 }

+ 26 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/task/PlatformProfitRatioTask.java

@@ -0,0 +1,26 @@
+package com.chelvc.cloud.vehicle.server.task;
+
+import com.chelvc.cloud.vehicle.server.service.PlatformProfitRatioService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 计算平台分佣比例
+ */
+@Slf4j
+@Component
+@EnableScheduling //开启定时任务
+public class PlatformProfitRatioTask {
+
+    @Autowired
+    PlatformProfitRatioService platformProfitRatioService;
+
+    @Scheduled(cron = "0 0 0 1 * ?") //每月第一天凌晨0点
+    public void closeAccountTask(){
+        log.info("触发更新平台分佣比例定时任务==============");
+        platformProfitRatioService.updateProfitRatio();
+    }
+}

+ 12 - 1
vehicle-server/src/main/resources/mapper/OmsOrderMapper.xml

@@ -936,6 +936,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
 
-
+    <select id="queryAmountByLastMonth" resultType="java.math.BigDecimal">
+        select
+            count(pay_amount)
+        from
+            oms_order
+        where
+            merchant_id = #{merchantId}
+        and
+            status = 3
+        and
+            payment_time between #{startLocalTime} and #{endLocalTime}
+    </select>
 
 </mapper>

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

@@ -0,0 +1,33 @@
+<?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.UserCouponMapper">
+
+    <resultMap type="com.chelvc.cloud.vehicle.api.dto.PlatformProfitRatioDTO" id="PlatformProfitRatioResult">
+        <result property="id" column="id"/>
+        <result property="ratio" column="ratio"/>
+        <result property="userId" column="user_id"/>
+        <result property="turnover" column="turnover"/>
+        <result property="name" column="name"/>
+        <result property="updater" column="updater"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <select id="queryPageList" resultMap="PlatformProfitRatioResult">
+        SELECT
+            t.*,m.name
+        FROM
+            platform_profit_ratio t
+            left join merchant m on t.user_id = t.user_id
+            ${ew.getCustomSqlSegment}
+    </select>
+
+    <update id="updateRatio">
+        update
+            platform_profit_ratio
+        set
+            ratio = #{ratio}, update_time = #{now}, updater = 1, turnover = #{amount}
+        where
+            id = #{id}
+    </update>
+</mapper>

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

@@ -14,7 +14,7 @@
         <result property="updateTime" column="update_time"/>
     </resultMap>
 
-    <select id="selectAttention" resultMap="ProfitRatioConfigResult">
+    <select id="queryPageList" resultMap="ProfitRatioConfigResult">
         SELECT
             *
         FROM