Selaa lähdekoodia

fixed 员工提成结算、提现相关功能

fushengqian 1 vuosi sitten
vanhempi
commit
cf0e5e516f
23 muutettua tiedostoa jossa 926 lisäystä ja 46 poistoa
  1. 3 0
      fuint-application/src/main/java/com/fuint/common/Constants.java
  2. 67 0
      fuint-application/src/main/java/com/fuint/common/dto/CommissionCashDto.java
  3. 3 0
      fuint-application/src/main/java/com/fuint/common/dto/CommissionLogDto.java
  4. 39 0
      fuint-application/src/main/java/com/fuint/common/enums/CommissionCashStatusEnum.java
  5. 3 2
      fuint-application/src/main/java/com/fuint/common/enums/CommissionStatusEnum.java
  6. 54 0
      fuint-application/src/main/java/com/fuint/common/enums/CommissionTypeEnum.java
  7. 54 0
      fuint-application/src/main/java/com/fuint/common/service/CommissionCashService.java
  8. 1 1
      fuint-application/src/main/java/com/fuint/common/service/OrderService.java
  9. 247 0
      fuint-application/src/main/java/com/fuint/common/service/impl/CommissionCashServiceImpl.java
  10. 90 29
      fuint-application/src/main/java/com/fuint/common/service/impl/CommissionLogServiceImpl.java
  11. 0 1
      fuint-application/src/main/java/com/fuint/common/service/impl/CouponServiceImpl.java
  12. 3 3
      fuint-application/src/main/java/com/fuint/common/service/impl/OrderServiceImpl.java
  13. 174 0
      fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCommissionCashController.java
  14. 93 3
      fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCommissionLogController.java
  15. 4 4
      fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCommissionRuleController.java
  16. 1 1
      fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCouponGroupController.java
  17. 1 1
      fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendMemberController.java
  18. 30 0
      fuint-application/src/main/java/com/fuint/module/backendApi/request/CommissionCashRequest.java
  19. 37 0
      fuint-application/src/main/java/com/fuint/module/backendApi/request/CommissionSettleRequest.java
  20. 16 0
      fuint-repository/src/main/java/com/fuint/repository/model/MtCommissionCash.java
  21. 3 0
      fuint-repository/src/main/java/com/fuint/repository/model/MtCommissionLog.java
  22. 2 0
      fuint-repository/src/main/java/com/fuint/repository/model/MtOrder.java
  23. 1 1
      fuint-repository/src/main/resources/mapper/MtOrderMapper.xml

+ 3 - 0
fuint-application/src/main/java/com/fuint/common/Constants.java

@@ -20,6 +20,9 @@ public class Constants {
     // 读取数据最多行数
     public static final int MAX_ROWS = 2000;
 
+    // 读取数据全部行数
+    public static final int ALL_ROWS = 1000000;
+
     /**
      * 系统配置, 从setting表中读取
      */

+ 67 - 0
fuint-application/src/main/java/com/fuint/common/dto/CommissionCashDto.java

@@ -0,0 +1,67 @@
+package com.fuint.common.dto;
+
+import com.fuint.repository.model.MtStaff;
+import com.fuint.repository.model.MtStore;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 分销提成提现实体
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+@Data
+public class CommissionCashDto implements Serializable {
+
+    @ApiModelProperty("自增ID")
+    private Integer id;
+
+    @ApiModelProperty("结算单号")
+    private String settleNo;
+
+    @ApiModelProperty("结算uuid")
+    private String uuid;
+
+    @ApiModelProperty("商户ID")
+    private Integer merchantId;
+
+    @ApiModelProperty("店铺ID")
+    private Integer storeId;
+
+    @ApiModelProperty("所属店铺信息")
+    private MtStore storeInfo;
+
+    @ApiModelProperty("会员ID")
+    private Integer userId;
+
+    @ApiModelProperty("用户信息")
+    private OrderUserDto userInfo;
+
+    @ApiModelProperty("员工ID")
+    private Integer staffId;
+
+    @ApiModelProperty("所属店铺信息")
+    private MtStaff staffInfo;
+
+    @ApiModelProperty("金额")
+    private BigDecimal amount;
+
+    @ApiModelProperty("备注")
+    private String description;
+
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+    @ApiModelProperty("更新时间")
+    private Date updateTime;
+
+    @ApiModelProperty("最后操作人")
+    private String operator;
+
+    @ApiModelProperty("状态")
+    private String status;
+
+}

+ 3 - 0
fuint-application/src/main/java/com/fuint/common/dto/CommissionLogDto.java

@@ -24,6 +24,9 @@ public class CommissionLogDto implements Serializable {
     @ApiModelProperty("分佣类型")
     private String type;
 
+    @ApiModelProperty("分佣对象")
+    private String target;
+
     @ApiModelProperty("分佣类型名称")
     private String typeName;
 

+ 39 - 0
fuint-application/src/main/java/com/fuint/common/enums/CommissionCashStatusEnum.java

@@ -0,0 +1,39 @@
+package com.fuint.common.enums;
+
+/**
+ * 分佣结算状态
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+public enum CommissionCashStatusEnum {
+    WAIT("A", "待确认"),
+    SETTLED("B", "已确认"),
+    CANCEL("C", "已支付"),
+    PAYED("D", "已作废");
+
+    private String key;
+
+    private String value;
+
+    CommissionCashStatusEnum(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}

+ 3 - 2
fuint-application/src/main/java/com/fuint/common/enums/CommissionStatusEnum.java

@@ -7,8 +7,9 @@ package com.fuint.common.enums;
  * CopyRight https://www.fuint.cn
  */
 public enum CommissionStatusEnum {
-    NORMAL("A", "正常"),
-    CANCEL("N", "作废");
+    NORMAL("A", "待结算"),
+    SETTLED("B", "已结算"),
+    CANCEL("C", "已作废");
 
     private String key;
 

+ 54 - 0
fuint-application/src/main/java/com/fuint/common/enums/CommissionTypeEnum.java

@@ -0,0 +1,54 @@
+package com.fuint.common.enums;
+
+/**
+ * 分佣提成类型
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+public enum CommissionTypeEnum {
+    GOOGS("goods", "商品订单"),
+    PAYMENT("payment", "付款订单"),
+    RECHARGE("recharge", "充值订单");
+
+    private String key;
+
+    private String value;
+
+    CommissionTypeEnum(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 根据key获取value
+     *
+     * @param key
+     * @return
+     */
+    public static String getName(String key) {
+        final CommissionTypeEnum[] values = CommissionTypeEnum.values();
+        for (CommissionTypeEnum value : values) {
+            if (key.equals(value.getKey())) {
+                return value.getValue();
+            }
+        }
+        return null;
+    }
+}

+ 54 - 0
fuint-application/src/main/java/com/fuint/common/service/CommissionCashService.java

@@ -0,0 +1,54 @@
+package com.fuint.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fuint.common.dto.CommissionCashDto;
+import com.fuint.framework.pagination.PaginationRequest;
+import com.fuint.framework.pagination.PaginationResponse;
+import com.fuint.framework.exception.BusinessCheckException;
+import com.fuint.module.backendApi.request.CommissionCashRequest;
+import com.fuint.module.backendApi.request.CommissionSettleRequest;
+import com.fuint.repository.model.MtCommissionCash;
+
+/**
+ * 分销提成记录业务接口
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+public interface CommissionCashService extends IService<MtCommissionCash> {
+
+    /**
+     * 分页查询列表
+     *
+     * @param paginationRequest
+     * @return
+     */
+    PaginationResponse<CommissionCashDto> queryCommissionCashByPagination(PaginationRequest paginationRequest) throws BusinessCheckException;
+
+    /**
+     * 计算订单分销提成
+     *
+     * @param  commissionSettleRequest 结算参数
+     * @throws BusinessCheckException
+     * @return
+     */
+    String settleCommission(CommissionSettleRequest commissionSettleRequest) throws BusinessCheckException;
+
+    /**
+     * 根据ID获取记录信息
+     *
+     * @param  id 记录ID
+     * @throws BusinessCheckException
+     * @return
+     */
+    CommissionCashDto queryCommissionCashById(Integer id) throws BusinessCheckException;
+
+    /**
+     * 更新分销提成记录
+     *
+     * @param commissionCashRequest 请求参数
+     * @throws BusinessCheckException
+     * @return
+     */
+    void updateCommissionCash(CommissionCashRequest commissionCashRequest) throws BusinessCheckException;
+}

+ 1 - 1
fuint-application/src/main/java/com/fuint/common/service/OrderService.java

@@ -233,7 +233,7 @@ public interface OrderService extends IService<MtOrder> {
     Integer getUserPayOrderCount(Integer userId) throws BusinessCheckException;
 
     /**
-     * 获取待分佣订单列表
+     * 获取待分佣订单列表
      *
      * @param dateTime 时间
      * @throws BusinessCheckException

+ 247 - 0
fuint-application/src/main/java/com/fuint/common/service/impl/CommissionCashServiceImpl.java

@@ -0,0 +1,247 @@
+package com.fuint.common.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.fuint.common.Constants;
+import com.fuint.common.enums.*;
+import com.fuint.common.service.*;
+import com.fuint.common.util.CommonUtil;
+import com.fuint.framework.annoation.OperationServiceLog;
+import com.fuint.framework.exception.BusinessCheckException;
+import com.fuint.framework.pagination.PaginationRequest;
+import com.fuint.framework.pagination.PaginationResponse;
+import com.fuint.module.backendApi.request.CommissionCashRequest;
+import com.fuint.module.backendApi.request.CommissionLogRequest;
+import com.fuint.module.backendApi.request.CommissionSettleRequest;
+import com.fuint.repository.mapper.MtCommissionCashMapper;
+import com.fuint.common.dto.CommissionCashDto;
+import com.fuint.repository.mapper.MtCommissionLogMapper;
+import com.fuint.repository.model.*;
+import com.fuint.utils.StringUtil;
+import com.github.pagehelper.PageHelper;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.github.pagehelper.Page;
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * 分销提成提现服务接口
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+@Service
+@AllArgsConstructor
+public class CommissionCashServiceImpl extends ServiceImpl<MtCommissionCashMapper, MtCommissionCash> implements CommissionCashService {
+
+    private static final Logger logger = LoggerFactory.getLogger(CommissionCashServiceImpl.class);
+
+    private MtCommissionCashMapper mtCommissionCashMapper;
+
+    private MtCommissionLogMapper mtCommissionLogMapper;
+
+    /**
+     * 店铺服务接口
+     * */
+    private StoreService storeService;
+
+    /**
+     * 员工服务接口
+     * */
+    private StaffService staffService;
+
+    /**
+     * 分销提成记录业务接口
+     */
+    private CommissionLogService commissionLogService;
+
+    /**
+     * 分页查询提现列表
+     *
+     * @param paginationRequest
+     * @return
+     */
+    @Override
+    public PaginationResponse<CommissionCashDto> queryCommissionCashByPagination(PaginationRequest paginationRequest) {
+        Page<MtCommissionCash> pageHelper = PageHelper.startPage(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
+        LambdaQueryWrapper<MtCommissionCash> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.ne(MtCommissionCash::getStatus, StatusEnum.DISABLE.getKey());
+
+        String status = paginationRequest.getSearchParams().get("status") == null ? "" : paginationRequest.getSearchParams().get("status").toString();
+        if (StringUtils.isNotBlank(status)) {
+            lambdaQueryWrapper.eq(MtCommissionCash::getStatus, status);
+        }
+        String merchantId = paginationRequest.getSearchParams().get("merchantId") == null ? "" : paginationRequest.getSearchParams().get("merchantId").toString();
+        if (StringUtils.isNotBlank(merchantId)) {
+            lambdaQueryWrapper.eq(MtCommissionCash::getMerchantId, merchantId);
+        }
+        String storeId = paginationRequest.getSearchParams().get("storeId") == null ? "" : paginationRequest.getSearchParams().get("storeId").toString();
+        if (StringUtils.isNotBlank(storeId)) {
+            lambdaQueryWrapper.eq(MtCommissionCash::getStoreId, storeId);
+        }
+
+        lambdaQueryWrapper.orderByDesc(MtCommissionCash::getId);
+        List<MtCommissionCash> commissionCashList = mtCommissionCashMapper.selectList(lambdaQueryWrapper);
+        List<CommissionCashDto> dataList = new ArrayList<>();
+        if (commissionCashList != null && commissionCashList.size() > 0) {
+            for (MtCommissionCash mtCommissionCash : commissionCashList) {
+                 CommissionCashDto commissionCashDto = new CommissionCashDto();
+                 BeanUtils.copyProperties(mtCommissionCash, commissionCashDto);
+                 MtStore mtStore = storeService.getById(mtCommissionCash.getStoreId());
+                 commissionCashDto.setStoreInfo(mtStore);
+                 MtStaff mtStaff = staffService.getById(mtCommissionCash.getStaffId());
+                 commissionCashDto.setStaffInfo(mtStaff);
+                 dataList.add(commissionCashDto);
+            }
+        }
+        PageRequest pageRequest = PageRequest.of(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
+        PageImpl pageImpl = new PageImpl(dataList, pageRequest, pageHelper.getTotal());
+        PaginationResponse<CommissionCashDto> paginationResponse = new PaginationResponse(pageImpl, CommissionCashDto.class);
+        paginationResponse.setTotalPages(pageHelper.getPages());
+        paginationResponse.setTotalElements(pageHelper.getTotal());
+        paginationResponse.setContent(dataList);
+
+        return paginationResponse;
+    }
+
+    /**
+     * 分销提成结算
+     *
+     * @param commissionSettleRequest 结算参数
+     * @return
+     */
+    @Override
+    @Transactional
+    public String settleCommission(CommissionSettleRequest commissionSettleRequest) throws BusinessCheckException {
+        LambdaQueryWrapper<MtCommissionLog> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.eq(MtCommissionLog::getStatus, CommissionStatusEnum.NORMAL.getKey());
+        if (commissionSettleRequest.getMerchantId() != null && StringUtils.isNotBlank(commissionSettleRequest.getMerchantId().toString())) {
+            lambdaQueryWrapper.eq(MtCommissionLog::getMerchantId, commissionSettleRequest.getMerchantId());
+        }
+        if (commissionSettleRequest.getStoreId() != null && StringUtils.isNotBlank(commissionSettleRequest.getStoreId().toString())) {
+            lambdaQueryWrapper.eq(MtCommissionLog::getStoreId, commissionSettleRequest.getStoreId());
+        }
+        String realName = commissionSettleRequest.getRealName();
+        if (StringUtils.isNotBlank(realName)) {
+            Map<String, Object> params = new HashMap<>();
+            params.put("REAL_NAME", realName);
+            params.put("AUDITED_STATUS", StatusEnum.ENABLED.getKey());
+            List<MtStaff> staffList = staffService.queryStaffByParams(params);
+            if (staffList != null && staffList.size() > 0) {
+                lambdaQueryWrapper.eq(MtCommissionLog::getStaffId, staffList.get(0).getId());
+            }
+        }
+        String mobile =commissionSettleRequest.getMobile();
+        if (StringUtils.isNotBlank(mobile)) {
+            MtStaff mtStaff = staffService.queryStaffByMobile(mobile);
+            if (mtStaff != null) {
+                lambdaQueryWrapper.eq(MtCommissionLog::getStaffId, mtStaff.getId());
+            }
+        }
+        lambdaQueryWrapper.orderByDesc(MtCommissionLog::getId);
+        List<MtCommissionLog> commissionLogList = mtCommissionLogMapper.selectList(lambdaQueryWrapper);
+        List<Integer> staffIds = new ArrayList<>();
+        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
+        if (commissionLogList != null && commissionLogList.size() > 0) {
+            for (MtCommissionLog mtCommissionLog : commissionLogList) {
+                 if (mtCommissionLog.getStaffId() != null && mtCommissionLog.getStaffId() > 0 && !staffIds.contains(mtCommissionLog.getStaffId())) {
+                     staffIds.add(mtCommissionLog.getStaffId());
+                 }
+            }
+        }
+        if (staffIds.size() > 0) {
+            for (Integer staffId : staffIds) {
+                 BigDecimal totalAmount = new BigDecimal("0");
+                 Integer cashMerchantId = 0;
+                 Integer cashStoreId = 0;
+                 for (MtCommissionLog mtCommissionLog : commissionLogList) {
+                      if (mtCommissionLog.getStaffId().equals(staffId)) {
+                          totalAmount = totalAmount.add(mtCommissionLog.getAmount());
+                          if (mtCommissionLog.getMerchantId() != null && mtCommissionLog.getMerchantId() > 0) {
+                              cashMerchantId = mtCommissionLog.getMerchantId();
+                          }
+                          if (mtCommissionLog.getStoreId() != null && mtCommissionLog.getStoreId() > 0) {
+                              cashStoreId = mtCommissionLog.getStoreId();
+                          }
+                          CommissionLogRequest commissionLogRequest = new CommissionLogRequest();
+                          commissionLogRequest.setId(mtCommissionLog.getId());
+                          commissionLogRequest.setOperator(commissionSettleRequest.getOperator());
+                          commissionLogRequest.setStatus(CommissionStatusEnum.SETTLED.getKey());
+                          commissionLogService.updateCommissionLog(commissionLogRequest);
+                      }
+                 }
+                 MtCommissionCash mtCommissionCash = new MtCommissionCash();
+                String settleNo = CommonUtil.createSettlementNo();
+                 mtCommissionCash.setSettleNo(settleNo);
+                 mtCommissionCash.setUuid(uuid);
+                 mtCommissionCash.setStaffId(staffId);
+                 if (cashStoreId > 0) {
+                     mtCommissionCash.setStoreId(cashStoreId);
+                 }
+                 if (cashMerchantId > 0) {
+                     mtCommissionCash.setMerchantId(cashMerchantId);
+                 }
+                 mtCommissionCash.setAmount(totalAmount);
+                 Date time = new Date();
+                 mtCommissionCash.setCreateTime(time);
+                 mtCommissionCash.setUpdateTime(time);
+                 mtCommissionCash.setOperator(commissionSettleRequest.getOperator());
+                 mtCommissionCash.setStatus(CommissionCashStatusEnum.WAIT.getKey());
+                 this.save(mtCommissionCash);
+            }
+        }
+        return uuid;
+    }
+
+    /**
+     * 根据ID获取记录信息
+     *
+     * @param id 分佣提成提现ID
+     * @return
+     */
+    @Override
+    public CommissionCashDto queryCommissionCashById(Integer id) {
+        MtCommissionCash mtCommissionCash = mtCommissionCashMapper.selectById(id);
+        CommissionCashDto commissionCashDto = null;
+        if (mtCommissionCash != null) {
+            BeanUtils.copyProperties(mtCommissionCash, commissionCashDto);
+        }
+        return commissionCashDto;
+    }
+
+    /**
+     * 更新分销提成提现
+     *
+     * @param commissionCashRequest 请求参数
+     * @return
+     */
+    @Override
+    @Transactional
+    @OperationServiceLog(description = "更新分销提成提现")
+    public void updateCommissionCash(CommissionCashRequest commissionCashRequest) throws BusinessCheckException {
+        MtCommissionCash mtCommissionCash =  mtCommissionCashMapper.selectById(commissionCashRequest.getId());
+        if (mtCommissionCash == null) {
+            logger.error("更新分销提成提现失败...");
+            throw new BusinessCheckException("更新分销提成提现失败");
+        }
+        mtCommissionCash.setStatus(commissionCashRequest.getStatus() == null ? CommissionStatusEnum.NORMAL.getKey() : commissionCashRequest.getStatus());
+        mtCommissionCash.setUpdateTime(new Date());
+        if (commissionCashRequest.getAmount() != null) {
+            mtCommissionCash.setAmount(new BigDecimal(commissionCashRequest.getAmount()));
+        }
+        if (commissionCashRequest.getDescription() != null) {
+            mtCommissionCash.setDescription(commissionCashRequest.getDescription());
+        }
+        mtCommissionCash.setOperator(commissionCashRequest.getOperator());
+        mtCommissionCashMapper.updateById(mtCommissionCash);
+    }
+}

+ 90 - 29
fuint-application/src/main/java/com/fuint/common/service/impl/CommissionLogServiceImpl.java

@@ -13,8 +13,10 @@ import com.fuint.framework.pagination.PaginationResponse;
 import com.fuint.module.backendApi.request.CommissionLogRequest;
 import com.fuint.repository.mapper.MtCommissionLogMapper;
 import com.fuint.repository.mapper.MtCommissionRuleItemMapper;
+import com.fuint.repository.mapper.MtCommissionRuleMapper;
 import com.fuint.repository.mapper.MtOrderGoodsMapper;
 import com.fuint.repository.model.*;
+import com.fuint.utils.StringUtil;
 import com.github.pagehelper.PageHelper;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
@@ -43,6 +45,8 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
 
     private MtCommissionLogMapper mtCommissionLogMapper;
 
+    private MtCommissionRuleMapper mtCommissionRuleMapper;
+
     private MtCommissionRuleItemMapper mtCommissionRuleItemMapper;
 
     private MtOrderGoodsMapper mtOrderGoodsMapper;
@@ -68,17 +72,36 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
     private CommissionRuleService commissionRuleService;
 
     /**
-     * 分页查询记录列表
+     * 分页查询分销提成列表
      *
      * @param paginationRequest
      * @return
      */
     @Override
-    public PaginationResponse<CommissionLogDto> queryCommissionLogByPagination(PaginationRequest paginationRequest) {
-        Page<MtCommissionLog> pageHelper = PageHelper.startPage(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
+    public PaginationResponse<CommissionLogDto> queryCommissionLogByPagination(PaginationRequest paginationRequest) throws BusinessCheckException {
         LambdaQueryWrapper<MtCommissionLog> lambdaQueryWrapper = Wrappers.lambdaQuery();
         lambdaQueryWrapper.ne(MtCommissionLog::getStatus, StatusEnum.DISABLE.getKey());
-
+        String target = paginationRequest.getSearchParams().get("target") == null ? "" : paginationRequest.getSearchParams().get("target").toString();
+        if (StringUtils.isNotBlank(target)) {
+            lambdaQueryWrapper.eq(MtCommissionLog::getTarget, target);
+        }
+        String realName = paginationRequest.getSearchParams().get("realName") == null ? "" : paginationRequest.getSearchParams().get("realName").toString();
+        if (StringUtils.isNotBlank(realName)) {
+            Map<String, Object> params = new HashMap<>();
+            params.put("REAL_NAME", realName);
+            params.put("AUDITED_STATUS", StatusEnum.ENABLED.getKey());
+            List<MtStaff> staffList = staffService.queryStaffByParams(params);
+            if (staffList != null && staffList.size() > 0) {
+                lambdaQueryWrapper.eq(MtCommissionLog::getStaffId, staffList.get(0).getId());
+            }
+        }
+        String mobile = paginationRequest.getSearchParams().get("mobile") == null ? "" : paginationRequest.getSearchParams().get("mobile").toString();
+        if (StringUtils.isNotBlank(mobile)) {
+            MtStaff mtStaff = staffService.queryStaffByMobile(mobile);
+            if (mtStaff != null) {
+                lambdaQueryWrapper.eq(MtCommissionLog::getStaffId, mtStaff.getId());
+            }
+        }
         String status = paginationRequest.getSearchParams().get("status") == null ? "" : paginationRequest.getSearchParams().get("status").toString();
         if (StringUtils.isNotBlank(status)) {
             lambdaQueryWrapper.eq(MtCommissionLog::getStatus, status);
@@ -91,15 +114,25 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
         if (StringUtils.isNotBlank(storeId)) {
             lambdaQueryWrapper.eq(MtCommissionLog::getStoreId, storeId);
         }
+        // 开始时间、结束时间
+        String startTime = paginationRequest.getSearchParams().get("startTime") == null ? "" : paginationRequest.getSearchParams().get("startTime").toString();
+        String endTime = paginationRequest.getSearchParams().get("endTime") == null ? "" : paginationRequest.getSearchParams().get("endTime").toString();
+        if (StringUtil.isNotEmpty(startTime)) {
+            lambdaQueryWrapper.ge(MtCommissionLog::getCreateTime, startTime);
+        }
+        if (StringUtil.isNotEmpty(endTime)) {
+            lambdaQueryWrapper.le(MtCommissionLog::getCreateTime, endTime);
+        }
 
         lambdaQueryWrapper.orderByDesc(MtCommissionLog::getId);
+        Page<MtCommissionLog> pageHelper = PageHelper.startPage(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
         List<MtCommissionLog> commissionLogList = mtCommissionLogMapper.selectList(lambdaQueryWrapper);
         List<CommissionLogDto> dataList = new ArrayList<>();
         if (commissionLogList != null && commissionLogList.size() > 0) {
             for (MtCommissionLog mtCommissionLog : commissionLogList) {
                  CommissionLogDto commissionLogDto = new CommissionLogDto();
                  BeanUtils.copyProperties(mtCommissionLog, commissionLogDto);
-                 commissionLogDto.setTypeName(OrderTypeEnum.getName(mtCommissionLog.getType()));
+                 commissionLogDto.setTypeName(CommissionTypeEnum.getName(mtCommissionLog.getType()));
                  MtOrder mtOrder = orderService.getById(mtCommissionLog.getOrderId());
                  commissionLogDto.setOrderInfo(mtOrder);
                  MtStore mtStore = storeService.getById(mtCommissionLog.getStoreId());
@@ -129,11 +162,11 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
      */
     @Override
     @Transactional
-    public void calculateCommission(Integer orderId) {
+    public void calculateCommission(Integer orderId) throws BusinessCheckException {
         if (orderId != null && orderId > 0) {
             MtOrder mtOrder = orderService.getById(orderId);
             // 商品订单佣金计算
-            if (mtOrder != null && mtOrder.getType().equals(OrderTypeEnum.GOOGS.getKey())) {
+            if (mtOrder != null && mtOrder.getType().equals(CommissionTypeEnum.GOOGS.getKey())) {
                 Map<String, Object> params = new HashMap<>();
                 params.put("ORDER_ID", mtOrder.getId());
                 params.put("STATUS", StatusEnum.ENABLED.getKey());
@@ -144,35 +177,61 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
                          LambdaQueryWrapper<MtCommissionRuleItem> lambdaQueryWrapper = Wrappers.lambdaQuery();
                          lambdaQueryWrapper.eq(MtCommissionRuleItem::getMerchantId, mtOrder.getMerchantId());
                          lambdaQueryWrapper.eq(MtCommissionRuleItem::getTargetId, goodsId);
-                         lambdaQueryWrapper.eq(MtCommissionRuleItem::getType, OrderTypeEnum.GOOGS.getKey());
+                         lambdaQueryWrapper.eq(MtCommissionRuleItem::getType, CommissionTypeEnum.GOOGS.getKey());
                          lambdaQueryWrapper.eq(MtCommissionRuleItem::getStatus, StatusEnum.ENABLED.getKey());
                          lambdaQueryWrapper.orderByDesc(MtCommissionRuleItem::getId);
                          List<MtCommissionRuleItem> commissionRuleItemList = mtCommissionRuleItemMapper.selectList(lambdaQueryWrapper);
                          if (commissionRuleItemList != null && commissionRuleItemList.size() > 0) {
                              MtCommissionRuleItem mtCommissionRuleItem = commissionRuleItemList.get(0);
-                             MtCommissionLog mtCommissionLog = new MtCommissionLog();
-                             BigDecimal amount = orderGoods.getPrice().multiply(mtCommissionRuleItem.getGuest().divide(new BigDecimal("100")));
-                             mtCommissionLog.setType(mtOrder.getType());
-                             mtCommissionLog.setLevel(0);
-                             mtCommissionLog.setUserId(mtOrder.getUserId());
-                             mtCommissionLog.setOrderId(orderId);
-                             mtCommissionLog.setMerchantId(mtOrder.getMerchantId());
-                             mtCommissionLog.setStoreId(mtOrder.getStoreId());
-                             mtCommissionLog.setStaffId(mtOrder.getStaffId());
-                             mtCommissionLog.setAmount(amount);
-                             mtCommissionLog.setRuleId(mtCommissionRuleItem.getRuleId());
-                             mtCommissionLog.setRuleItemId(mtCommissionRuleItem.getId());
-                             mtCommissionLog.setCashId(0);
-                             mtCommissionLog.setCashTime(null);
-                             mtCommissionLog.setCreateTime(new Date());
-                             mtCommissionLog.setUpdateTime(new Date());
-                             mtCommissionLog.setStatus(StatusEnum.ENABLED.getKey());
-                             mtCommissionLog.setOperator(null);
-                             mtCommissionLogMapper.insert(mtCommissionLog);
+                             MtCommissionRule mtCommissionRule = mtCommissionRuleMapper.selectById(mtCommissionRuleItem.getRuleId());
+                             // 规则状态正常
+                             if (mtCommissionRule != null && mtCommissionRule.getStatus().equals(StatusEnum.ENABLED.getKey())) {
+                                 MtCommissionLog mtCommissionLog = new MtCommissionLog();
+                                 BigDecimal amount = orderGoods.getPrice().multiply(mtCommissionRuleItem.getGuest().divide(new BigDecimal("100")));
+                                 mtCommissionLog.setType(mtOrder.getType());
+                                 mtCommissionLog.setTarget(mtCommissionRule.getTarget());
+                                 mtCommissionLog.setLevel(0);
+                                 mtCommissionLog.setUserId(mtOrder.getUserId());
+                                 mtCommissionLog.setOrderId(orderId);
+                                 mtCommissionLog.setMerchantId(mtOrder.getMerchantId());
+                                 mtCommissionLog.setStoreId(mtOrder.getStoreId());
+                                 mtCommissionLog.setStaffId(mtOrder.getStaffId());
+                                 mtCommissionLog.setAmount(amount);
+                                 mtCommissionLog.setRuleId(mtCommissionRuleItem.getRuleId());
+                                 mtCommissionLog.setRuleItemId(mtCommissionRuleItem.getId());
+                                 mtCommissionLog.setCashId(0);
+                                 mtCommissionLog.setCashTime(null);
+                                 mtCommissionLog.setCreateTime(new Date());
+                                 mtCommissionLog.setUpdateTime(new Date());
+                                 mtCommissionLog.setStatus(StatusEnum.ENABLED.getKey());
+                                 mtCommissionLog.setOperator(null);
+                                 boolean flag = true;
+                                 // 员工提成校验
+                                 if (mtCommissionRule.getTarget().equals(CommissionTargetEnum.STAFF.getKey())) {
+                                     // 员工信息不能为空
+                                     if (mtCommissionLog.getStaffId() == null || mtCommissionLog.getStaffId() <= 0) {
+                                         flag = false;
+                                     }
+                                 }
+                                 // 会员分销校验
+                                 if (mtCommissionRule.getTarget().equals(CommissionTargetEnum.MEMBER.getKey())) {
+                                     // 会员信息不能为空
+                                     if (mtCommissionLog.getUserId() == null || mtCommissionLog.getUserId() <= 0) {
+                                         flag = false;
+                                     }
+                                 }
+                                 if (flag) {
+                                     mtCommissionLogMapper.insert(mtCommissionLog);
+                                 }
+                             }
                          }
                     }
                 }
             }
+            if (mtOrder != null) {
+                mtOrder.setCommissionStatus(StatusEnum.DISABLE.getKey());
+                orderService.updateOrder(mtOrder);
+            }
         } else {
             logger.error("计算分销提成订单不能ID为空...");
         }
@@ -207,9 +266,8 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
         MtCommissionLog mtCommissionLog =  mtCommissionLogMapper.selectById(commissionLogRequest.getId());
         if (mtCommissionLog == null) {
             logger.error("更新分销提成记录失败...");
-            throw new BusinessCheckException("更新分销提成记录失败");
+            throw new BusinessCheckException("更新分销提成记录失败,该记录不存在");
         }
-        mtCommissionLog.setStatus(commissionLogRequest.getStatus() == null ? CommissionStatusEnum.NORMAL.getKey() : commissionLogRequest.getStatus());
         mtCommissionLog.setUpdateTime(new Date());
         if (commissionLogRequest.getAmount() != null) {
             mtCommissionLog.setAmount(new BigDecimal(commissionLogRequest.getAmount()));
@@ -217,6 +275,9 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
         if (commissionLogRequest.getDescription() != null) {
             mtCommissionLog.setDescription(commissionLogRequest.getDescription());
         }
+        if (commissionLogRequest.getStatus() != null) {
+            mtCommissionLog.setStatus(commissionLogRequest.getStatus());
+        }
         mtCommissionLog.setOperator(commissionLogRequest.getOperator());
         mtCommissionLogMapper.updateById(mtCommissionLog);
     }

+ 0 - 1
fuint-application/src/main/java/com/fuint/common/service/impl/CouponServiceImpl.java

@@ -329,7 +329,6 @@ public class CouponServiceImpl extends ServiceImpl<MtCouponMapper, MtCoupon> imp
             Integer total = mtCoupon.getTotal() * mtCoupon.getSendNum();
             if (total > 0) {
                 String uuid = UUID.randomUUID().toString().replaceAll("-", "");
-
                 for (int i = 1; i <= total; i++) {
                     MtUserCoupon userCoupon = new MtUserCoupon();
                     userCoupon.setMerchantId(mtCoupon.getMerchantId());

+ 3 - 3
fuint-application/src/main/java/com/fuint/common/service/impl/OrderServiceImpl.java

@@ -2003,7 +2003,7 @@ public class OrderServiceImpl extends ServiceImpl<MtOrderMapper, MtOrder> implem
     /**
      * 获取会员支付金额
      *
-     * @param  userId 会员ID
+     * @param userId 会员ID
      * @return
      * */
     @Override
@@ -2014,7 +2014,7 @@ public class OrderServiceImpl extends ServiceImpl<MtOrderMapper, MtOrder> implem
     /**
      * 获取会员订单数
      *
-     * @param  userId 会员ID
+     * @param userId 会员ID
      * @return
      * */
     @Override
@@ -2023,7 +2023,7 @@ public class OrderServiceImpl extends ServiceImpl<MtOrderMapper, MtOrder> implem
     }
 
     /**
-     * 获取待分佣订单列表
+     * 获取待分佣订单列表
      *
      * @param dateTime 时间
      * @return

+ 174 - 0
fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCommissionCashController.java

@@ -0,0 +1,174 @@
+package com.fuint.module.backendApi.controller;
+
+import com.fuint.common.dto.AccountInfo;
+import com.fuint.common.dto.CommissionCashDto;
+import com.fuint.common.dto.ParamDto;
+import com.fuint.common.enums.CommissionCashStatusEnum;
+import com.fuint.common.service.CommissionCashService;
+import com.fuint.common.service.StoreService;
+import com.fuint.common.util.TokenUtil;
+import com.fuint.framework.web.BaseController;
+import com.fuint.framework.web.ResponseObject;
+import com.fuint.common.Constants;
+import com.fuint.common.enums.StatusEnum;
+import com.fuint.framework.pagination.PaginationRequest;
+import com.fuint.framework.pagination.PaginationResponse;
+import com.fuint.framework.exception.BusinessCheckException;
+import com.fuint.module.backendApi.request.CommissionCashRequest;
+import com.fuint.repository.model.MtStore;
+import com.fuint.utils.StringUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 分销提成提现管理类controller
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+@Api(tags="管理端-分销提成提现相关接口")
+@RestController
+@AllArgsConstructor
+@RequestMapping(value = "/backendApi/commissionCash")
+public class BackendCommissionCashController extends BaseController {
+
+    /**
+     * 店铺服务接口
+     */
+    private StoreService storeService;
+
+    /**
+     * 分销提成提现业务接口
+     */
+    private CommissionCashService commissionCashService;
+
+    /**
+     * 分销提成提现记录列表
+     *
+     * @param request HttpServletRequest对象
+     * @return 分销提成记录
+     */
+    @ApiOperation(value = "分销提成提现记录列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @CrossOrigin
+    @PreAuthorize("@pms.hasPermission('commission:cash:index')")
+    public ResponseObject list(HttpServletRequest request) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+        Integer page = request.getParameter("page") == null ? Constants.PAGE_NUMBER : Integer.parseInt(request.getParameter("page"));
+        Integer pageSize = request.getParameter("pageSize") == null ? Constants.PAGE_SIZE : Integer.parseInt(request.getParameter("pageSize"));
+        String title = request.getParameter("title");
+        String status = request.getParameter("status");
+        String searchStoreId = request.getParameter("storeId");
+
+        AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
+        Integer storeId;
+        if (accountInfo == null) {
+            return getFailureResult(1001, "请先登录");
+        } else {
+            storeId = accountInfo.getStoreId();
+        }
+
+        PaginationRequest paginationRequest = new PaginationRequest();
+        paginationRequest.setCurrentPage(page);
+        paginationRequest.setPageSize(pageSize);
+
+        Map<String, Object> params = new HashMap<>();
+        if (StringUtil.isNotEmpty(title)) {
+            params.put("title", title);
+        }
+        if (StringUtil.isNotEmpty(status)) {
+            params.put("status", status);
+        }
+        if (StringUtil.isNotEmpty(searchStoreId)) {
+            params.put("storeId", searchStoreId);
+        }
+        if (storeId != null && storeId > 0) {
+            params.put("storeId", storeId);
+        }
+        paginationRequest.setSearchParams(params);
+        PaginationResponse<CommissionCashDto> paginationResponse = commissionCashService.queryCommissionCashByPagination(paginationRequest);
+
+        Map<String, Object> paramsStore = new HashMap<>();
+        paramsStore.put("status", StatusEnum.ENABLED.getKey());
+        if (accountInfo.getStoreId() != null && accountInfo.getStoreId() > 0) {
+            paramsStore.put("storeId", accountInfo.getStoreId().toString());
+        }
+        if (accountInfo.getMerchantId() != null && accountInfo.getMerchantId() > 0) {
+            paramsStore.put("merchantId", accountInfo.getMerchantId());
+        }
+        List<MtStore> storeList = storeService.queryStoresByParams(paramsStore);
+
+        // 状态列表
+        CommissionCashStatusEnum[] statusListEnum = CommissionCashStatusEnum.values();
+        List<ParamDto> statusList = new ArrayList<>();
+        for (CommissionCashStatusEnum enumItem : statusListEnum) {
+            ParamDto paramDto = new ParamDto();
+            paramDto.setKey(enumItem.getKey());
+            paramDto.setName(enumItem.getValue());
+            paramDto.setValue(enumItem.getKey());
+            statusList.add(paramDto);
+        }
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("dataList", paginationResponse);
+        result.put("storeList", storeList);
+        result.put("statusList", statusList);
+
+        return getSuccessResult(result);
+    }
+
+    /**
+     * 获取分销提成记录详情
+     *
+     * @param  id
+     * @return
+     */
+    @ApiOperation(value = "获取分销提成提现详情")
+    @RequestMapping(value = "/info/{id}", method = RequestMethod.GET)
+    @CrossOrigin
+    @PreAuthorize("@pms.hasPermission('commission:cash:index')")
+    public ResponseObject info(HttpServletRequest request, @PathVariable("id") Integer id) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+        AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
+        if (accountInfo == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+
+        CommissionCashDto commissionCash = commissionCashService.queryCommissionCashById(id);
+        Map<String, Object> result = new HashMap<>();
+        result.put("commissionCash", commissionCash);
+
+        return getSuccessResult(result);
+    }
+
+    /**
+     * 修改分销提成提现记录
+     *
+     * @param request HttpServletRequest对象
+     * @return
+     */
+    @ApiOperation(value = "修改分销提成提现记录")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @PreAuthorize("@pms.hasPermission('commission:cash:index')")
+    public ResponseObject save(HttpServletRequest request, @RequestBody CommissionCashRequest commissionCashRequest) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+
+        AccountInfo accountDto = TokenUtil.getAccountInfoByToken(token);
+        if (accountDto == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+
+        commissionCashRequest.setOperator(accountDto.getAccountName());
+        commissionCashService.updateCommissionCash(commissionCashRequest);
+
+        return getSuccessResult(true);
+    }
+}

+ 93 - 3
fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCommissionLogController.java

@@ -4,6 +4,8 @@ import com.fuint.common.dto.AccountInfo;
 import com.fuint.common.dto.CommissionLogDto;
 import com.fuint.common.dto.ParamDto;
 import com.fuint.common.enums.CommissionStatusEnum;
+import com.fuint.common.enums.CommissionTargetEnum;
+import com.fuint.common.service.CommissionCashService;
 import com.fuint.common.service.CommissionLogService;
 import com.fuint.common.service.StoreService;
 import com.fuint.common.util.TokenUtil;
@@ -15,6 +17,7 @@ import com.fuint.framework.pagination.PaginationRequest;
 import com.fuint.framework.pagination.PaginationResponse;
 import com.fuint.framework.exception.BusinessCheckException;
 import com.fuint.module.backendApi.request.CommissionLogRequest;
+import com.fuint.module.backendApi.request.CommissionSettleRequest;
 import com.fuint.repository.model.MtStore;
 import com.fuint.utils.StringUtil;
 import io.swagger.annotations.Api;
@@ -45,6 +48,11 @@ public class BackendCommissionLogController extends BaseController {
      */
     private CommissionLogService commissionLogService;
 
+    /**
+     * 分销提成提现业务接口
+     */
+    private CommissionCashService commissionCashService;
+
     /**
      * 店铺服务接口
      */
@@ -64,9 +72,13 @@ public class BackendCommissionLogController extends BaseController {
         String token = request.getHeader("Access-Token");
         Integer page = request.getParameter("page") == null ? Constants.PAGE_NUMBER : Integer.parseInt(request.getParameter("page"));
         Integer pageSize = request.getParameter("pageSize") == null ? Constants.PAGE_SIZE : Integer.parseInt(request.getParameter("pageSize"));
-        String title = request.getParameter("title");
+        String target = request.getParameter("target");
         String status = request.getParameter("status");
         String searchStoreId = request.getParameter("storeId");
+        String realName = request.getParameter("realName");
+        String mobile = request.getParameter("mobile");
+        String startTime = request.getParameter("startTime") == null ? "" : request.getParameter("startTime");
+        String endTime = request.getParameter("endTime") == null ? "" : request.getParameter("endTime");
 
         AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
         Integer storeId;
@@ -81,8 +93,8 @@ public class BackendCommissionLogController extends BaseController {
         paginationRequest.setPageSize(pageSize);
 
         Map<String, Object> params = new HashMap<>();
-        if (StringUtil.isNotEmpty(title)) {
-            params.put("title", title);
+        if (StringUtil.isNotEmpty(target)) {
+            params.put("target", target);
         }
         if (StringUtil.isNotEmpty(status)) {
             params.put("status", status);
@@ -93,6 +105,21 @@ public class BackendCommissionLogController extends BaseController {
         if (storeId != null && storeId > 0) {
             params.put("storeId", storeId);
         }
+        if (accountInfo.getMerchantId() != null && accountInfo.getMerchantId() > 0) {
+            params.put("merchantId", accountInfo.getMerchantId());
+        }
+        if (StringUtil.isNotEmpty(startTime)) {
+            params.put("startTime", startTime);
+        }
+        if (StringUtil.isNotEmpty(endTime)) {
+            params.put("endTime", endTime);
+        }
+        if (StringUtil.isNotEmpty(realName)) {
+            params.put("realName", realName);
+        }
+        if (StringUtil.isNotEmpty(mobile)) {
+            params.put("mobile", mobile);
+        }
         paginationRequest.setSearchParams(params);
         PaginationResponse<CommissionLogDto> paginationResponse = commissionLogService.queryCommissionLogByPagination(paginationRequest);
 
@@ -117,10 +144,22 @@ public class BackendCommissionLogController extends BaseController {
             statusList.add(paramDto);
         }
 
+        // 分佣对象列表
+        CommissionTargetEnum[] targetListEnum = CommissionTargetEnum.values();
+        List<ParamDto> targetList = new ArrayList<>();
+        for (CommissionTargetEnum enumItem : targetListEnum) {
+            ParamDto paramDto = new ParamDto();
+            paramDto.setKey(enumItem.getKey());
+            paramDto.setName(enumItem.getValue());
+            paramDto.setValue(enumItem.getKey());
+            targetList.add(paramDto);
+        }
+
         Map<String, Object> result = new HashMap<>();
         result.put("dataList", paginationResponse);
         result.put("storeList", storeList);
         result.put("statusList", statusList);
+        result.put("targetList", targetList);
 
         return getSuccessResult(result);
     }
@@ -171,4 +210,55 @@ public class BackendCommissionLogController extends BaseController {
 
         return getSuccessResult(true);
     }
+
+    /**
+     * 作废分销提成记录
+     *
+     * @param  id
+     * @return
+     */
+    @ApiOperation(value = "作废分销提成记录")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
+    @CrossOrigin
+    @PreAuthorize("@pms.hasPermission('commission:log:index')")
+    public ResponseObject delete(HttpServletRequest request, @PathVariable("id") Integer id) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+        AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
+        if (accountInfo == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+
+        CommissionLogRequest commissionLogRequest = new CommissionLogRequest();
+        commissionLogRequest.setId(id);
+        commissionLogRequest.setStatus(CommissionStatusEnum.CANCEL.getKey());
+        commissionLogService.updateCommissionLog(commissionLogRequest);
+
+        return getSuccessResult(true);
+    }
+
+    /**
+     * 分销提成结算
+     *
+     * @param request HttpServletRequest对象
+     * @return
+     */
+    @ApiOperation(value = "分销提成结算")
+    @RequestMapping(value = "/doSettle", method = RequestMethod.POST)
+    @PreAuthorize("@pms.hasPermission('commission:log:index')")
+    public ResponseObject doSettle(HttpServletRequest request, @RequestBody CommissionSettleRequest commissionSettleRequest) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+
+        AccountInfo accountDto = TokenUtil.getAccountInfoByToken(token);
+        if (accountDto == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+
+        commissionSettleRequest.setOperator(accountDto.getAccountName());
+        commissionSettleRequest.setMerchantId(accountDto.getMerchantId());
+        if (accountDto.getStoreId() != null && accountDto.getStoreId() > 0) {
+            commissionSettleRequest.setStoreId(accountDto.getStoreId());
+        }
+        String settleNo = commissionCashService.settleCommission(commissionSettleRequest);
+        return getSuccessResult(settleNo);
+    }
 }

+ 4 - 4
fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCommissionRuleController.java

@@ -3,7 +3,7 @@ package com.fuint.module.backendApi.controller;
 import com.fuint.common.dto.AccountInfo;
 import com.fuint.common.dto.CommissionRuleDto;
 import com.fuint.common.dto.ParamDto;
-import com.fuint.common.enums.OrderTypeEnum;
+import com.fuint.common.enums.CommissionTypeEnum;
 import com.fuint.common.param.CommissionRuleParam;
 import com.fuint.common.service.CommissionRuleService;
 import com.fuint.common.service.StoreService;
@@ -103,10 +103,10 @@ public class BackendCommissionRuleController extends BaseController {
         paginationRequest.setSearchParams(params);
         PaginationResponse<MtCommissionRule> paginationResponse = commissionRuleService.queryDataByPagination(paginationRequest);
 
-        // 订单类型列表
-        OrderTypeEnum[] typeListEnum = OrderTypeEnum.values();
+        // 分佣提成类型列表
+        CommissionTypeEnum[] typeListEnum = CommissionTypeEnum.values();
         List<ParamDto> typeList = new ArrayList<>();
-        for (OrderTypeEnum enumItem : typeListEnum) {
+        for (CommissionTypeEnum enumItem : typeListEnum) {
             ParamDto paramDto = new ParamDto();
             paramDto.setKey(enumItem.getKey());
             paramDto.setName(enumItem.getValue());

+ 1 - 1
fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendCouponGroupController.java

@@ -326,7 +326,7 @@ public class BackendCouponGroupController extends BaseController {
 
         PaginationRequest paginationRequest = new PaginationRequest();
         paginationRequest.setCurrentPage(Constants.PAGE_NUMBER);
-        paginationRequest.setPageSize(Constants.MAX_ROWS);
+        paginationRequest.setPageSize(Constants.ALL_ROWS);
 
         Map<String, Object> param = new HashMap<>();
         param.put("status", StatusEnum.ENABLED.getKey());

+ 1 - 1
fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendMemberController.java

@@ -513,7 +513,7 @@ public class BackendMemberController extends BaseController {
         }
         PaginationRequest groupRequest = new PaginationRequest();
         groupRequest.setCurrentPage(1);
-        groupRequest.setPageSize(Constants.MAX_ROWS);
+        groupRequest.setPageSize(Constants.ALL_ROWS);
         groupRequest.setSearchParams(searchParams);
         PaginationResponse<UserGroupDto> groupResponse = memberGroupService.queryMemberGroupListByPagination(groupRequest);
         if (groupResponse != null && groupResponse.getContent() != null) {

+ 30 - 0
fuint-application/src/main/java/com/fuint/module/backendApi/request/CommissionCashRequest.java

@@ -0,0 +1,30 @@
+package com.fuint.module.backendApi.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 分佣提成提现请求参数
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+@Data
+public class CommissionCashRequest implements Serializable {
+
+    @ApiModelProperty(value="ID", name="id")
+    private Integer id;
+
+    @ApiModelProperty(value="分佣金额", name="amount")
+    private String amount;
+
+    @ApiModelProperty(value="备注说明", name="remark")
+    private String description;
+
+    @ApiModelProperty(value="状态", name="status")
+    private String status;
+
+    @ApiModelProperty(value="最后操作人", name="operator")
+    private String operator;
+}

+ 37 - 0
fuint-application/src/main/java/com/fuint/module/backendApi/request/CommissionSettleRequest.java

@@ -0,0 +1,37 @@
+package com.fuint.module.backendApi.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * 分佣提成结算请求参数
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+@Data
+public class CommissionSettleRequest implements Serializable {
+
+    @ApiModelProperty(value="商户ID", name="merchantId")
+    private Integer merchantId;
+
+    @ApiModelProperty(value="店铺ID", name="storeId")
+    private Integer storeId;
+
+    @ApiModelProperty(value="员工姓名", name="name")
+    private String realName;
+
+    @ApiModelProperty(value="员工手机号", name="mobile")
+    private String mobile;
+
+    @ApiModelProperty(value="开始时间", name="startTime")
+    private String startTime;
+
+    @ApiModelProperty(value="结束时间", name="endTime")
+    private String endTime;
+
+    @ApiModelProperty(value="操作人", name="operator")
+    private String operator;
+
+}

+ 16 - 0
fuint-repository/src/main/java/com/fuint/repository/model/MtCommissionCash.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -28,12 +29,27 @@ public class MtCommissionCash implements Serializable {
     @TableId(value = "ID", type = IdType.AUTO)
     private Integer id;
 
+    @ApiModelProperty("结算单号")
+    private String settleNo;
+
+    @ApiModelProperty("结算uuid")
+    private String uuid;
+
+    @ApiModelProperty("商户ID")
+    private Integer merchantId;
+
+    @ApiModelProperty("店铺ID")
+    private Integer storeId;
+
     @ApiModelProperty("会员ID")
     private Integer userId;
 
     @ApiModelProperty("员工ID")
     private Integer staffId;
 
+    @ApiModelProperty("金额")
+    private BigDecimal amount;
+
     @ApiModelProperty("备注")
     private String description;
 

+ 3 - 0
fuint-repository/src/main/java/com/fuint/repository/model/MtCommissionLog.java

@@ -29,6 +29,9 @@ public class MtCommissionLog implements Serializable {
     @TableId(value = "ID", type = IdType.AUTO)
     private Integer id;
 
+    @ApiModelProperty("分佣对象,member:会员分销;staff:员工提成")
+    private String target;
+
     @ApiModelProperty("分佣类型")
     private String type;
 

+ 2 - 0
fuint-repository/src/main/java/com/fuint/repository/model/MtOrder.java

@@ -110,5 +110,7 @@ public class MtOrder implements Serializable {
     @ApiModelProperty("最后操作人")
     private String operator;
 
+    @ApiModelProperty("分佣提成计算状态")
+    private String commissionStatus;
 
 }

+ 1 - 1
fuint-repository/src/main/resources/mapper/MtOrderMapper.xml

@@ -66,6 +66,6 @@
     </select>
 
     <select id="getTobeCommissionOrderList" resultType="com.fuint.repository.model.MtOrder">
-        SELECT t.* FROM `mt_order` t WHERE t.PAY_TIME &lt;= #{dateTime} AND t.ID NOT IN(SELECT ID FROM `mt_commission_log` c WHERE c.STATUS != 'D') ORDER BY t.ID DESC LIMIT 10
+        SELECT t.* FROM `mt_order` t WHERE t.PAY_TIME &lt;= #{dateTime} AND t.STATUS NOT IN('C', 'G', 'H') AND t.PAY_STATUS = 'B' AND t.COMMISSION_STATUS = 'A' ORDER BY t.ID DESC LIMIT 10
     </select>
 </mapper>