Преглед на файлове

fix 记录特殊类型的车票订单

zoujiajian преди 3 години
родител
ревизия
bd25ff521a

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/mapper/GroupsRelationMapper.java

@@ -52,5 +52,5 @@ public interface GroupsRelationMapper extends BaseMapper<GroupsRelation> {
 
 	Page<UserRecommendGoodsFrontView> getRecommendGoodsViews(@Param("page") Page<UserRecommendGoodsFrontView> page, @Param("list") List<Long> filter_goods_id, @Param("isPayNf") Boolean isPayNf);
 
-	Long getOutSideGroupsTripsRelationByGoodsId(@Param("skuId") Long skuId, @Param("beginOfDay") DateTime beginOfDay, @Param("extraNum") Integer extraNum);
+	Long getOutSideGroupsTripsRelationByGoodsId(@Param("skuId") Long skuId, @Param("beginOfDay") DateTime beginOfDay, @Param("extraNum") Integer extraNum, @Param("userId") Long userId);
 }

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java

@@ -226,6 +226,11 @@ public class OrderDon extends BaseEntity implements Serializable {
 
     private String payTitle;
 
+    /**
+     * 是否是额外硬塞车票车位的订单
+     */
+    private Boolean isOt;
+
     public enum Status {
         /**
          * 订单状态

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonBackView.java

@@ -36,6 +36,12 @@ public class OrderDonBackView {
 	@DbField("o.relation_id")
 	private Long relationId;
 
+	/**
+	 * 是否是额外硬塞的虚拟车票订单
+	 */
+	@DbField("o.is_ot")
+	private Boolean isOt;
+
 	/**
 	 * 邀请制用户账号
 	 */

+ 14 - 2
netflix-dao/src/main/resources/mapper/GroupRelationMapper.xml

@@ -219,8 +219,20 @@
         where gt.sku_id = #{skuId}
           and gt.status = 'validity'
           and a.expiry_time >= #{beginOfDay}
-          and (select count(*) from groups_relation gr where gr.status ='outside' and gr.groups_id = gt.id and
-            gr.user_id != 0) &lt; #{extraNum}
+          and (select count(*)
+               from groups_relation gr
+               where gr.status = 'outside'
+                 and gr.groups_id = gt.id
+                 and gr.user_id
+            != 0)
+         &lt; #{extraNum}
+          and
+            (
+        select count(*)
+        from groups_relation gr
+        where gr.groups_id = gt.id
+          and gr.user_id
+            = #{userId}) = 0
         order by RAND() limit 1
     </select>
 </mapper>

+ 23 - 15
netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java

@@ -306,6 +306,9 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 			if (relation.getStartTime() == null || relation.getExpiryTime() == null) {
 				orderDon.setStatus(OrderDon.Status.hasPayment);
 			}
+			if (relation != null && relation.getStatus() == GroupsRelation.Status.outside) {
+				orderDon.setIsOt(true);
+			}
 			//兑换码兑换
 			orderDon.setType(orderDonTye);
 			orderDon.setUserId(user.getId());
@@ -364,19 +367,29 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 					.gt(GroupsTrips::getAvailableNum, 0).last("limit 1")
 					.eq(GroupsTrips::getStatus, GroupsTrips.Status.validity)
 					.orderByAsc(GroupsTrips::getAvailableNum));
-			//待发车
-			if (groups == null) {
-				groups = groupsMapper.selectOne(Wrappers.lambdaQuery(GroupsTrips.class)
-						.eq(GroupsTrips::getSkuId, sku.getId())
-						.gt(GroupsTrips::getAvailableNum, 0).last("limit 1")
-						.eq(GroupsTrips::getStatus, GroupsTrips.Status.waiting)
-						.orderByAsc(GroupsTrips::getAvailableNum));
-			}
 			if (groups == null) {
 				//若是ChatGPT Plus 、MidJourney
 				//获取额外的车位
 				relation = getOutSideRelationIfAi(userId, groups, sku);
-			} else {
+				if (relation != null) {
+					groups = groupsMapper.selectById(relation.getGroupsId());
+				}
+				//待发车
+				if (relation == null) {
+					groups = groupsMapper.selectOne(Wrappers.lambdaQuery(GroupsTrips.class)
+							.eq(GroupsTrips::getSkuId, sku.getId())
+							.gt(GroupsTrips::getAvailableNum, 0).last("limit 1")
+							.eq(GroupsTrips::getStatus, GroupsTrips.Status.waiting)
+							.orderByAsc(GroupsTrips::getAvailableNum));
+				}
+			}
+			if (groups == null) {
+				//新增车位 并关联
+				relation = createNewGroupTripsAndRelation(sku, groups, relation);
+				log.info("无合适规格车队,新增新车队,获取车位relationId:{}", relation.getId());
+			}
+
+			if (relation == null) {
 				//寻找快满编车队进行占座
 				relation = groupsRelationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class)
 						.eq(GroupsRelation::getGroupsId, groups.getId())
@@ -505,7 +518,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 		GroupsRelation relation = null;
 		if (sku.getNum() > 1 && Constant.AI_goodsIds.contains(sku.getGoodsId())) {
 			DateTime tenExpiry = DateUtil.offsetDay(DateUtil.beginOfDay(DateTime.now()), 10);
-			Long groupsId = groupsRelationMapper.getOutSideGroupsTripsRelationByGoodsId(sku.getId(), tenExpiry, 5);
+			Long groupsId = groupsRelationMapper.getOutSideGroupsTripsRelationByGoodsId(sku.getId(), tenExpiry, 5, userId);
 			if (groupsId != null) {
 				relation = groupsRelationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class)
 						.eq(GroupsRelation::getGroupsId, groupsId)
@@ -525,11 +538,6 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 				}
 			}
 		}
-		if (relation == null) {
-			//新增车位 并关联
-			relation = createNewGroupTripsAndRelation(sku, groups, relation);
-			log.info("无合适规格车队,新增新车队,获取车位relationId:{}", relation.getId());
-		}
 		return relation;
 	}
 }

+ 27 - 15
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -229,7 +229,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		User user;
 		String payOpenId = null;
 		Long relationId = 0L;
-
+		GroupsRelation relation = null;
 		if (isNoLogin != null && isNoLogin) {
 			user = new User();
 			user.setId(0l);
@@ -242,7 +242,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			payOpenId = user.getOpenId();
 			if (goodsDon.getType() == 1) {
 				//获取座位
-				relationId = getRelation(payRequest, sku);
+				relation = getRelation(payRequest, sku);
+				relationId = relation.getId();
 			} else {
 
 			}
@@ -341,6 +342,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		orderDon.setIsWebPay(payRequest.getIsWebPay());
 		orderDon.setSource(payRequest.getSource());
 		orderDon.setCouponExCode(payRequest.getCouponExCode());
+		if (relation != null && relation.getStatus() == GroupsRelation.Status.outside) {
+			orderDon.setIsOt(true);
+		}
 		if (isNoLogin == null || !isNoLogin) {
 			//虚拟商品订单,是否是分销订单
 			if (goodsDon.getType() == 1 || goodsDon.getType() == 2) {
@@ -813,6 +817,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			orderDon.setPreSkuId(tripsSkuId);
 		}
 		orderDon.setGoodsId(goodsDon.getId());
+		if (relation != null && relation.getStatus() == GroupsRelation.Status.outside) {
+			orderDon.setIsOt(true);
+		}
 		//虚拟商品订单,是否是分销订单
 		if (goodsDon.getType() == 1) {
 			UserDistributeShared userDistributeShared = userDistributeSharedMapper.selectOne(Wrappers.lambdaQuery(UserDistributeShared.class).eq(UserDistributeShared::getUserId, user.getId()).last("limit 1"));
@@ -1942,7 +1949,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 	/**
 	 * 获取车位
 	 */
-	public Long getRelation(OrderPayRequest payRequest, GoodsDonSku sku) {
+	public GroupsRelation getRelation(OrderPayRequest payRequest, GoodsDonSku sku) {
 		GroupsRelation relation;
 		Long payRelationId = payRequest.getRelationId();
 		Boolean isLoginPopularize = payRequest.getIsLoginPopularize();
@@ -1967,20 +1974,13 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 						.gt(GroupsTrips::getAvailableNum, 0).last("limit 1")
 						.eq(GroupsTrips::getStatus, GroupsTrips.Status.validity)
 						.orderByAsc(GroupsTrips::getAvailableNum));
-				//待发车
-				if (groups == null) {
-					groups = groupsMapper.selectOne( Wrappers.lambdaQuery(GroupsTrips.class)
-							.eq(GroupsTrips::getSkuId, sku.getId())
-							.gt(GroupsTrips::getAvailableNum, 0).last("limit 1")
-							.eq(GroupsTrips::getStatus, GroupsTrips.Status.waiting)
-							.orderByAsc(GroupsTrips::getAvailableNum));
-				}
 				if (groups == null) {
 					//若是MidJourney、ChatGPT PLUS每个已满车队 硬塞5个座位
 					//主账号过期时间10天以外
 					if (sku.getNum() > 1 && Constant.AI_goodsIds.contains(sku.getGoodsId())) {
 						DateTime tenExpiry = DateUtil.offsetDay(DateUtil.beginOfDay(DateTime.now()), 10);
-						Long groupsId = groupsRelationMapper.getOutSideGroupsTripsRelationByGoodsId(sku.getId(), tenExpiry, 5);
+						//不塞存在该用户的车队
+						Long groupsId = groupsRelationMapper.getOutSideGroupsTripsRelationByGoodsId(sku.getId(), tenExpiry, 5, userId);
 						if (groupsId != null) {
 							relation = groupsRelationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class)
 									.eq(GroupsRelation::getGroupsId, groupsId)
@@ -1999,12 +1999,24 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 									redisService.del(RedisService.key.GROUPS_TRIPS_OUTSIDE_RELATION.getName() + groupsId);
 								}
 							}
+							groups = groupsMapper.selectById(groupsId);
 						}
 					}
 					if (relation == null) {
-						relation = groupsFuncService.createNewGroupsTrips(sku);
+						//待发车
+						groups = groupsMapper.selectOne( Wrappers.lambdaQuery(GroupsTrips.class)
+								.eq(GroupsTrips::getSkuId, sku.getId())
+								.gt(GroupsTrips::getAvailableNum, 0).last("limit 1")
+								.eq(GroupsTrips::getStatus, GroupsTrips.Status.waiting)
+								.orderByAsc(GroupsTrips::getAvailableNum));
 					}
-				} else {
+				}
+
+				if (groups == null) {
+					relation = groupsFuncService.createNewGroupsTrips(sku);
+				}
+
+				if (relation == null) {
 					//寻找快满编车队进行占座
 					relation = groupsRelationMapper.selectRandomOneRelationByGroupsId(groups.getId());
 					if (relation == null) {
@@ -2022,7 +2034,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 		groupsRelationMapper.updateById(relation);
 		redisService.del(RedisKey.GROUPS_RELATION_NUM_KEY + relation.getId());
-		return relation.getId();
+		return relation;
 	}
 
 	/**

+ 2 - 1
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -3,6 +3,7 @@ package com.cyksj.service.user.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -406,7 +407,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 				user.setEmail(loginReq.getEmail());
 				name.append("@");
 			}
-			user.setNickname(String.format("%s%s", name.toString(), Codec.DoDigest.custom().setAlgorithm(Codec.DoDigest.Algorithm.MD5).setStringData(String.format("%s%s", user.getId(), loginReq.getType() == 1 ? user.getLoginPhone() : user.getEmail())).toHexString().substring(0, 6)));
+			user.setNickname(String.format("%s%s", name.toString(), RandomUtil.randomString(6)));
 			//默认头像
 			user.setHeadimgurl(Constant.DEFAULT_HEAD_IMG);
 			String registerEnv = loginReq.getRegisterEnv();