Ver Fonte

fixed 发起售后/员工提成功能迭代

fushengqian há 1 ano atrás
pai
commit
34e7344610

+ 24 - 2
fuint-application/src/main/java/com/fuint/common/dto/CommissionLogDto.java

@@ -1,5 +1,9 @@
 package com.fuint.common.dto;
 
+import com.fuint.repository.model.MtCommissionRule;
+import com.fuint.repository.model.MtOrder;
+import com.fuint.repository.model.MtStaff;
+import com.fuint.repository.model.MtStore;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import java.io.Serializable;
@@ -17,33 +21,51 @@ public class CommissionLogDto implements Serializable {
     @ApiModelProperty("自增ID")
     private Integer id;
 
-    @ApiModelProperty("分佣类型,member:会员分销;staff:员工提成")
+    @ApiModelProperty("分佣类型")
     private String type;
 
+    @ApiModelProperty("分佣类型名称")
+    private String typeName;
+
     @ApiModelProperty("分佣等级")
     private Integer level;
 
     @ApiModelProperty("会员ID")
     private Integer userId;
 
+    @ApiModelProperty("用户信息")
+    private OrderUserDto userInfo;
+
     @ApiModelProperty("商户ID")
     private Integer merchantId;
 
     @ApiModelProperty("店铺ID")
     private Integer storeId;
 
+    @ApiModelProperty("所属店铺信息")
+    private MtStore storeInfo;
+
     @ApiModelProperty("员工ID")
     private Integer staffId;
 
+    @ApiModelProperty("所属店铺信息")
+    private MtStaff staffInfo;
+
     @ApiModelProperty("订单ID")
     private Integer orderId;
 
+    @ApiModelProperty("订单信息")
+    private MtOrder orderInfo;
+
     @ApiModelProperty("分佣金额")
     private BigDecimal amount;
 
     @ApiModelProperty("规则ID")
     private Integer ruleId;
 
+    @ApiModelProperty("分佣规则信息")
+    private MtCommissionRule ruleInfo;
+
     @ApiModelProperty("备注")
     private String description;
 
@@ -56,7 +78,7 @@ public class CommissionLogDto implements Serializable {
     @ApiModelProperty("提现时间")
     private Date cashTime;
 
-    @ApiModelProperty("是否提现")
+    @ApiModelProperty("创建时间")
     private Date createTime;
 
     @ApiModelProperty("更新时间")

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

@@ -1,38 +0,0 @@
-package com.fuint.common.enums;
-
-/**
- * 分佣类型枚举
- *
- * Created by FSQ
- * CopyRight https://www.fuint.cn
- */
-public enum CommissionTypeEnum {
-    GOODS("goods", "商品销售"),
-    COUPON("coupon", "卡券销售"),
-    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;
-    }
-}

+ 17 - 1
fuint-application/src/main/java/com/fuint/common/enums/OrderTypeEnum.java

@@ -7,8 +7,8 @@ package com.fuint.common.enums;
  * CopyRight https://www.fuint.cn
  */
 public enum OrderTypeEnum {
-    PAYMENT("payment", "付款订单"),
     GOOGS("goods", "商品订单"),
+    PAYMENT("payment", "付款订单"),
     RECHARGE("recharge", "充值订单"),
     PRESTORE("prestore", "储值卡订单"),
     MEMBER("member", "会员升级订单");
@@ -37,4 +37,20 @@ public enum OrderTypeEnum {
     public void setValue(String value) {
         this.value = value;
     }
+
+    /**
+     * 根据key获取value
+     *
+     * @param key
+     * @return
+     */
+    public static String getName(String key) {
+        final OrderTypeEnum[] values = OrderTypeEnum.values();
+        for (OrderTypeEnum value : values) {
+            if (key.equals(value.getKey())) {
+                return value.getValue();
+            }
+        }
+        return null;
+    }
 }

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

@@ -21,15 +21,15 @@ public interface CommissionLogService extends IService<MtCommissionLog> {
      * @param paginationRequest
      * @return
      */
-    PaginationResponse<MtCommissionLog> queryCommissionLogByPagination(PaginationRequest paginationRequest) throws BusinessCheckException;
+    PaginationResponse<CommissionLogDto> queryCommissionLogByPagination(PaginationRequest paginationRequest) throws BusinessCheckException;
 
     /**
      * 添加分销提成记录
      *
-     * @param  commissionLog
+     * @param  orderId
      * @throws BusinessCheckException
      */
-    MtCommissionLog addCommissionLog(MtCommissionLog commissionLog) throws BusinessCheckException;
+    void addCommissionLog(Integer orderId) throws BusinessCheckException;
 
     /**
      * 根据ID获取记录信息

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

@@ -1,9 +1,12 @@
 package com.fuint.common.service;
 
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.fuint.framework.exception.BusinessCheckException;
 import com.fuint.framework.pagination.PaginationRequest;
 import com.fuint.framework.pagination.PaginationResponse;
 import com.fuint.repository.model.MtStaff;
+import com.fuint.repository.model.MtStore;
+
 import java.util.List;
 import java.util.Map;
 
@@ -13,7 +16,7 @@ import java.util.Map;
  * Created by FSQ
  * CopyRight https://www.fuint.cn
  */
-public interface StaffService {
+public interface StaffService extends IService<MtStaff> {
 
     /**
      * 员工查询列表

+ 69 - 15
fuint-application/src/main/java/com/fuint/common/service/impl/CommissionLogServiceImpl.java

@@ -5,14 +5,15 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import com.fuint.common.dto.CommissionLogDto;
-import com.fuint.common.service.CommissionLogService;
+import com.fuint.common.enums.OrderTypeEnum;
+import com.fuint.common.service.*;
 import com.fuint.framework.annoation.OperationServiceLog;
 import com.fuint.framework.pagination.PaginationRequest;
 import com.fuint.framework.pagination.PaginationResponse;
 import com.fuint.repository.mapper.MtCommissionLogMapper;
 import com.fuint.common.enums.StatusEnum;
 
-import com.fuint.repository.model.MtCommissionLog;
+import com.fuint.repository.model.*;
 import com.github.pagehelper.PageHelper;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
@@ -24,6 +25,8 @@ 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.*;
 
 /**
@@ -40,6 +43,26 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
 
     private MtCommissionLogMapper mtCommissionLogMapper;
 
+    /**
+     * 订单服务接口
+     * */
+    private OrderService orderService;
+
+    /**
+     * 店铺服务接口
+     * */
+    private StoreService storeService;
+
+    /**
+     * 员工服务接口
+     * */
+    private StaffService staffService;
+
+    /**
+     * 提成方案规则服务接口
+     * */
+    private CommissionRuleService commissionRuleService;
+
     /**
      * 分页查询记录列表
      *
@@ -47,7 +70,7 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
      * @return
      */
     @Override
-    public PaginationResponse<MtCommissionLog> queryCommissionLogByPagination(PaginationRequest paginationRequest) {
+    public PaginationResponse<CommissionLogDto> queryCommissionLogByPagination(PaginationRequest paginationRequest) {
         Page<MtCommissionLog> pageHelper = PageHelper.startPage(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
         LambdaQueryWrapper<MtCommissionLog> lambdaQueryWrapper = Wrappers.lambdaQuery();
         lambdaQueryWrapper.ne(MtCommissionLog::getStatus, StatusEnum.DISABLE.getKey());
@@ -66,11 +89,27 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
         }
 
         lambdaQueryWrapper.orderByDesc(MtCommissionLog::getId);
-        List<MtCommissionLog> dataList = mtCommissionLogMapper.selectList(lambdaQueryWrapper);
-
+        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()));
+                 MtOrder mtOrder = orderService.getById(mtCommissionLog.getOrderId());
+                 commissionLogDto.setOrderInfo(mtOrder);
+                 MtStore mtStore = storeService.getById(mtCommissionLog.getStoreId());
+                 commissionLogDto.setStoreInfo(mtStore);
+                 MtStaff mtStaff = staffService.getById(mtCommissionLog.getStaffId());
+                 commissionLogDto.setStaffInfo(mtStaff);
+                 MtCommissionRule mtCommissionRule = commissionRuleService.getById(mtCommissionLog.getRuleId());
+                 commissionLogDto.setRuleInfo(mtCommissionRule);
+                 dataList.add(commissionLogDto);
+            }
+        }
         PageRequest pageRequest = PageRequest.of(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
         PageImpl pageImpl = new PageImpl(dataList, pageRequest, pageHelper.getTotal());
-        PaginationResponse<MtCommissionLog> paginationResponse = new PaginationResponse(pageImpl, MtCommissionLog.class);
+        PaginationResponse<CommissionLogDto> paginationResponse = new PaginationResponse(pageImpl, CommissionLogDto.class);
         paginationResponse.setTotalPages(pageHelper.getPages());
         paginationResponse.setTotalElements(pageHelper.getTotal());
         paginationResponse.setContent(dataList);
@@ -81,19 +120,34 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
     /**
      * 添加分销提成记录
      *
-     * @param commissionLog
+     * @param orderId
+     * @return
      */
     @Override
     @Transactional
     @OperationServiceLog(description = "新增分销提成记录")
-    public MtCommissionLog addCommissionLog(MtCommissionLog commissionLog) {
-        MtCommissionLog mtCommissionLog = new MtCommissionLog();
-        Integer id = mtCommissionLogMapper.insert(mtCommissionLog);
-        if (id > 0) {
-            return mtCommissionLog;
-        } else {
-            logger.error("新增分销提成记录失败...");
-            return null;
+    public void addCommissionLog(Integer orderId) {
+        if (orderId != null && orderId > 0) {
+            MtOrder mtOrder = orderService.getById(orderId);
+            if (mtOrder != null) {
+                MtCommissionLog mtCommissionLog = new MtCommissionLog();
+                mtCommissionLog.setType(mtOrder.getType());
+                mtCommissionLog.setLevel(0);
+                mtCommissionLog.setUserId(0);
+                mtCommissionLog.setOrderId(orderId);
+                mtCommissionLog.setMerchantId(mtOrder.getMerchantId());
+                mtCommissionLog.setStoreId(mtOrder.getStoreId());
+                mtCommissionLog.setStaffId(mtOrder.getStaffId());
+                mtCommissionLog.setAmount(new BigDecimal("0"));
+                mtCommissionLog.setRuleId(0);
+                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);
+            }
         }
     }
 

+ 5 - 0
fuint-application/src/main/java/com/fuint/common/service/impl/RefundServiceImpl.java

@@ -247,6 +247,7 @@ public class RefundServiceImpl extends ServiceImpl<MtRefundMapper, MtRefund> imp
         refund.setUserId(refundDto.getUserId());
         refund.setRemark(refundDto.getRemark());
         refund.setType(refundDto.getType());
+        refund.setMerchantId(refundDto.getMerchantId());
         refund.setStoreId(refundDto.getStoreId());
         refund.setAmount(refundDto.getAmount());
         if (refundDto.getImages() != null && StringUtil.isNotEmpty(refundDto.getImages()) && refundDto.getImages().length() > 5) {
@@ -519,6 +520,10 @@ public class RefundServiceImpl extends ServiceImpl<MtRefundMapper, MtRefund> imp
         RefundDto refundDto = new RefundDto();
         refundDto.setUserId(orderInfo.getUserId());
         refundDto.setOrderId(orderInfo.getId());
+        refundDto.setMerchantId(orderInfo.getMerchantId());
+        if (orderInfo.getStoreInfo() != null) {
+            refundDto.setStoreId(orderInfo.getStoreInfo().getId());
+        }
         refundDto.setRemark(remark);
         refundDto.setType(RefundTypeEnum.RETURN.getKey());
         if (orderInfo.getStoreInfo() != null) {

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

@@ -91,7 +91,7 @@ public class BackendCommissionLogController extends BaseController {
             params.put("storeId", storeId);
         }
         paginationRequest.setSearchParams(params);
-        PaginationResponse<MtCommissionLog> paginationResponse = commissionLogService.queryCommissionLogByPagination(paginationRequest);
+        PaginationResponse<CommissionLogDto> paginationResponse = commissionLogService.queryCommissionLogByPagination(paginationRequest);
 
         Map<String, Object> paramsStore = new HashMap<>();
         paramsStore.put("status", StatusEnum.ENABLED.getKey());

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

@@ -2,6 +2,8 @@ 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.param.CommissionRuleParam;
 import com.fuint.common.service.CommissionRuleService;
 import com.fuint.common.service.StoreService;
@@ -14,7 +16,6 @@ import com.fuint.framework.pagination.PaginationRequest;
 import com.fuint.framework.pagination.PaginationResponse;
 import com.fuint.framework.exception.BusinessCheckException;
 import com.fuint.repository.model.MtCommissionRule;
-import com.fuint.repository.model.MtStore;
 import com.fuint.utils.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -22,6 +23,7 @@ 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;
@@ -101,19 +103,20 @@ public class BackendCommissionRuleController extends BaseController {
         paginationRequest.setSearchParams(params);
         PaginationResponse<MtCommissionRule> paginationResponse = commissionRuleService.queryDataByPagination(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());
+        // 订单类型列表
+        OrderTypeEnum[] typeListEnum = OrderTypeEnum.values();
+        List<ParamDto> typeList = new ArrayList<>();
+        for (OrderTypeEnum enumItem : typeListEnum) {
+            ParamDto paramDto = new ParamDto();
+            paramDto.setKey(enumItem.getKey());
+            paramDto.setName(enumItem.getValue());
+            paramDto.setValue(enumItem.getKey());
+            typeList.add(paramDto);
         }
-        List<MtStore> storeList = storeService.queryStoresByParams(paramsStore);
 
         Map<String, Object> result = new HashMap<>();
         result.put("paginationResponse", paginationResponse);
-        result.put("storeList", storeList);
+        result.put("typeList", typeList);
 
         return getSuccessResult(result);
     }

+ 30 - 19
fuint-application/src/main/java/com/fuint/module/schedule/CommissionJob.java

@@ -1,6 +1,7 @@
 package com.fuint.module.schedule;
 
 import com.fuint.common.enums.PayStatusEnum;
+import com.fuint.common.service.CommissionLogService;
 import com.fuint.common.service.OrderService;
 import com.fuint.common.util.DateUtil;
 import com.fuint.framework.exception.BusinessCheckException;
@@ -13,10 +14,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 分销提成计算定时任务
@@ -36,41 +34,54 @@ public class CommissionJob {
     @Autowired
     private OrderService orderService;
 
+    /**
+     * 分佣记录服务接口
+     * */
+    @Autowired
+    private CommissionLogService commissionLogService;
+
+    /**
+     * 系统环境变量
+     * */
     @Autowired
     private Environment environment;
 
     /**
      * 一次最多处理订单数量
      **/
-    private int MAX_SEND_NUM = 50;
+    private int MAX_ROWS = 50;
 
     /**
-     * 订单超时分钟
+     * 订单完成后n天可产生佣金
      * */
-    private int OVER_TIME = 30;
+    private int OVER_DAY = 7;
 
     @Scheduled(cron = "${commission.job.time}")
     @Transactional(rollbackFor = Exception.class)
     public void dealOrder() throws BusinessCheckException {
         String theSwitch = environment.getProperty("commission.job.switch");
          if (theSwitch.equals("1")) {
-            logger.info("CommissionJobStart!!!");
-            Map<String, Object> param = new HashMap<>();
-            param.put("PAY_STATUS", PayStatusEnum.SUCCESS.getKey());
-            String dateTime = DateUtil.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
-            List<MtOrder> dataList = orderService.getTobeCommissionOrderList(dateTime);
-            if (dataList.size() > 0) {
+             logger.info("CommissionJobStart!!!");
+             Map<String, Object> param = new HashMap<>();
+             param.put("PAY_STATUS", PayStatusEnum.SUCCESS.getKey());
+
+             Calendar calendar = Calendar.getInstance();
+             calendar.add(Calendar.DATE, OVER_DAY);
+             Date dateTime = calendar.getTime();
+             String endTime = DateUtil.formatDate(dateTime, "yyyy-MM-dd HH:mm:ss");
+
+             List<MtOrder> dataList = orderService.getTobeCommissionOrderList(endTime);
+             if (dataList.size() > 0) {
                 int dealNum = 0;
                 for (MtOrder mtOrder : dataList) {
-                     Date overTime = new Date(mtOrder.getCreateTime().getTime() + (60000 * OVER_TIME));
-                     Date nowTime = new Date();
-                     // 处理订单
-                     if (dealNum <= MAX_SEND_NUM && (overTime.getTime() <= nowTime.getTime())) {
+                     // 计算订单佣金
+                     if (dealNum <= MAX_ROWS) {
+                         commissionLogService.addCommissionLog(mtOrder.getId());
                          dealNum++;
                      }
                 }
-            }
-            logger.info("CommissionJobEnd!!!");
+             }
+             logger.info("CommissionJobEnd!!!");
         }
     }
 }

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

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

+ 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 > #{dateTime} AND t.ID NOT IN(SELECT ID FROM `mt_commission_log` c WHERE c.STATUS != 'D')
+        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') LIMIT 20
     </select>
 </mapper>