| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415 |
- package com.cyksj.service.distribute.impl;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.toolkit.Wrappers;
- import com.cyksj.common.constant.Constant;
- import com.cyksj.mapper.OrderDonMapper;
- import com.cyksj.mapper.UserDistributeSpecialMapper;
- import com.cyksj.mapper.UserRenewChangeTicketRecordMapper;
- import com.cyksj.mapper.manage.distribute.UserBusinessDefaultRateConfigMapper;
- import com.cyksj.mapper.manage.distribute.UserDistributeBusinessOrderDonRecordMapper;
- import com.cyksj.mapper.manage.distribute.UserDistributeBusinessRateMapper;
- import com.cyksj.mapper.shop.YhShopUserDistributeBusinessOrderDonRecordMapper;
- import com.cyksj.model.entity.*;
- import com.cyksj.redis.RedisService;
- import com.cyksj.service.distribute.UserBusinessFrontService;
- import com.ejlchina.searcher.BeanSearcher;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.dao.DuplicateKeyException;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- /*
- *项目名: netflix
- *文件名: UserBusinessFrontServiceImpl
- *创建者: JavaZou
- *创建时间:2023/3/23 14:20
- */
- @Service
- @RequiredArgsConstructor
- @Slf4j
- public class UserBusinessFrontServiceImpl implements UserBusinessFrontService {
- private final BeanSearcher beanSearcher;
- private final UserDistributeBusinessRateMapper userDistributeBusinessRateMapper;
- private final OrderDonMapper orderDonMapper;
- private final UserDistributeBusinessOrderDonRecordMapper businessOrderDonRecordMapper;
- private final UserRenewChangeTicketRecordMapper renewChangeTicketRecordMapper;
- private final RedisService redisService;
- private final UserBusinessDefaultRateConfigMapper defaultRateConfigMapper;
- private final UserDistributeSpecialMapper userDistributeSpecialMapper;
- private final YhShopUserDistributeBusinessOrderDonRecordMapper yhShopBusinessOrderDonRecordMapper;
- @Override
- public void taskDistributeRateBenefits(Long sharedId, Long businessId, Integer goodsType, OrderDon order, Integer distributeRate) {
- LambdaQueryWrapper<UserDistributeBusinessRate> wrapper = Wrappers.lambdaQuery(UserDistributeBusinessRate.class)
- .eq(UserDistributeBusinessRate::getBusinessId, businessId)
- .eq(UserDistributeBusinessRate::getGoodsId, order.getGoodsId())
- .last("limit 1");
- if (goodsType == 1) {
- wrapper.eq(UserDistributeBusinessRate::getSkuId, order.getSkuId());
- }
- UserDistributeBusinessRate businessRate = userDistributeBusinessRateMapper.selectOne(wrapper);
- //06-21 奈飞平台商务比例特殊处理
- UserDistributeSpecial userDistributeSpecial = userDistributeSpecialMapper.selectOne(Wrappers.lambdaQuery(UserDistributeSpecial.class)
- .eq(UserDistributeSpecial::getSkuId, order.getSkuId())
- .eq(UserDistributeSpecial::getSharedId, sharedId)
- .eq(UserDistributeSpecial::getBusinessId, businessId)
- .last("limit 1"));
- if (userDistributeSpecial != null) {
- businessRate.setFirstOrderRate(userDistributeSpecial.getFirstRate());
- businessRate.setRenewOrderRate(userDistributeSpecial.getRenewRate());
- }
- if (businessRate != null) {
- if (order.getOrderType() == 1) {
- //实物商务分销提成 无首单
- if (goodsType != 1) {
- UserDistributeBusinessOrderDonRecord record = saveBusinessTakeMoneyRecord(order, businessId, sharedId, businessRate.getFirstOrderRate(), null, distributeRate);
- if (record == null) {
- return;
- }
- businessOrderDonRecordMapper.insert(record);
- log.info("开始给商务人员:{}分配分销人:{}分销的用户:{}实物:{}提成", businessId, sharedId, order.getUserId(), order.getId());
- return;
- }
- //首单
- log.info("商务首单orderId:{}分销分配提成开始", order.getId());
- //用户之前是否下过单
- Integer count = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
- .eq(OrderDon::getUserId, order.getUserId())
- .ne(OrderDon::getId, order.getId()).notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
- if (count == 0) {
- //是否享受过该用户带来的首单 提成
- UserDistributeBusinessOrderDonRecord record = businessOrderDonRecordMapper.selectOne(Wrappers.lambdaQuery(UserDistributeBusinessOrderDonRecord.class)
- .eq(UserDistributeBusinessOrderDonRecord::getBusinessId, businessId)
- .eq(UserDistributeBusinessOrderDonRecord::getUserId, order.getUserId())
- .eq(UserDistributeBusinessOrderDonRecord::getOrderType, 1)
- .eq(UserDistributeBusinessOrderDonRecord::getStatus, UserDistributeBusinessOrderDonRecord.Status.success)
- .last("limit 1"));
- if (record == null) {
- try {
- boolean isSuccess = redisService.setNx(RedisService.key.BUSINESS_FIRST_ORDER_USER_KEY.getNameFormat(order.getUserId()), businessId, RedisService.key.BUSINESS_FIRST_ORDER_USER_KEY.getTimeout());
- if (isSuccess) {
- //首单虚物规格 提成
- record = saveBusinessTakeMoneyRecord(order, businessId, sharedId, businessRate.getFirstOrderRate(), null, distributeRate);
- if (record == null) {
- return;
- }
- if (record.getTakeMoney().compareTo(BigDecimal.ZERO) == 0) {
- return;
- }
- businessOrderDonRecordMapper.insert(record);
- log.info("开始给商务人员:{}分配分销人:{}分销的用户:{}首单:{}提成", businessId, sharedId, order.getUserId(), order.getId());
- redisService.del(RedisService.key.BUSINESS_FIRST_ORDER_USER_KEY.getNameFormat(order.getUserId()));
- }
- } catch (DuplicateKeyException e) {
- log.error("商务:{}重复获取分销人:{}分销的用户:{}首单:{}提成", businessId, businessId, order.getUserId(), order.getId());
- }
- }
- }
- }
- //续费
- // if (order.getOrderType() == 2) {
- // log.info("商务首单续费分销分配提成开始");
- // //是否享受过该用户首单 提成
- // UserDistributeBusinessOrderDonRecord record = businessOrderDonRecordMapper.selectOne(Wrappers.lambdaQuery(UserDistributeBusinessOrderDonRecord.class)
- // .eq(UserDistributeBusinessOrderDonRecord::getBusinessId, businessId)
- // .eq(UserDistributeBusinessOrderDonRecord::getUserId, order.getUserId())
- // .eq(UserDistributeBusinessOrderDonRecord::getOrderType, 1)
- // .eq(UserDistributeBusinessOrderDonRecord::getStatus, UserDistributeBusinessOrderDonRecord.Status.success)
- // .last("limit 1"));
- // if (record != null) {
- // log.info("开始给商务人员:{}分配用户:{}首单续费提成", businessId, order.getUserId());
- // //是否更换过车票规格座位号
- // Long preRelationId = record.getPreRelationId();
- // Long relationId = order.getRelationId();
- // if (relationId.equals(preRelationId)) {
- // try {
- // //分配首单续费提成
- // record = saveBusinessTakeMoneyRecord(order, businessId, sharedId, null, businessRate.getRenewOrderRate(), distributeRate);
- // if (record == null) {
- // return;
- // }
- // businessOrderDonRecordMapper.insert(record);
- // log.info("开始给商务人员:{}分配分销人:{}分销的用户:{}续费首单:{}提成", businessId, sharedId, order.getUserId(), order.getId());
- // } catch (DuplicateKeyException e) {
- // log.error("商务:{}重复获取分销人:{}分销的用户:{}续费首单:{}提成", businessId, businessId, order.getUserId(), order.getId());
- // }
- // } else {
- // UserRenewChangeTicketRecord renewChangeTicketRecord = renewChangeTicketRecordMapper.selectOne(Wrappers.lambdaQuery(UserRenewChangeTicketRecord.class)
- // .eq(UserRenewChangeTicketRecord::getUserId, order.getUserId())
- // .eq(UserRenewChangeTicketRecord::getAfterRelationId, relationId)
- // .last("limit 1"));
- // if (renewChangeTicketRecord != null && renewChangeTicketRecord.getPreRelationId().equals(preRelationId)) {
- // try {
- // //分配首单续费更换车位后提成
- // record = saveBusinessTakeMoneyRecord(order, businessId, sharedId, null, businessRate.getRenewOrderRate(), distributeRate);
- // if (record == null) {
- // return;
- // }
- // businessOrderDonRecordMapper.insert(record);
- // log.info("开始给商务人员:{}分配分销人:{}分销的用户:{}续费首单:{}更换后车位提成", businessId, sharedId, order.getUserId(), order.getId());
- // } catch (DuplicateKeyException e) {
- // log.error("商务:{}重复获取分销人:{}分销的用户:{}续费首单:{}更换后车位提成", businessId, businessId, order.getUserId(), order.getId());
- // }
- // }
- // }
- //
- // }
- // }
- }
- }
- /**
- * 店铺商务提成
- */
- @Override
- public void taskYhShopDistributeRateBenefits(Long shopUserId, Long businessId, Integer goodsType, OrderDon order, Integer distributeRate) {
- LambdaQueryWrapper<UserDistributeBusinessRate> wrapper = Wrappers.lambdaQuery(UserDistributeBusinessRate.class)
- .eq(UserDistributeBusinessRate::getBusinessId, businessId)
- .eq(UserDistributeBusinessRate::getGoodsId, order.getGoodsId())
- .last("limit 1");
- if (goodsType == 1) {
- wrapper.eq(UserDistributeBusinessRate::getSkuId, order.getSkuId());
- }
- //和渠道商务用一套提成比例
- UserDistributeBusinessRate businessRate = userDistributeBusinessRateMapper.selectOne(wrapper);
- //06-21 奈飞平台商务比例特殊处理
- UserDistributeSpecial userDistributeSpecial = userDistributeSpecialMapper.selectOne(Wrappers.lambdaQuery(UserDistributeSpecial.class)
- .eq(UserDistributeSpecial::getSkuId, order.getSkuId())
- .eq(UserDistributeSpecial::getSharedId, shopUserId)
- .eq(UserDistributeSpecial::getBusinessId, businessId)
- .last("limit 1"));
- if (userDistributeSpecial != null) {
- businessRate.setFirstOrderRate(userDistributeSpecial.getFirstRate());
- businessRate.setRenewOrderRate(userDistributeSpecial.getRenewRate());
- }
- if (businessRate != null) {
- if (order.getOrderType() == 1) {
- //实物商务分销提成 无首单
- if (goodsType != 1) {
- YhShopUserDistributeBusinessOrderDonRecord record = saveYhShopBusinessTakeMoneyRecord(order, businessId, shopUserId, businessRate.getFirstOrderRate(), null, distributeRate);
- if (record == null) {
- return;
- }
- yhShopBusinessOrderDonRecordMapper.insert(record);
- log.info("开始给店铺商务人员:{}分配分销人:{}分销的用户:{}实物:{}提成", businessId, shopUserId, order.getUserId(), order.getId());
- return;
- }
- //首单
- log.info("店铺商务首单orderId:{}分销分配提成开始", order.getId());
- //用户之前是否下过单
- Integer count = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
- .eq(OrderDon::getUserId, order.getUserId())
- .ne(OrderDon::getId, order.getId()).notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
- if (count == 0) {
- //是否享受过该用户带来的首单 提成
- YhShopUserDistributeBusinessOrderDonRecord record = yhShopBusinessOrderDonRecordMapper.selectOne(Wrappers.lambdaQuery(YhShopUserDistributeBusinessOrderDonRecord.class)
- .eq(YhShopUserDistributeBusinessOrderDonRecord::getBusinessId, businessId)
- .eq(YhShopUserDistributeBusinessOrderDonRecord::getUserId, order.getUserId())
- .eq(YhShopUserDistributeBusinessOrderDonRecord::getOrderType, 1)
- .eq(YhShopUserDistributeBusinessOrderDonRecord::getStatus, UserDistributeBusinessOrderDonRecord.Status.success)
- .last("limit 1"));
- if (record == null) {
- try {
- boolean isSuccess = redisService.setNx(RedisService.key.BUSINESS_FIRST_ORDER_USER_KEY.getNameFormat(order.getUserId()), businessId, RedisService.key.BUSINESS_FIRST_ORDER_USER_KEY.getTimeout());
- if (isSuccess) {
- //首单虚物规格 提成
- record = saveYhShopBusinessTakeMoneyRecord(order, businessId, shopUserId, businessRate.getFirstOrderRate(), null, distributeRate);
- if (record == null) {
- return;
- }
- yhShopBusinessOrderDonRecordMapper.insert(record);
- log.info("开始给店铺商务人员:{}分配分销人:{}分销的用户:{}首单:{}提成", businessId, shopUserId, order.getUserId(), order.getId());
- redisService.del(RedisService.key.BUSINESS_FIRST_ORDER_USER_KEY.getNameFormat(order.getUserId()));
- }
- } catch (DuplicateKeyException e) {
- log.error("店铺商务:{}重复获取分销人:{}分销的用户:{}首单:{}提成", businessId, businessId, order.getUserId(), order.getId());
- }
- }
- }
- }
- //续费
- if (order.getOrderType() == 2) {
- log.info("店铺商务首单续费分销分配提成开始");
- //是否享受过该用户首单 提成
- YhShopUserDistributeBusinessOrderDonRecord record = yhShopBusinessOrderDonRecordMapper.selectOne(Wrappers.lambdaQuery(YhShopUserDistributeBusinessOrderDonRecord.class)
- .eq(YhShopUserDistributeBusinessOrderDonRecord::getBusinessId, businessId)
- .eq(YhShopUserDistributeBusinessOrderDonRecord::getUserId, order.getUserId())
- .eq(YhShopUserDistributeBusinessOrderDonRecord::getOrderType, 1)
- .eq(YhShopUserDistributeBusinessOrderDonRecord::getStatus, UserDistributeBusinessOrderDonRecord.Status.success)
- .last("limit 1"));
- if (record != null) {
- log.info("开始给店铺商务人员:{}分配用户:{}首单续费提成", businessId, order.getUserId());
- //是否更换过车票规格座位号
- Long preRelationId = record.getPreRelationId();
- Long relationId = order.getRelationId();
- if (relationId.equals(preRelationId)) {
- try {
- //分配首单续费提成
- record = saveYhShopBusinessTakeMoneyRecord(order, businessId, shopUserId, null, businessRate.getRenewOrderRate(), distributeRate);
- if (record == null) {
- return;
- }
- yhShopBusinessOrderDonRecordMapper.insert(record);
- log.info("开始给店铺商务人员:{}分配分销人:{}分销的用户:{}续费首单:{}提成", businessId, shopUserId, order.getUserId(), order.getId());
- } catch (DuplicateKeyException e) {
- log.error("店铺商务:{}重复获取分销人:{}分销的用户:{}续费首单:{}提成", businessId, businessId, order.getUserId(), order.getId());
- }
- } else {
- UserRenewChangeTicketRecord renewChangeTicketRecord = renewChangeTicketRecordMapper.selectOne(Wrappers.lambdaQuery(UserRenewChangeTicketRecord.class)
- .eq(UserRenewChangeTicketRecord::getUserId, order.getUserId())
- .eq(UserRenewChangeTicketRecord::getAfterRelationId, relationId)
- .last("limit 1"));
- if (renewChangeTicketRecord != null && renewChangeTicketRecord.getPreRelationId().equals(preRelationId)) {
- try {
- //分配首单续费更换车位后提成
- record = saveYhShopBusinessTakeMoneyRecord(order, businessId, shopUserId, null, businessRate.getRenewOrderRate(), distributeRate);
- if (record == null) {
- return;
- }
- yhShopBusinessOrderDonRecordMapper.insert(record);
- log.info("开始给店铺商务人员:{}分配分销人:{}分销的用户:{}续费首单:{}更换后车位提成", businessId, shopUserId, order.getUserId(), order.getId());
- } catch (DuplicateKeyException e) {
- log.error("店铺商务:{}重复获取分销人:{}分销的用户:{}续费首单:{}更换后车位提成", businessId, businessId, order.getUserId(), order.getId());
- }
- }
- }
- }
- }
- }
- }
- /**
- * 保存商务分配提成记录
- */
- public UserDistributeBusinessOrderDonRecord saveBusinessTakeMoneyRecord(OrderDon order, Long businessId, Long sharedId, Integer firstOrderRate, Integer renewOrderRate, Integer distributeRate) {
- UserBusinessDefaultRateConfig defaultGoodsRateConfig = defaultRateConfigMapper.selectOne(Wrappers.lambdaQuery(UserBusinessDefaultRateConfig.class)
- .eq(UserBusinessDefaultRateConfig::getGoodsId, order.getGoodsId()).last("limit 1"));
- if (defaultGoodsRateConfig == null) {
- log.info("系统默认商务分销配置未配置,businessId:{},orderId:{}", businessId, order.getId());
- return null;
- }
- UserDistributeBusinessOrderDonRecord record = new UserDistributeBusinessOrderDonRecord();
- record.setBusinessId(businessId);
- record.setUserId(order.getUserId());
- record.setSharedId(sharedId);
- record.setOrderType(order.getOrderType());
- record.setOrderCreatedTime(order.getCreatedTime());
- record.setOrderId(order.getId());
- record.setPreRelationId(order.getRelationId());
- //是否超过默认配置平台比例
- Integer defaultGoodsRate = defaultGoodsRateConfig.getRate();
- //首单提成比例
- BigDecimal orderMoney = order.getDsMoney();
- BigDecimal takeMoney = BigDecimal.ZERO;
- if (firstOrderRate != null) {
- if (distributeRate > defaultGoodsRate) {
- if (defaultGoodsRateConfig.getIsPlatPay()) {
- log.info("首单,平台承担商务businessId:{}配置分销者sharedId:{}超过平台goodsId:{}标准分销比例:{}", businessId, sharedId, order.getGoodsId(), defaultGoodsRate);
- } else {
- firstOrderRate -= distributeRate - defaultGoodsRate;
- log.info("商务businessId:{}配置分销者sharedId:{}比例超过标准比例,可获取首单提成比例为:{}", businessId, sharedId, firstOrderRate);
- if (firstOrderRate <= 0) {
- log.info("商务businessId:{}获得分销者sharedId:{}首单提成比例不大于0", businessId, sharedId);
- return null;
- }
- }
- }
- record.setRate(firstOrderRate);
- BigDecimal firstRate = BigDecimal.valueOf(firstOrderRate).divide(BigDecimal.valueOf(100));
- takeMoney = orderMoney.multiply(firstRate);
- }
- if (renewOrderRate != null) {
- if (distributeRate > defaultGoodsRate) {
- if (defaultGoodsRateConfig.getIsPlatPay()) {
- log.info("首单续费,平台承担商务businessId:{}配置分销者sharedId:{}超过平台goodsId:{}标准分销比例:{}", businessId, sharedId, order.getGoodsId(), defaultGoodsRate);
- } else {
- renewOrderRate -= distributeRate - defaultGoodsRate;
- log.info("商务businessId:{}配置分销者sharedId:{}比例超过标准比例,可获取首单续费提成比例为:{}", businessId, sharedId, renewOrderRate);
- if (renewOrderRate <= 0) {
- log.info("商务businessId:{}获得分销者sharedId:{}首单续费提成比例不大于0", businessId, sharedId);
- return null;
- }
- }
- }
- record.setRate(renewOrderRate);
- BigDecimal renewRate = BigDecimal.valueOf(renewOrderRate).divide(BigDecimal.valueOf(100));
- takeMoney = orderMoney.multiply(renewRate);
- }
- record.setTakeMoney(takeMoney);
- return record;
- }
- /**
- * 保存店铺商务分配提成记录
- */
- public YhShopUserDistributeBusinessOrderDonRecord saveYhShopBusinessTakeMoneyRecord(OrderDon order, Long businessId, Long shopUserId, Integer firstOrderRate, Integer renewOrderRate, Integer distributeRate) {
- UserBusinessDefaultRateConfig defaultGoodsRateConfig = defaultRateConfigMapper.selectOne(Wrappers.lambdaQuery(UserBusinessDefaultRateConfig.class)
- .eq(UserBusinessDefaultRateConfig::getGoodsId, order.getGoodsId()).last("limit 1"));
- if (defaultGoodsRateConfig == null) {
- log.info("系统默认商务分销配置未配置,businessId:{},orderId:{}", businessId, order.getId());
- return null;
- }
- YhShopUserDistributeBusinessOrderDonRecord record = new YhShopUserDistributeBusinessOrderDonRecord();
- record.setBusinessId(businessId);
- record.setUserId(order.getUserId());
- record.setShopUserId(shopUserId);
- record.setOrderType(order.getOrderType());
- record.setOrderCreatedTime(order.getCreatedTime());
- record.setOrderId(order.getId());
- record.setPreRelationId(order.getRelationId());
- //是否超过默认配置平台比例
- Integer defaultGoodsRate = defaultGoodsRateConfig.getRate();
- //首单提成比例
- BigDecimal orderMoney = order.getMoney();
- BigDecimal takeMoney = BigDecimal.ZERO;
- if (firstOrderRate != null) {
- if (distributeRate > defaultGoodsRate) {
- if (defaultGoodsRateConfig.getIsPlatPay()) {
- log.info("首单,平台承担商务businessId:{}配置分销者sharedId:{}超过平台goodsId:{}标准分销比例:{}", businessId, shopUserId, order.getGoodsId(), defaultGoodsRate);
- } else {
- firstOrderRate -= distributeRate - defaultGoodsRate;
- log.info("商务businessId:{}配置分销者sharedId:{}比例超过标准比例,可获取首单提成比例为:{}", businessId, shopUserId, firstOrderRate);
- if (firstOrderRate <= 0) {
- log.info("商务businessId:{}获得分销者sharedId:{}首单提成比例不大于0", businessId, shopUserId);
- return null;
- }
- }
- }
- record.setRate(firstOrderRate);
- BigDecimal firstRate = BigDecimal.valueOf(firstOrderRate).divide(BigDecimal.valueOf(100));
- takeMoney = orderMoney.multiply(firstRate);
- }
- if (renewOrderRate != null) {
- if (distributeRate > defaultGoodsRate) {
- if (defaultGoodsRateConfig.getIsPlatPay()) {
- log.info("首单续费,平台承担商务businessId:{}配置分销者sharedId:{}超过平台goodsId:{}标准分销比例:{}", businessId, shopUserId, order.getGoodsId(), defaultGoodsRate);
- } else {
- renewOrderRate -= distributeRate - defaultGoodsRate;
- log.info("商务businessId:{}配置分销者sharedId:{}比例超过标准比例,可获取首单续费提成比例为:{}", businessId, shopUserId, renewOrderRate);
- if (renewOrderRate <= 0) {
- log.info("商务businessId:{}获得分销者sharedId:{}首单续费提成比例不大于0", businessId, shopUserId);
- return null;
- }
- }
- }
- record.setRate(renewOrderRate);
- BigDecimal renewRate = BigDecimal.valueOf(renewOrderRate).divide(BigDecimal.valueOf(100));
- takeMoney = orderMoney.multiply(renewRate);
- }
- record.setTakeMoney(takeMoney);
- return record;
- }
- }
|