|
|
@@ -1,5 +1,6 @@
|
|
|
package com.cyksj.service.distribute.equipment.impl;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DateField;
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
@@ -9,10 +10,7 @@ import com.cyksj.common.constant.Constant;
|
|
|
import com.cyksj.common.util.Jsons;
|
|
|
import com.cyksj.mapper.GroupsRelationMapper;
|
|
|
import com.cyksj.mapper.OrderDonMapper;
|
|
|
-import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserChanceMapper;
|
|
|
-import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserChanceRecordMapper;
|
|
|
-import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserDistributeInviteRecordMapper;
|
|
|
-import com.cyksj.mapper.manage.distribute.equipment.EquipmentUserReceiveBenefitsRecordMapper;
|
|
|
+import com.cyksj.mapper.manage.distribute.equipment.*;
|
|
|
import com.cyksj.model.dto.EquipmentConfigDto;
|
|
|
import com.cyksj.model.entity.*;
|
|
|
import com.cyksj.model.manage.views.RealGoodsOrderDonView;
|
|
|
@@ -66,6 +64,10 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
|
|
|
|
|
|
private final BeanSearcher beanSearcher;
|
|
|
|
|
|
+ private final EquipmentUserDistributeTransportBenefitsMapper transportBenefitsMapper;
|
|
|
+
|
|
|
+ private final EquipmentUserPayRecordMapper equipmentUserPayRecordMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public void saveDistributionInvitation(Long sharedId, Boolean isNewUser, Long userId) {
|
|
|
if (sharedId.equals(userId)) {
|
|
|
@@ -108,30 +110,7 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
|
|
|
EquipmentUserDistributeInviteRecord record = getDistributeRecord(userId);
|
|
|
if (record != null) {
|
|
|
Long sharId = record.getShareId();
|
|
|
- if (saveInviteRecord(sharId, userId, orderId, EquipmentUserChanceRecord.Status.hasPayment)) {
|
|
|
- SysConfig config = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
|
|
|
- .eq(SysConfig::getSysKey, Constant.EQUIPMENT_DISTRIBUTE_KEY).last("limit 1"));
|
|
|
- String sysValue = config.getSysValue();
|
|
|
- //未配置车票权益 不增加次数
|
|
|
- if (StrUtil.isEmpty(sysValue)) {
|
|
|
- return;
|
|
|
- }
|
|
|
- EquipmentUserChance chance = equipmentUserChanceMapper.selectOne(Wrappers.lambdaQuery(EquipmentUserChance.class)
|
|
|
- .eq(EquipmentUserChance::getUserId, sharId)
|
|
|
- .last("limit 1"));
|
|
|
- if (chance == null) {
|
|
|
- try {
|
|
|
- chance = new EquipmentUserChance();
|
|
|
- chance.setUserId(sharId);
|
|
|
- chance.setNum(1);
|
|
|
- equipmentUserChanceMapper.insert(chance);
|
|
|
- } catch (DuplicateKeyException e) {
|
|
|
- equipmentUserChanceMapper.addUserChance(sharId);
|
|
|
- }
|
|
|
- } else {
|
|
|
- equipmentUserChanceMapper.addUserChance(sharId);
|
|
|
- }
|
|
|
- }
|
|
|
+ saveInviteRecord(sharId, userId, orderId, 1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -140,13 +119,7 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
|
|
|
EquipmentUserDistributeInviteRecord record = getDistributeRecord(userId);
|
|
|
if (record != null) {
|
|
|
Long sharId = record.getShareId();
|
|
|
- if (saveInviteRecord(sharId, userId, orderId, EquipmentUserChanceRecord.Status.refund)) {
|
|
|
- Integer update = equipmentUserChanceMapper.subUserChance(sharId);
|
|
|
- if (update == 0) {
|
|
|
- //扣除权益
|
|
|
- deductUserBenefits(sharId, orderId);
|
|
|
- }
|
|
|
- }
|
|
|
+ saveInviteRecord(sharId, userId, orderId, 2);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -161,22 +134,54 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
|
|
|
return record;
|
|
|
}
|
|
|
|
|
|
- public Boolean saveInviteRecord(Long sharId, Long userId, Long orderId, EquipmentUserChanceRecord.Status status) {
|
|
|
- EquipmentUserChanceRecord record = equipmentUserChanceRecordMapper.selectOne(Wrappers.lambdaQuery(EquipmentUserChanceRecord.class)
|
|
|
- .eq(EquipmentUserChanceRecord::getUserId, userId)
|
|
|
- .eq(EquipmentUserChanceRecord::getStatus, status)
|
|
|
- .eq(EquipmentUserChanceRecord::getOrderId, orderId)
|
|
|
- .last("limit 1"));
|
|
|
- if (record != null) {
|
|
|
- return false;
|
|
|
+ public void saveInviteRecord(Long sharId, Long userId, Long orderId, Integer type) {
|
|
|
+ EquipmentConfigDto equipmentConfigDto = checkEquipmentConfigDto();
|
|
|
+ Integer benefitsType = 1;
|
|
|
+ if (equipmentConfigDto != null && type == 1) {
|
|
|
+ //配置车票权益
|
|
|
+ if (CollUtil.isNotEmpty(equipmentConfigDto.getSkuList())) {
|
|
|
+ addTicketBenefitsChance(sharId, userId, orderId, EquipmentUserChanceRecord.Status.hasPayment);
|
|
|
+ }
|
|
|
+
|
|
|
+ //已配置余额 实物发货 发送余额
|
|
|
+ if (equipmentConfigDto.getBalance() != null && equipmentConfigDto.getBalance().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ addBalanceBenefits(sharId, orderId, equipmentConfigDto.getBalance(), EquipmentUserDistributeTransportBenefits.Status.hasPayment);
|
|
|
+ benefitsType = 2;
|
|
|
+ }
|
|
|
+ EquipmentUserPayRecord record = new EquipmentUserPayRecord();
|
|
|
+ record.setShareId(sharId);
|
|
|
+ record.setUserId(userId);
|
|
|
+ record.setStatus(EquipmentUserPayRecord.Status.hasPayment);
|
|
|
+ record.setOrderId(orderId);
|
|
|
+ //1、车票权益,2、余额
|
|
|
+ record.setType(benefitsType);
|
|
|
+ equipmentUserPayRecordMapper.insert(record);
|
|
|
+ }
|
|
|
+ if (type == 2) {
|
|
|
+ //是否有余额权益
|
|
|
+ EquipmentUserDistributeTransportBenefits transportBenefits = transportBenefitsMapper.selectOne(Wrappers.lambdaQuery(EquipmentUserDistributeTransportBenefits.class)
|
|
|
+ .eq(EquipmentUserDistributeTransportBenefits::getOrderId, orderId).last("limit 1"));
|
|
|
+ if (transportBenefits != null && transportBenefits.getStatus() != EquipmentUserDistributeTransportBenefits.Status.complete) {
|
|
|
+ transportBenefits.setStatus(EquipmentUserDistributeTransportBenefits.Status.refund);
|
|
|
+ transportBenefitsMapper.updateById(transportBenefits);
|
|
|
+ }
|
|
|
+ //是否有车票权益
|
|
|
+ int update = equipmentUserChanceRecordMapper.update(null, Wrappers.lambdaUpdate(EquipmentUserChanceRecord.class)
|
|
|
+ .set(EquipmentUserChanceRecord::getStatus, EquipmentUserChanceRecord.Status.refund)
|
|
|
+ .eq(EquipmentUserChanceRecord::getOrderId, orderId)
|
|
|
+ .eq(EquipmentUserChanceRecord::getStatus, EquipmentUserChanceRecord.Status.hasPayment));
|
|
|
+ if (update > 0) {
|
|
|
+ update = equipmentUserChanceMapper.subUserChance(sharId);
|
|
|
+ if (update == 0) {
|
|
|
+ //扣除权益
|
|
|
+ deductUserBenefits(sharId, orderId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ equipmentUserPayRecordMapper.update(null, Wrappers.lambdaUpdate(EquipmentUserPayRecord.class)
|
|
|
+ .set(EquipmentUserPayRecord::getStatus, EquipmentUserPayRecord.Status.refund)
|
|
|
+ .eq(EquipmentUserPayRecord::getOrderId, orderId)
|
|
|
+ .ne(EquipmentUserPayRecord::getStatus, EquipmentUserChanceRecord.Status.refund));
|
|
|
}
|
|
|
- record = new EquipmentUserChanceRecord();
|
|
|
- record.setShareId(sharId);
|
|
|
- record.setUserId(userId);
|
|
|
- record.setStatus(status);
|
|
|
- record.setOrderId(orderId);
|
|
|
- equipmentUserChanceRecordMapper.insert(record);
|
|
|
- return true;
|
|
|
}
|
|
|
|
|
|
public void deductUserBenefits(Long userId, Long orderId) {
|
|
|
@@ -233,12 +238,73 @@ public class EquipmentDistributeServiceImpl implements EquipmentDistributeServic
|
|
|
EquipmentConfigDto equipmentConfigDto = null;
|
|
|
try {
|
|
|
equipmentConfigDto = Jsons.parseObject(config.getSysValue(), EquipmentConfigDto.class);
|
|
|
- equipmentConfigDto.getCouponIds().forEach(couponId->{
|
|
|
- couponCommonService.sendCouponToUser(userId, couponId, null, null, null, CouponUser.Channel.equipment);
|
|
|
- });
|
|
|
- redisService.set(RedisService.key.EQUIPMENT_DISTRIBUTE_COUPON_KEY.getNameFormat(userId), userId, RedisService.key.EQUIPMENT_DISTRIBUTE_COUPON_KEY.getTimeout());
|
|
|
+ if (equipmentConfigDto != null && CollUtil.isNotEmpty(equipmentConfigDto.getCouponIds())) {
|
|
|
+ equipmentConfigDto.getCouponIds().forEach(couponId -> {
|
|
|
+ couponCommonService.sendCouponToUser(userId, couponId, null, null, null, CouponUser.Channel.equipment);
|
|
|
+ });
|
|
|
+ redisService.set(RedisService.key.EQUIPMENT_DISTRIBUTE_COUPON_KEY.getNameFormat(userId), userId, RedisService.key.EQUIPMENT_DISTRIBUTE_COUPON_KEY.getTimeout());
|
|
|
+ }
|
|
|
} catch (Exception e) {
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ public EquipmentConfigDto checkEquipmentConfigDto() {
|
|
|
+ //是否有配置车票权益
|
|
|
+ SysConfig config = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
|
|
|
+ .eq(SysConfig::getSysKey, Constant.EQUIPMENT_DISTRIBUTE_KEY).last("limit 1"));
|
|
|
+ if (config == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ String sysValue = config.getSysValue();
|
|
|
+ //未配置权益
|
|
|
+ if (StrUtil.isEmpty(sysValue)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ EquipmentConfigDto equipmentConfigDto = null;
|
|
|
+ try {
|
|
|
+ equipmentConfigDto = Jsons.parseObject(sysValue, EquipmentConfigDto.class);
|
|
|
+ } catch (Exception e) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return equipmentConfigDto;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void addBalanceBenefits(Long sharId, Long orderId, BigDecimal balance, EquipmentUserDistributeTransportBenefits.Status status) {
|
|
|
+ log.info("分销人:{}记录分享有礼实物订单:{}余额权益,待发货后发送", sharId, orderId);
|
|
|
+ EquipmentUserDistributeTransportBenefits transportBenefits = new EquipmentUserDistributeTransportBenefits();
|
|
|
+ transportBenefits.setShareId(sharId);
|
|
|
+ transportBenefits.setOrderId(orderId);
|
|
|
+ transportBenefits.setStatus(status);
|
|
|
+ transportBenefits.setBalance(balance);
|
|
|
+ transportBenefitsMapper.insert(transportBenefits);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void addTicketBenefitsChance(Long sharId, Long userId, Long orderId, EquipmentUserChanceRecord.Status status) {
|
|
|
+ try {
|
|
|
+ EquipmentUserChanceRecord record = new EquipmentUserChanceRecord();
|
|
|
+ record.setShareId(sharId);
|
|
|
+ record.setUserId(userId);
|
|
|
+ record.setStatus(status);
|
|
|
+ record.setOrderId(orderId);
|
|
|
+ equipmentUserChanceRecordMapper.insert(record);
|
|
|
+
|
|
|
+ EquipmentUserChance chance = equipmentUserChanceMapper.selectOne(Wrappers.lambdaQuery(EquipmentUserChance.class)
|
|
|
+ .eq(EquipmentUserChance::getUserId, sharId)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (chance == null) {
|
|
|
+ try {
|
|
|
+ chance = new EquipmentUserChance();
|
|
|
+ chance.setUserId(sharId);
|
|
|
+ chance.setNum(1);
|
|
|
+ equipmentUserChanceMapper.insert(chance);
|
|
|
+ } catch (DuplicateKeyException e) {
|
|
|
+ equipmentUserChanceMapper.addUserChance(sharId);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ equipmentUserChanceMapper.addUserChance(sharId);
|
|
|
+ }
|
|
|
+ } catch (DuplicateKeyException e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|