zoujiajian 2 лет назад
Родитель
Сommit
ee60ccaf40

+ 16 - 0
netflix-dao/src/main/java/com/cyksj/model/request/GiftCardReceiveReq.java

@@ -0,0 +1,16 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: yhlxj
+ *文件名: GiftCardReceiveReq
+ *创建者: JavaZou
+ *创建时间:2023/9/19 15:01
+ */
+@Getter
+@Setter
+public class GiftCardReceiveReq {
+	private Long relationId;
+}

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/views/UserTicketView.java

@@ -6,6 +6,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 /*
  *项目名: netflix
  *文件名: UserTicketView
@@ -35,6 +37,9 @@ public class UserTicketView {
 	@DbField("gdk.spec_val")
 	private String specVal;
 
+	@DbField("gr.expiry_time")
+	private Date expiryTime;
+
 	@DbField("gr.status")
 	@JsonIgnore
 	private String status;

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/user/UserService.java

@@ -50,5 +50,5 @@ public interface UserService extends IService<User> {
 	/**
 	 * 领取礼品卡
 	 */
-	void receiveGiftCardByRc(Long userId, String code);
+	void receiveGiftCardByRc(Long userId, String code, Long relationId);
 }

+ 69 - 11
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -1,6 +1,7 @@
 package com.cyksj.service.user.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
@@ -14,16 +15,15 @@ import com.cyksj.common.util.Codec;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.config.wxlogin.WxOpenPlatYHLXLoginConfig;
-import com.cyksj.mapper.GoodsDonSkuMapper;
-import com.cyksj.mapper.PhoneCodeMapper;
-import com.cyksj.mapper.GiftCardUserRecordMapper;
-import com.cyksj.mapper.UserMapper;
+import com.cyksj.mapper.*;
 import com.cyksj.mapper.channel.ChannelPopularizeMapper;
 import com.cyksj.mapper.manage.cps.UserDistributePopularizeMapper;
 import com.cyksj.mapper.market.task.UserBindDetailMapper;
 import com.cyksj.model.dto.*;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.LoginReq;
+import com.cyksj.model.views.RenewalView;
+import com.cyksj.model.views.UserTicketView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.distribute.DistributeService;
 import com.cyksj.service.distribute.equipment.EquipmentDistributeService;
@@ -31,8 +31,12 @@ import com.cyksj.service.exchange.ExchangeCodeService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.market.task.BindTaskService;
 import com.cyksj.service.sys.SysConfigService;
+import com.cyksj.service.user.UserBindRelationService;
 import com.cyksj.service.user.UserService;
 import com.cyksj.service.wechat.WeChatService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.param.Operator;
+import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.dao.DuplicateKeyException;
@@ -40,7 +44,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Optional;
@@ -85,6 +88,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
 	private final GoodsDonSkuMapper goodsDonSkuMapper;
 
+	private final GroupsRelationMapper groupsRelationMapper;
+
+	private final BeanSearcher beanSearcher;
+
+	private final UserBindRelationService userBindRelationService;
+
 	private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
 	@Override
@@ -508,7 +517,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
-	public void receiveGiftCardByRc(Long userId, String code) {
+	public void receiveGiftCardByRc(Long userId, String code, Long relationId) {
 		GiftCardUserRecord giftCardUserRecord = giftCardUserRecordMapper.selectOne(Wrappers.lambdaQuery(GiftCardUserRecord.class)
 				.eq(GiftCardUserRecord::getRc, code).last("limit 1"));
 		if (giftCardUserRecord == null) {
@@ -546,11 +555,60 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 					log.info("礼品卡id:{}虚拟车票skuId:{}不存在", giftCardUserRecord.getId(), gcSkuId);
 					throw BusinessRuntimeException.getInstance("该礼品卡对应的虚拟卡不存在,请联系客服");
 				}
-				GroupsRelation relationNoOrder = exchangeCodeService.getRelationNoOrder(sku, userId);
-				giftCardUserRecordMapper.update(null, Wrappers.lambdaUpdate(GiftCardUserRecord.class)
-						.set(GiftCardUserRecord::getRelationId, relationNoOrder.getId())
-						.eq(GiftCardUserRecord::getId, giftCardUserRecord.getId()));
-				log.info("发送至用户userId:{}礼品卡虚拟车票结束", userId);
+				List<Long> relationUserIdList = userBindRelationService.getRelationUserIdList(userId, null);
+				if (relationId != null) {
+					GroupsRelation groupsRelation = groupsRelationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class)
+							.in(GroupsRelation::getUserId, relationUserIdList)
+							.eq(GroupsRelation::getId, relationId)
+							.in(GroupsRelation::getStatus, List.of(GroupsRelation.Status.validity, GroupsRelation.Status.outside)).last("limit 1"));
+					if (groupsRelation == null) {
+						throw BusinessRuntimeException.getInstance("您选择的车票不存在");
+					}
+					Date expiryTime = groupsRelation.getExpiryTime();
+					if (expiryTime == null) {
+						throw BusinessRuntimeException.getInstance("请等您该类型下的车票配置账号后再增加对应时长");
+					}
+					if (sku.getDays() != null && sku.getDays() > 0) {
+						expiryTime = DateUtil.offsetDay(expiryTime, sku.getDays());
+					} else {
+						expiryTime = DateUtil.offsetMonth(expiryTime, sku.getMonths());
+					}
+					log.info("userId:{}领取虚拟卡skuId:{},增加车票时长至:{}", userId, sku.getId(), expiryTime.toString());
+					groupsRelation.setExpiryTime(expiryTime);
+					groupsRelationMapper.updateById(groupsRelation);
+					return;
+				}
+				//是否存在对应车票
+				List<UserTicketView> ticketViews = beanSearcher.searchAll(UserTicketView.class, MapUtils.builder()
+						.field(UserTicketView::getUserId, relationUserIdList).op(Operator.InList)
+						.field(UserTicketView::getGoodsId, giftCardUserRecord.getGcGoodsId())
+						.field(RenewalView::getStatus, List.of("validity", "outside")).op(Operator.InList)
+						.orderBy(UserTicketView::getRelationId).asc()
+						.build());
+				if (CollUtil.isEmpty(ticketViews)) {
+					GroupsRelation relationNoOrder = exchangeCodeService.getRelationNoOrder(sku, userId);
+					giftCardUserRecordMapper.update(null, Wrappers.lambdaUpdate(GiftCardUserRecord.class)
+							.set(GiftCardUserRecord::getRelationId, relationNoOrder.getId())
+							.eq(GiftCardUserRecord::getId, giftCardUserRecord.getId()));
+					log.info("用户未有该规格:{}车票,发送至用户userId:{}礼品卡虚拟车票结束", gcSkuId, userId);
+					return;
+				}
+				if (ticketViews.size() > 1) {
+					throw BusinessRuntimeException.getInstance("您有多张该类型的车票,请选择一张增加时长");
+				}
+				UserTicketView userTicketView = ticketViews.get(0);
+				Date expiryTime = userTicketView.getExpiryTime();
+				if (expiryTime == null) {
+					throw BusinessRuntimeException.getInstance("请等您该类型下的车票配置账号后再增加对应时长");
+				}
+				if (sku.getDays() != null && sku.getDays() > 0) {
+					expiryTime = DateUtil.offsetDay(expiryTime, sku.getDays());
+				} else {
+					expiryTime = DateUtil.offsetMonth(expiryTime, sku.getMonths());
+				}
+				groupsRelationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class)
+						.set(GroupsRelation::getExpiryTime, expiryTime)
+						.eq(GroupsRelation::getId, userTicketView.getRelationId()));
 			}
 		}
 	}

+ 1 - 1
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -168,7 +168,7 @@ public class GroupRelationController {
         List<Long> userIds = userBindRelationService.getRelationUserIdList(userId, null);
         List<UserTicketView> ticketViews = beanSearcher.searchAll(UserTicketView.class, MapUtils.builder()
                 .field(UserTicketView::getUserId, userIds).op(Operator.InList)
-                .field(RenewalView::getStatus, List.of("validity", "overdue", "outside")).op(Operator.InList)
+                .field(RenewalView::getStatus, List.of("validity", "outside")).op(Operator.InList)
                 .orderBy(UserTicketView::getRelationId).asc()
                 .build());
         return GatewayResponse.SUCCESS.newBuilder().toResult(ticketViews);

+ 4 - 6
netflix-web/src/main/java/com/cyksj/web/controller/user/UserController.java

@@ -13,10 +13,7 @@ import com.cyksj.mapper.manage.coupon.CouponUserMapper;
 import com.cyksj.model.dto.UserWhoami;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.GroupsRelationView;
-import com.cyksj.model.request.ExchangeCodeTicket;
-import com.cyksj.model.request.ReceiveBenefitsReq;
-import com.cyksj.model.request.UserReq;
-import com.cyksj.model.request.WorkOrderReq;
+import com.cyksj.model.request.*;
 import com.cyksj.model.response.UserAuthLoginResp;
 import com.cyksj.model.views.*;
 import com.cyksj.service.corp.CropChatService;
@@ -391,9 +388,10 @@ public class UserController {
      * 领取他人礼品卡
      */
     @PostMapping("/receive/giftCard/{code}")
-    public Result<String> receiveGiftCardByRc(@PathVariable String code) {
+    public Result<String> receiveGiftCardByRc(@PathVariable String code, @RequestBody GiftCardReceiveReq req) {
         long userId = StpUserUtil.getLoginIdAsLong();
-        userService.receiveGiftCardByRc(userId, code);
+        Long relationId = req.getRelationId();
+        userService.receiveGiftCardByRc(userId, code, relationId);
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 }