Browse Source

订单完成分佣

zangbin 1 năm trước cách đây
mục cha
commit
f584ca4b75

+ 1 - 1
tour-module/src/main/java/com/tour/module/mapper/AgentMapper.java

@@ -15,5 +15,5 @@ import java.util.List;
 public interface AgentMapper extends BaseMapper<Agent> {
     List<Agent> getAgentAll(Long id);
     Agent selectByMobile(@Param("mobile") String mobile, @Param("id") Long id);
-
+    Agent getByPid(Long pid);
 }

+ 3 - 0
tour-module/src/main/java/com/tour/module/mapper/LineCommissionMapper.java

@@ -3,6 +3,7 @@ package com.tour.module.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.tour.module.domain.LineCommission;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * Demo class
@@ -12,4 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface LineCommissionMapper extends BaseMapper<LineCommission> {
+
+    LineCommission selectByProvince(@Param("province") String province, @Param("lineId") Long lineId);
 }

+ 1 - 0
tour-module/src/main/java/com/tour/module/service/IAgentService.java

@@ -54,5 +54,6 @@ public interface IAgentService extends IService<Agent> {
 
     Agent getInfo(SysUser user);
 
+    Agent getByPid(Long pid);
 
 }

+ 2 - 0
tour-module/src/main/java/com/tour/module/service/ILineCommissionService.java

@@ -18,4 +18,6 @@ public interface ILineCommissionService extends IService<LineCommission> {
     Boolean saveCommission(LineCommission commission);
 
     Boolean updateCommission(LineCommission commission);
+
+    LineCommission selectByProvince(String province, Long lineId);
 }

+ 2 - 0
tour-module/src/main/java/com/tour/module/service/IOrderService.java

@@ -40,4 +40,6 @@ public interface IOrderService extends IService<Order> {
      List<OmsOrderDto> queryOrderList(SystemOrderDto order);
 
     Map getAgentOrderStatusNum(Long agentId);
+
+    Boolean updateOrder(Order order);
 }

+ 5 - 0
tour-module/src/main/java/com/tour/module/service/impl/AgentServiceImpl.java

@@ -266,4 +266,9 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
         Agent agent = this.getById(user.getAgentId());
         return agent;
     }
+
+    @Override
+    public Agent getByPid(Long pid) {
+        return baseMapper.getByPid(pid);
+    }
 }

+ 5 - 0
tour-module/src/main/java/com/tour/module/service/impl/LineCommissionServiceImpl.java

@@ -75,4 +75,9 @@ public class LineCommissionServiceImpl extends ServiceImpl<LineCommissionMapper,
         baseMapper.updateById(commission1);
         return true;
     }
+
+    @Override
+    public LineCommission selectByProvince(String province, Long lineId) {
+        return baseMapper.selectByProvince(province, lineId);
+    }
 }

+ 92 - 8
tour-module/src/main/java/com/tour/module/service/impl/OrderServiceImpl.java

@@ -4,18 +4,15 @@ import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.common.collect.Lists;
 import com.tour.common.core.domain.entity.SysUser;
+import com.tour.common.enums.OrderStatusEnum;
 import com.tour.common.enums.UserTypeEnums;
 import com.tour.common.exception.CustomException;
 import com.tour.common.utils.SnCodeUtils;
-import com.tour.module.domain.Agent;
-import com.tour.module.domain.Card;
-import com.tour.module.domain.Contacts;
+import com.tour.module.domain.*;
 import com.tour.module.domain.dto.OmsOrderDto;
 import com.tour.module.domain.dto.SystemOrderDto;
 import com.tour.module.enums.StatusEnum;
-import com.tour.module.service.IAgentService;
-import com.tour.module.service.ICardService;
-import com.tour.module.service.IContactsService;
+import com.tour.module.service.*;
 import com.tour.module.vo.*;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -24,11 +21,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.apache.commons.lang3.StringUtils;
 import com.tour.module.mapper.OrderMapper;
-import com.tour.module.domain.Order;
-import com.tour.module.service.IOrderService;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -50,6 +47,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     IAgentService agentService;
     @Resource
     IContactsService iContactsService;
+    @Resource
+    private ILineCommissionService iLineCommissionService;
+    @Resource
+    private IAgentService iAgentService;
+    @Resource
+    private IOrderCommissonService iOrderCommissonService;
 
     @Override
     public List<Order> queryList(Order order) {
@@ -270,4 +273,85 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
         return map;
     }
+
+    @Override
+    public Boolean updateOrder(Order order) {
+        baseMapper.updateById(order);
+        if (OrderStatusEnum.NO_RECEIPT.value.equals(order.getStatus())) {
+            // 开始分佣
+            orderCommission(order);
+        }
+        return true;
+    }
+
+    private void orderCommission(Order order) {
+        if (StringUtils.isBlank(order.getTravelerIds())) {
+            return;
+        }
+        List<String> ids = Arrays.asList(order.getTravelerIds().split(","));
+        List<Contacts> contactsList = iContactsService.list(new QueryWrapper<Contacts>().in("id", ids));
+        // 计算总佣金
+        BigDecimal commission = new BigDecimal("0.00");
+        for (Contacts contact : contactsList) {
+            // 获取身份证位数
+            String sixStr = subIdCard(contact.getIdCard(), 6);
+            String twoStr = subIdCard(contact.getIdCard(), 2);
+            List<LineCommission> commissionList = iLineCommissionService.list(new QueryWrapper<LineCommission>()
+                    .eq("line_id", order.getLineId())
+                    .apply("find_in_set(" + sixStr +", city_code)"));
+            // 不属于不参与分佣城市,继续计算佣金
+            if (CollectionUtils.isEmpty(commissionList)) {
+                LineCommission lineCommission = iLineCommissionService.selectByProvince(twoStr, order.getLineId());
+                if (Objects.nonNull(lineCommission)) {
+                    commission = commission.add(lineCommission.getCommission());
+                }
+            }
+        }
+        // 佣金大于0开始分佣
+        if (commission.signum() == 0) {
+            return;
+        }
+        BigDecimal lastCommission = BigDecimal.ZERO;
+        Agent agent = iAgentService.getById(order.getAgentId());
+        if (agent.getPid() != null) {
+            Agent sAgent = iAgentService.getByPid(agent.getPid());
+            BigDecimal sCommission = BigDecimal.ZERO;
+            if (Objects.nonNull(sAgent) && sAgent.getPid() == 0) {
+                // 一级代理商分佣
+                sCommission = commission.multiply(agent.getCommissonRate().divide(new BigDecimal(100),2, RoundingMode.DOWN)).setScale(2,RoundingMode.DOWN);
+                saveCommission(agent, commission, sCommission, order.getOrderId());
+            } else {
+                // 二级代理商分佣
+                sCommission = commission.multiply(sAgent.getCommissonRate().divide(new BigDecimal(100),2, RoundingMode.DOWN)).setScale(2,RoundingMode.DOWN);
+                BigDecimal pCommission = BigDecimal.ZERO;
+                pCommission = sCommission.multiply(agent.getCommissonRate().divide(new BigDecimal(100),2, RoundingMode.DOWN)).setScale(2,RoundingMode.DOWN);
+                saveCommission(agent, commission, pCommission, order.getOrderId());
+                saveCommission(sAgent, commission, sCommission.subtract(pCommission), order.getOrderId());
+                sAgent = iAgentService.getById(1L);
+            }
+            lastCommission = commission.subtract(sCommission);
+            saveCommission(sAgent, commission, lastCommission, order.getOrderId());
+        }
+    }
+
+    private void saveCommission(Agent agent, BigDecimal amount, BigDecimal commission, Long orderId) {
+        // 记录
+        OrderCommisson orderCommisson = new OrderCommisson();
+        orderCommisson.setAgentId(agent.getId());
+        orderCommisson.setAmount(amount);
+        orderCommisson.setCommisson(commission);
+        orderCommisson.setOrderId(orderId);
+        iOrderCommissonService.save(orderCommisson);
+        // 更新可提现金额
+        agent.setAmount(agent.getAmount().add(commission));
+        iAgentService.updateById(agent);
+    }
+
+    private String subIdCard(String idCard, Integer size) {
+        return idCard.substring(0, size);
+    }
+
+    public static void main(String[] args) {
+        System.out.println("320682199710197796".substring(0, 6));
+    }
 }

+ 10 - 2
tour-module/src/main/resources/mapper/module/AgentMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.tour.module.mapper.AgentMapper">
-    
+
     <resultMap type="Agent" id="AgentResult">
         <result property="id"    column="id"    />
         <result property="agentName"    column="agent_name"    />
@@ -32,4 +32,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND id != #{id}
         </if>
     </select>
-</mapper>
+
+    <select id="getByPid" resultType="com.tour.module.domain.Agent">
+        select *
+        from lb_agent
+        WHERE `status` = 1
+          AND deleted = 0
+          and id = #{pid}
+    </select>
+</mapper>

+ 15 - 0
tour-module/src/main/resources/mapper/module/LineCommissionMapper.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tour.module.mapper.LineCommissionMapper">
+    <select id="selectByProvince" resultType="com.tour.module.domain.LineCommission">
+        SELECT
+            *
+        FROM
+            tour_line_commission
+        WHERE deleted = 0
+        AND line_id = #{lineId}
+        AND LEFT(province_id, 2) = #{province}
+    </select>
+</mapper>

+ 1 - 1
tour-oms/src/main/java/com/tour/web/controller/OrderController.java

@@ -95,7 +95,7 @@ public class OrderController extends BaseController {
     @Log(title = "订单" , businessType = BusinessType.UPDATE)
     @PutMapping
     public Result edit(@RequestBody Order order) {
-        return toAjax(iOrderService.updateById(order) ? 1 : 0);
+        return toAjax(iOrderService.updateOrder(order) ? 1 : 0);
     }
 
     /**