Browse Source

fixed 分销提成功能完善

fushengqian 1 year ago
parent
commit
8317aa87ad

+ 51 - 9
fuint-application/src/main/java/com/fuint/common/service/impl/CommissionCashServiceImpl.java

@@ -3,6 +3,7 @@ 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.dto.OrderUserDto;
 import com.fuint.common.enums.*;
 import com.fuint.common.service.*;
 import com.fuint.common.util.CommonUtil;
@@ -59,6 +60,11 @@ public class CommissionCashServiceImpl extends ServiceImpl<MtCommissionCashMappe
      * */
     private StaffService staffService;
 
+    /**
+     * 会员服务接口
+     * */
+    private MemberService memberService;
+
     /**
      * 分销提成记录业务接口
      */
@@ -130,6 +136,19 @@ public class CommissionCashServiceImpl extends ServiceImpl<MtCommissionCashMappe
                  MtStore mtStore = storeService.getById(mtCommissionCash.getStoreId());
                  commissionCashDto.setStoreInfo(mtStore);
                  MtStaff mtStaff = staffService.getById(mtCommissionCash.getStaffId());
+                 if (mtCommissionCash.getUserId() != null && mtCommissionCash.getUserId() > 0) {
+                     MtUser userInfo = memberService.queryMemberById(mtCommissionCash.getUserId());
+                     if (userInfo != null) {
+                         OrderUserDto userDto = new OrderUserDto();
+                         userDto.setNo(userInfo.getUserNo());
+                         userDto.setId(userInfo.getId());
+                         userDto.setName(userInfo.getName());
+                         userDto.setCardNo(userInfo.getIdcard());
+                         userDto.setAddress(userInfo.getAddress());
+                         userDto.setMobile(userInfo.getMobile());
+                         commissionCashDto.setUserInfo(userDto);
+                     }
+                 }
                  commissionCashDto.setStaffInfo(mtStaff);
                  dataList.add(commissionCashDto);
             }
@@ -180,23 +199,40 @@ public class CommissionCashServiceImpl extends ServiceImpl<MtCommissionCashMappe
         }
         lambdaQueryWrapper.orderByDesc(MtCommissionLog::getId);
         List<MtCommissionLog> commissionLogList = mtCommissionLogMapper.selectList(lambdaQueryWrapper);
-        List<Integer> staffIds = new ArrayList<>();
+        List<String> staffIds = new ArrayList<>();
+        List<String> userIds = 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 (mtCommissionLog.getStaffId() != null && mtCommissionLog.getStaffId() > 0 && !staffIds.contains(CommissionTargetEnum.STAFF.getKey() + mtCommissionLog.getStaffId())) {
+                     staffIds.add(CommissionTargetEnum.STAFF.getKey() + mtCommissionLog.getStaffId());
+                 } else if (mtCommissionLog.getUserId() != null && mtCommissionLog.getUserId() > 0 && !userIds.contains(CommissionTargetEnum.MEMBER.getKey() + mtCommissionLog.getUserId())){
+                     userIds.add(CommissionTargetEnum.MEMBER.getKey() + mtCommissionLog.getUserId());
+                }
             }
         }
+        staffIds.addAll(userIds);
+        // 生成结算数据
         if (staffIds.size() > 0) {
-            for (Integer staffId : staffIds) {
+            for (String staffId : staffIds) {
                  BigDecimal totalAmount = new BigDecimal("0");
                  Integer cashMerchantId = 0;
                  Integer cashStoreId = 0;
-                String settleNo = CommonUtil.createSettlementNo();
+                 String settleNo = CommonUtil.createSettlementNo();
+                 Integer targetId;
+                 if (staffId.indexOf(CommissionTargetEnum.STAFF.getKey()) >= 0) {
+                     targetId = Integer.parseInt(staffId.replaceAll(CommissionTargetEnum.STAFF.getKey(), ""));
+                 } else {
+                     targetId = Integer.parseInt(staffId.replaceAll(CommissionTargetEnum.MEMBER.getKey(), ""));
+                 }
                  for (MtCommissionLog mtCommissionLog : commissionLogList) {
-                      if (mtCommissionLog.getStaffId().equals(staffId)) {
+                      if (mtCommissionLog.getStaffId().equals(targetId) || mtCommissionLog.getUserId().equals(targetId)) {
+                          if (mtCommissionLog.getType().equals(CommissionTargetEnum.STAFF.getKey()) && staffId.indexOf(CommissionTargetEnum.STAFF.getKey()) < 0) {
+                              continue;
+                          }
+                          if (mtCommissionLog.getType().equals(CommissionTargetEnum.MEMBER.getKey()) && staffId.indexOf(CommissionTargetEnum.MEMBER.getKey()) < 0) {
+                              continue;
+                          }
                           totalAmount = totalAmount.add(mtCommissionLog.getAmount());
                           if (mtCommissionLog.getMerchantId() != null && mtCommissionLog.getMerchantId() > 0) {
                               cashMerchantId = mtCommissionLog.getMerchantId();
@@ -210,12 +246,18 @@ public class CommissionCashServiceImpl extends ServiceImpl<MtCommissionCashMappe
                           commissionLogRequest.setOperator(commissionSettleRequest.getOperator());
                           commissionLogRequest.setStatus(CommissionStatusEnum.SETTLED.getKey());
                           commissionLogService.updateCommissionLog(commissionLogRequest);
-                      }
+                     }
                  }
                  MtCommissionCash mtCommissionCash = new MtCommissionCash();
                  mtCommissionCash.setSettleNo(settleNo);
                  mtCommissionCash.setUuid(uuid);
-                 mtCommissionCash.setStaffId(staffId);
+                 if (staffId.indexOf(CommissionTargetEnum.STAFF.getKey()) >= 0) {
+                     mtCommissionCash.setStaffId(targetId);
+                     mtCommissionCash.setUserId(0);
+                 } else {
+                     mtCommissionCash.setUserId(targetId);
+                     mtCommissionCash.setStaffId(0);
+                 }
                  if (cashStoreId > 0) {
                      mtCommissionCash.setStoreId(cashStoreId);
                  }

+ 40 - 8
fuint-application/src/main/java/com/fuint/common/service/impl/CommissionLogServiceImpl.java

@@ -4,6 +4,7 @@ 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.dto.CommissionLogDto;
+import com.fuint.common.dto.OrderUserDto;
 import com.fuint.common.enums.*;
 import com.fuint.common.service.*;
 import com.fuint.framework.annoation.OperationServiceLog;
@@ -11,10 +12,7 @@ import com.fuint.framework.exception.BusinessCheckException;
 import com.fuint.framework.pagination.PaginationRequest;
 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.mapper.*;
 import com.fuint.repository.model.*;
 import com.fuint.utils.StringUtil;
 import com.github.pagehelper.PageHelper;
@@ -51,6 +49,8 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
 
     private MtOrderGoodsMapper mtOrderGoodsMapper;
 
+    private MtCommissionRelationMapper mtCommissionRelationMapper;
+
     /**
      * 订单服务接口
      * */
@@ -66,6 +66,11 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
      * */
     private StaffService staffService;
 
+    /**
+     * 会员服务接口
+     * */
+    private MemberService memberService;
+
     /**
      * 提成方案规则服务接口
      * */
@@ -149,6 +154,19 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
                  commissionLogDto.setStaffInfo(mtStaff);
                  MtCommissionRule mtCommissionRule = commissionRuleService.getById(mtCommissionLog.getRuleId());
                  commissionLogDto.setRuleInfo(mtCommissionRule);
+                 if (mtCommissionLog.getUserId() != null && mtCommissionLog.getUserId() > 0) {
+                     MtUser userInfo = memberService.queryMemberById(mtCommissionLog.getUserId());
+                     if (userInfo != null) {
+                         OrderUserDto userDto = new OrderUserDto();
+                         userDto.setNo(userInfo.getUserNo());
+                         userDto.setId(userInfo.getId());
+                         userDto.setName(userInfo.getName());
+                         userDto.setCardNo(userInfo.getIdcard());
+                         userDto.setAddress(userInfo.getAddress());
+                         userDto.setMobile(userInfo.getMobile());
+                         commissionLogDto.setUserInfo(userDto);
+                     }
+                 }
                  dataList.add(commissionLogDto);
             }
         }
@@ -176,6 +194,12 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
             MtOrder mtOrder = orderService.getById(orderId);
             // 商品订单佣金计算
             if (mtOrder != null && mtOrder.getType().equals(CommissionTypeEnum.GOOGS.getKey())) {
+                // 获取分销关系
+                Integer commissionUserId = mtCommissionRelationMapper.getCommissionUserId(mtOrder.getMerchantId(), mtOrder.getUserId());
+                if (commissionUserId != null && commissionUserId > 0) {
+                    mtOrder.setCommissionUserId(commissionUserId);
+                    orderService.updateOrder(mtOrder);
+                }
                 Map<String, Object> params = new HashMap<>();
                 params.put("ORDER_ID", mtOrder.getId());
                 params.put("STATUS", StatusEnum.ENABLED.getKey());
@@ -196,7 +220,12 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
                              // 规则状态正常
                              if (mtCommissionRule != null && mtCommissionRule.getStatus().equals(StatusEnum.ENABLED.getKey())) {
                                  MtCommissionLog mtCommissionLog = new MtCommissionLog();
-                                 BigDecimal amount = orderGoods.getPrice().multiply(mtCommissionRuleItem.getGuest().divide(new BigDecimal("100")));
+                                 // 分佣金额计算,散客和会员佣金比例不同
+                                 BigDecimal rate = mtCommissionRuleItem.getMember();
+                                 if (mtOrder.getStaffId() != null && mtOrder.getStaffId() > 0 && mtOrder.getIsVisitor().equals(YesOrNoEnum.YES.getKey())) {
+                                     rate = mtCommissionRuleItem.getGuest();
+                                 }
+                                 BigDecimal amount = orderGoods.getPrice().multiply(rate.divide(new BigDecimal("100")));
                                  mtCommissionLog.setType(mtOrder.getType());
                                  mtCommissionLog.setTarget(mtCommissionRule.getTarget());
                                  mtCommissionLog.setLevel(0);
@@ -215,13 +244,16 @@ public class CommissionLogServiceImpl extends ServiceImpl<MtCommissionLogMapper,
                                  mtCommissionLog.setUpdateTime(dateTime);
                                  mtCommissionLog.setStatus(StatusEnum.ENABLED.getKey());
                                  mtCommissionLog.setOperator(null);
+
+                                 // 员工提成计算,员工信息不能为空
                                  if (mtOrder.getStaffId() > 0 && mtCommissionRule.getTarget().equals(CommissionTargetEnum.STAFF.getKey())) {
-                                     // 员工提成计算,员工信息不能为空
                                      if (mtCommissionLog.getStaffId() != null && mtCommissionLog.getStaffId() > 0) {
                                          mtCommissionLogMapper.insert(mtCommissionLog);
                                      }
-                                 } else if (mtOrder.getCommissionUserId() > 0 && mtCommissionRule.getTarget().equals(CommissionTargetEnum.MEMBER.getKey())) {
-                                     // 会员分销计算,会员信息不能为空
+                                 }
+
+                                 // 会员分销计算,会员信息不能为空
+                                 if (mtOrder.getCommissionUserId() > 0 && mtCommissionRule.getTarget().equals(CommissionTargetEnum.MEMBER.getKey())) {
                                      mtCommissionLog.setUserId(mtOrder.getCommissionUserId());
                                      mtCommissionLogMapper.insert(mtCommissionLog);
                                  }

+ 4 - 1
fuint-repository/src/main/java/com/fuint/repository/mapper/MtCommissionRelationMapper.java

@@ -2,6 +2,7 @@ package com.fuint.repository.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fuint.repository.model.MtCommissionRelation;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 会员分销关系 Mapper 接口
@@ -10,5 +11,7 @@ import com.fuint.repository.model.MtCommissionRelation;
  * CopyRight https://www.fuint.cn
  */
 public interface MtCommissionRelationMapper extends BaseMapper<MtCommissionRelation> {
-   // empty
+
+    Integer getCommissionUserId(@Param("merchantId") Integer merchantId, @Param("userId") Integer userId);
+
 }

+ 4 - 0
fuint-repository/src/main/resources/mapper/MtCommissionRelationMapper.xml

@@ -2,4 +2,8 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fuint.repository.mapper.MtCommissionRelationMapper">
 
+    <select id="getCommissionUserId" resultType="java.lang.Integer">
+        select `USER_ID` from mt_commission_relation r where r.MERCHANT_ID = #{merchantId} and r.SUB_USER_ID = #{userId} and `STATUS` = 'A';
+    </select>
+
 </mapper>