Explorar el Código

渠道兑换码兑换车票

zoujiajian hace 1 año
padre
commit
6bd9871d4f

+ 10 - 0
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -400,4 +400,14 @@ public interface Constant {
 	List<Long> YH_EMAIL_VERIFY_OUTSIDE_CODE_GIDS = List.of(1l, 3l, 33l);
 
 	String YH_EMAIL_DOMAIN_SUFFIX = "@yinhe.ac.cn";
+
+	/**
+	 * 日
+	 */
+	String DAY_DATE = "day";
+
+	/**
+	 * 小时
+	 */
+	String HOUR_DAY_OF_DATE = "hour";
 }

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/UserDistributeExchangeCodeMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserDistributeExchangeCode;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeExchangeCodeMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/9/29 16:15
+ */
+public interface UserDistributeExchangeCodeMapper extends BaseMapper<UserDistributeExchangeCode> {
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/UserDistributeExchangeCodeUseRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserDistributeExchangeCodeUseRecord;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeExchangeCodeUseRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/9/29 16:16
+ */
+public interface UserDistributeExchangeCodeUseRecordMapper extends BaseMapper<UserDistributeExchangeCodeUseRecord> {
+}

+ 26 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeExchangeCode.java

@@ -0,0 +1,26 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeExchangeCode
+ * 创建者: JavaZou
+ * 创建时间:2024/9/29 16:15
+ */
+@Getter
+@Setter
+public class UserDistributeExchangeCode extends BaseEntity{
+	private Long userId;
+
+	private String code;
+
+	private Long goodsId;
+
+	private Long skuId;
+
+	private Integer time;
+
+	private String timeType;
+}

+ 22 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeExchangeCodeUseRecord.java

@@ -0,0 +1,22 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeExchangeCodeUseRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/9/29 16:16
+ */
+@Getter
+@Setter
+public class UserDistributeExchangeCodeUseRecord extends BaseEntity{
+	private Long userId;
+
+	private Long orderId;
+
+	private String code;
+
+	private Long relationId;
+}

+ 55 - 0
netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java

@@ -17,6 +17,7 @@ import com.cyksj.dto.RedisKey;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.*;
+import com.cyksj.mapper.manage.distribute.UserDistributeSharedMapper;
 import com.cyksj.mapper.manage.exchange.ExchangeCodeMapper;
 import com.cyksj.mapper.market.draw.LuckyDrawRecordMapper;
 import com.cyksj.model.entity.*;
@@ -32,6 +33,7 @@ import com.ejlchina.searcher.BeanSearcher;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -83,6 +85,12 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 
 	private final YhShopFrontService yhShopFrontService;
 
+	private final UserDistributeSharedMapper userDistributeSharedMapper;
+
+	private final UserDistributeExchangeCodeMapper userDistributeExchangeCodeMapper;
+
+	private final UserDistributeExchangeCodeUseRecordMapper userDistributeExchangeCodeUseRecordMapper;
+
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
 	public List<ExcelExchangeCodeData> createExchangeCode(ExchangeCodeReq exchangeCodeReq) {
@@ -135,6 +143,53 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 		if (StrUtil.isEmpty(exchangeCodeTicket.getCode())) {
 			throw BusinessRuntimeException.getInstance("兑换码有误,请使用正确的兑换码");
 		}
+		//是渠道兑换码
+		String code = exchangeCodeTicket.getCode();
+		UserDistributeExchangeCode userDistributeExchangeCode = userDistributeExchangeCodeMapper.selectOne(Wrappers.lambdaQuery(UserDistributeExchangeCode.class)
+				.eq(UserDistributeExchangeCode::getCode, code)
+				.last("limit 1"));
+		if (userDistributeExchangeCode != null) {
+			//是否是该渠道下的用户
+			Integer bindCount = userDistributeSharedMapper.selectCount(Wrappers.lambdaQuery(UserDistributeShared.class)
+					.eq(UserDistributeShared::getSharedId, userDistributeExchangeCode.getUserId())
+					.eq(UserDistributeShared::getUserId, userId));
+			if (bindCount == 0) {
+				throw BusinessRuntimeException.getInstance("您不是该渠道下的分销用户");
+			}
+			//是否已经兑换过
+			Integer useCount = userDistributeExchangeCodeUseRecordMapper.selectCount(Wrappers.lambdaQuery(UserDistributeExchangeCodeUseRecord.class)
+					.eq(UserDistributeExchangeCodeUseRecord::getUserId, userId)
+					.eq(UserDistributeExchangeCodeUseRecord::getCode, code));
+			if (useCount > 0) {
+				throw BusinessRuntimeException.getInstance("您已使用该兑换码");
+			}
+
+			try {
+				UserDistributeExchangeCodeUseRecord userDistributeExchangeCodeUseRecord = new UserDistributeExchangeCodeUseRecord();
+				userDistributeExchangeCodeUseRecord.setUserId(userId);
+				userDistributeExchangeCodeUseRecord.setCode(code);
+				userDistributeExchangeCodeUseRecordMapper.insert(userDistributeExchangeCodeUseRecord);
+				log.info("用户userId:{}兑换渠道兑换码:{}", userId, code);
+				GoodsDonSku sku = goodsDonSkuMapper.selectById(userDistributeExchangeCode.getSkuId());
+				GroupsRelation relation = getRelationNoOrder(sku, userId, 0l);
+				//重新设置时间
+				DateField dateField = DateField.MONTH;
+				if (Constant.DAY_DATE.equals(userDistributeExchangeCode.getTimeType())) {
+					dateField = DateField.DAY_OF_YEAR;
+				} else if (Constant.HOUR_DAY_OF_DATE.equals(userDistributeExchangeCode.getTimeType())) {
+					dateField = DateField.HOUR_OF_DAY;
+				}
+				relation.setAqType(2);
+				relation.setExpiryTime(DateUtil.offset(relation.getStartTime(), dateField, userDistributeExchangeCode.getTime()));
+				groupsRelationMapper.updateById(relation);
+
+				userDistributeExchangeCodeUseRecord.setRelationId(relation.getId());
+				userDistributeExchangeCodeUseRecordMapper.updateById(userDistributeExchangeCodeUseRecord);
+			} catch (DuplicateKeyException e) {
+				throw BusinessRuntimeException.getInstance("您已使用该兑换码");
+			}
+			return GatewayResponse.SUCCESS.newBuilder().toResult();
+		}
 		ExchangeCode exchangeCode = this.getOne(Wrappers.lambdaQuery(ExchangeCode.class).eq(ExchangeCode::getCode, exchangeCodeTicket.getCode()).last("limit 1"));
 		if (exchangeCode == null) {
 			throw BusinessRuntimeException.getInstance("兑换码有误,请使用正确的兑换码");