zoujiajian 1 jaar geleden
bovenliggende
commit
b86ea5a290

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/coin/UserGalaxyCoinService.java

@@ -17,4 +17,6 @@ public interface UserGalaxyCoinService {
 	void recordOrderRefundGalaxyCoinIfValid(Long orderId, Long userId, BigDecimal galaxyCoin);
 
 	void subOrderGenerateGalaxyCoin(Long orderId);
+
+	void handleUserGalaxyCoinOrderNotify(Long orderId, Long userId, String orderNo, Boolean ivVip);
 }

+ 20 - 0
netflix-service/src/main/java/com/cyksj/service/coin/impl/UserGalaxyCoinServiceImpl.java

@@ -5,8 +5,10 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.PointsRecordConst;
+import com.cyksj.mapper.OrderDonGalaxyCoinRecordMapper;
 import com.cyksj.mapper.UserGalaxyCoinRecordMapper;
 import com.cyksj.mapper.UserMapper;
+import com.cyksj.model.entity.OrderDonGalaxyCoinRecord;
 import com.cyksj.model.entity.User;
 import com.cyksj.model.entity.UserGalaxyCoinRecord;
 import com.cyksj.service.coin.UserGalaxyCoinService;
@@ -30,6 +32,8 @@ public class UserGalaxyCoinServiceImpl implements UserGalaxyCoinService {
 
 	private final UserMapper userMapper;
 
+	private final OrderDonGalaxyCoinRecordMapper orderDonGalaxyCoinRecordMapper;
+
 	@Override
 	public void sendGalaxyCoinRecord(Long userId, Integer galaxyCoin, String remark, Boolean isLottery) {
 		if (!isLottery) {
@@ -133,4 +137,20 @@ public class UserGalaxyCoinServiceImpl implements UserGalaxyCoinService {
 			}
 		}
 	}
+
+	@Override
+	public void handleUserGalaxyCoinOrderNotify(Long orderId, Long userId, String orderNo, Boolean ivVip) {
+		//银河币使用记录
+		OrderDonGalaxyCoinRecord orderDonGalaxyCoinRecord = orderDonGalaxyCoinRecordMapper.selectOne(Wrappers.lambdaQuery(OrderDonGalaxyCoinRecord.class)
+				.eq(OrderDonGalaxyCoinRecord::getOrderNo, orderNo)
+				.eq(OrderDonGalaxyCoinRecord::getIsVip, ivVip)
+				.last("limit 1"));
+		if (orderDonGalaxyCoinRecord != null) {
+			//使用记录
+			recordUseRecord(orderId,userId, orderDonGalaxyCoinRecord.getGalaxyCoin(), PointsRecordConst.ORDER, false);
+			orderDonGalaxyCoinRecord.setRefundGalaxyCoin(orderDonGalaxyCoinRecord.getGalaxyCoin());
+			orderDonGalaxyCoinRecord.setOrderId(orderId);
+			orderDonGalaxyCoinRecordMapper.updateById(orderDonGalaxyCoinRecord);
+		}
+	}
 }

+ 3 - 11
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -2959,17 +2959,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		if (orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
 			userBenefitsService.recordBalanceBySource(orderDon.getUserId(), orderDon.getBalance().negate(), UserBalanceSourceRecord.Source.payment, orderDon.getId(), goodsDon.getTitle() + UserBalanceSourceRecord.Source.payment.getDesc(), null, null);
 		}
-		//银河币使用记录
-		OrderDonGalaxyCoinRecord orderDonGalaxyCoinRecord = orderDonGalaxyCoinRecordMapper.selectOne(Wrappers.lambdaQuery(OrderDonGalaxyCoinRecord.class)
-				.eq(OrderDonGalaxyCoinRecord::getOrderNo, orderDon.getOrderNo())
-				.last("limit 1"));
-		if (orderDonGalaxyCoinRecord != null) {
-			//使用记录
-			userGalaxyCoinService.recordUseRecord(orderDon.getId(), orderDon.getUserId(), orderDonGalaxyCoinRecord.getGalaxyCoin(), PointsRecordConst.ORDER, false);
-			orderDonGalaxyCoinRecord.setRefundGalaxyCoin(orderDonGalaxyCoinRecord.getGalaxyCoin());
-			orderDonGalaxyCoinRecord.setOrderId(orderDon.getId());
-			orderDonGalaxyCoinRecordMapper.updateById(orderDonGalaxyCoinRecord);
-		}
 
 		TASK_POOL.execute(() -> {
 			try {
@@ -3107,6 +3096,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 		}
 
+		//银河币使用记录
+		//扣除下单银河币
+		userGalaxyCoinService.handleUserGalaxyCoinOrderNotify(orderDon.getId(), orderDon.getUserId(), orderDon.getOrderNo(), Boolean.FALSE);
 		//银河币返回
 		returnGalaxyCoin(orderDon);
 	}

+ 33 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/VipOrderDonServiceImpl.java

@@ -19,6 +19,7 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.snowflake.Sequence;
 import com.cyksj.common.util.Codec;
 import com.cyksj.common.util.Jsons;
+import com.cyksj.common.util.StringUtil;
 import com.cyksj.config.zfb.AliPayClientFactory;
 import com.cyksj.config.zfb.BaseZfbConfig;
 import com.cyksj.config.zfb.ZfbProductCode;
@@ -32,6 +33,7 @@ import com.cyksj.mapper.vip.VipOrderDonDeductRelationMapper;
 import com.cyksj.mapper.vip.VipOrderDonMapper;
 import com.cyksj.mapper.vip.VipUserMapper;
 import com.cyksj.model.dto.AliPayParams;
+import com.cyksj.model.dto.GalaxyCoinConsumeRateDto;
 import com.cyksj.model.dto.GalaxyCoinPayConfigDto;
 import com.cyksj.model.dto.VipDeductDto;
 import com.cyksj.model.entity.*;
@@ -423,6 +425,11 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 			handlerDistributeOrder(orderDon);
 			this.saveOrUpdate(orderDon);
 		}
+
+		//扣除下单银河币
+		userGalaxyCoinService.handleUserGalaxyCoinOrderNotify(orderDon.getId(), orderDon.getUserId(), orderDon.getOrderNo(), Boolean.TRUE);
+		//银河币返回
+		returnGalaxyCoin(orderDon);
 	}
 
 	private void sendVipTicketToUser(Long userId, Date vipStartTime, Date vipExpiryTime, List<Long> userIds, Long orderId) {
@@ -848,4 +855,30 @@ public class VipOrderDonServiceImpl extends ServiceImpl<VipOrderDonMapper, VipOr
 			throw BusinessRuntimeException.getInstance("银河币抵扣异常,请刷新页面重试");
 		}
 	}
+
+
+	public void returnGalaxyCoin(VipOrderDon orderDon) {
+		if (orderDon.getMoney().compareTo(BigDecimal.ZERO) > 0) {
+			Long userId = orderDon.getUserId();
+			BigDecimal money = orderDon.getMoney();
+			SysConfig galaxyCoinConsumeReturnRateConfig = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
+					.eq(SysConfig::getSysKey, Constant.GALAXY_COIN_CONSUME_RETURN_RATE_KEY)
+					.last("limit 1"));
+			BigDecimal retrunGalaxyCoin = BigDecimal.ZERO;
+			if (galaxyCoinConsumeReturnRateConfig != null && StrUtil.isNotEmpty(galaxyCoinConsumeReturnRateConfig.getSysValue())) {
+				try {
+					GalaxyCoinConsumeRateDto galaxyCoinConsumeRateDto = Jsons.parseObject(galaxyCoinConsumeReturnRateConfig.getSysValue(), GalaxyCoinConsumeRateDto.class);
+					BigDecimal moneyAvg = galaxyCoinConsumeRateDto.getMoney();
+					//返回银河币倍数
+					BigDecimal number = money.divide(moneyAvg);
+					retrunGalaxyCoin = number.multiply(galaxyCoinConsumeRateDto.getGalaxyCoin());
+					//发送银河币并记录
+					userGalaxyCoinService.sendGalaxyCoinRecord(userId, retrunGalaxyCoin.intValue(), PointsRecordConst.ORDER_CASHBACK, false);
+				} catch (Exception e) {
+					log.error("发送会员用户:{}银河币points:{}错误:{}", userId, retrunGalaxyCoin, StringUtil.getErrorText(e));
+				}
+
+			}
+		}
+	}
 }