|
@@ -4,18 +4,15 @@ import com.alibaba.fastjson.JSONArray;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Lists;
|
|
import com.tour.common.core.domain.entity.SysUser;
|
|
import com.tour.common.core.domain.entity.SysUser;
|
|
|
|
+import com.tour.common.enums.OrderStatusEnum;
|
|
import com.tour.common.enums.UserTypeEnums;
|
|
import com.tour.common.enums.UserTypeEnums;
|
|
import com.tour.common.exception.CustomException;
|
|
import com.tour.common.exception.CustomException;
|
|
import com.tour.common.utils.SnCodeUtils;
|
|
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.OmsOrderDto;
|
|
import com.tour.module.domain.dto.SystemOrderDto;
|
|
import com.tour.module.domain.dto.SystemOrderDto;
|
|
import com.tour.module.enums.StatusEnum;
|
|
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 com.tour.module.vo.*;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.stereotype.Service;
|
|
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 com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import com.tour.module.mapper.OrderMapper;
|
|
import com.tour.module.mapper.OrderMapper;
|
|
-import com.tour.module.domain.Order;
|
|
|
|
-import com.tour.module.service.IOrderService;
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.math.RoundingMode;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -50,6 +47,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
IAgentService agentService;
|
|
IAgentService agentService;
|
|
@Resource
|
|
@Resource
|
|
IContactsService iContactsService;
|
|
IContactsService iContactsService;
|
|
|
|
+ @Resource
|
|
|
|
+ private ILineCommissionService iLineCommissionService;
|
|
|
|
+ @Resource
|
|
|
|
+ private IAgentService iAgentService;
|
|
|
|
+ @Resource
|
|
|
|
+ private IOrderCommissonService iOrderCommissonService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public List<Order> queryList(Order order) {
|
|
public List<Order> queryList(Order order) {
|
|
@@ -270,4 +273,85 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
|
|
|
return map;
|
|
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));
|
|
|
|
+ }
|
|
}
|
|
}
|