Selaa lähdekoodia

用户开店流程

zoujiajian 2 vuotta sitten
vanhempi
sitoutus
3b4492e0cb
19 muutettua tiedostoa jossa 410 lisäystä ja 22 poistoa
  1. 2 0
      netflix-common/src/main/java/com/cyksj/common/constant/Constant.java
  2. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/shop/YhShopDistributeWaitingSendPointsMapper.java
  3. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/shop/YhShopMapper.java
  4. 2 0
      netflix-dao/src/main/java/com/cyksj/model/entity/GroupsRelation.java
  5. 5 0
      netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java
  6. 51 0
      netflix-dao/src/main/java/com/cyksj/model/manage/entity/YhShop.java
  7. 43 0
      netflix-dao/src/main/java/com/cyksj/model/manage/entity/YhShopDistributeWaitingSendPoints.java
  8. 5 0
      netflix-dao/src/main/java/com/cyksj/model/request/ExchangeCodeTicket.java
  9. 5 0
      netflix-dao/src/main/java/com/cyksj/model/request/OrderPayRequest.java
  10. 1 1
      netflix-service/src/main/java/com/cyksj/service/distribute/equipment/impl/EquipmentDistributeFrontServiceImpl.java
  11. 2 2
      netflix-service/src/main/java/com/cyksj/service/exchange/ExchangeCodeService.java
  12. 17 8
      netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java
  13. 1 1
      netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java
  14. 1 1
      netflix-service/src/main/java/com/cyksj/service/order/UserRealOrderBenefitsService.java
  15. 17 7
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
  16. 2 2
      netflix-service/src/main/java/com/cyksj/service/order/impl/UserRealOrderBenefitsImpl.java
  17. 22 0
      netflix-service/src/main/java/com/cyksj/service/shop/YhShopFrontService.java
  18. 145 0
      netflix-service/src/main/java/com/cyksj/service/shop/impl/YhShopServiceImpl.java
  19. 63 0
      netflix-web/src/main/java/com/cyksj/web/controller/user/OpenShopController.java

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

@@ -159,4 +159,6 @@ public interface Constant {
 	String ORDER_MSG_FIRST_NOTIFY = "%s购买成功,收藏官网https://nf.video/ 合租账号就上银河录像局【银河录像局】";
 
 	String LOGIN_CODE = "yhc@36";
+
+	String USER_OPEN_SHOP_KEY = "user_open_shop_key";
 }

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

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

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

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

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GroupsRelation.java

@@ -72,6 +72,8 @@ public class GroupsRelation extends BaseEntity {
      */
     private String verifyCode;
 
+    private Long yhsId;
+
     /**
      * 获取权益时的订单id
      */

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

@@ -231,6 +231,11 @@ public class OrderDon extends BaseEntity implements Serializable {
      */
     private Boolean isOt;
 
+    /**
+     * 店铺id
+     */
+    private Long yhsId;
+
     public enum Status {
         /**
          * 订单状态

+ 51 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/entity/YhShop.java

@@ -0,0 +1,51 @@
+package com.cyksj.model.manage.entity;
+
+import com.cyksj.model.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShop
+ *创建者: JavaZou
+ *创建时间:2023/9/14 13:59
+ */
+@Getter
+@Setter
+public class YhShop extends BaseEntity {
+	/**
+	 * 店主id
+	 */
+	private Long userId;
+
+	/**
+	 * 店铺名称
+	 */
+	private String name;
+
+	/**
+	 * 自定义id
+	 */
+	private String customId;
+
+	/**
+	 * 商务id
+	 */
+	private Long businessId;
+
+	/**
+	 * 是否审核通过
+	 */
+	private Boolean isApprove;
+
+	/**
+	 * 店铺开放状态
+	 */
+	private Boolean status;
+
+	/**
+	 * 审核失败原因
+	 */
+	private String reason;
+}
+

+ 43 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/entity/YhShopDistributeWaitingSendPoints.java

@@ -0,0 +1,43 @@
+package com.cyksj.model.manage.entity;
+
+import com.cyksj.model.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopDistributeWaitingSendPoints
+ *创建者: JavaZou
+ *创建时间:2023/9/14 14:01
+ */
+@Getter
+@Setter
+public class YhShopDistributeWaitingSendPoints extends BaseEntity {
+	/**
+	 * 店铺用户id
+	 */
+	private Long userId;
+
+	/**
+	 * 店铺主id
+	 */
+	private Long soUserId;
+
+	private Long orderId;
+
+	private Long skuId;
+
+	/**
+	 * 分成金额
+	 */
+	private BigDecimal money;
+
+	/**
+	 * 订单退款扣除的分成金额
+	 */
+	private BigDecimal refundMoney;
+
+	private Status sendStatus;
+}

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/request/ExchangeCodeTicket.java

@@ -16,4 +16,9 @@ public class ExchangeCodeTicket {
 	 * 兑换码
 	 */
 	private String code;
+
+	/**
+	 * 店铺id
+	 */
+	private String customId;
 }

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/request/OrderPayRequest.java

@@ -109,4 +109,9 @@ public class OrderPayRequest {
      * 是否是特定价格
      */
     private Boolean isSpecificPrice;
+
+    /**
+     * 店铺id
+     */
+    private String customId;
 }

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/distribute/equipment/impl/EquipmentDistributeFrontServiceImpl.java

@@ -70,7 +70,7 @@ public class EquipmentDistributeFrontServiceImpl implements EquipmentDistributeF
 		}
 		if (groupsRelationView == null) {
 			//领取权益时,没有车票的用户自动上车,获得对应车票
-			GroupsRelation relation = exchangeCodeService.getGroupTripsTicket(goodsDonSku, userId, null, OrderDon.Type.EQUIPMENT);
+			GroupsRelation relation = exchangeCodeService.getGroupTripsTicket(null, goodsDonSku, userId, null, OrderDon.Type.EQUIPMENT);
 			relationId = relation.getId();
 			orderId = relation.getOrderId();
 		} else {

+ 2 - 2
netflix-service/src/main/java/com/cyksj/service/exchange/ExchangeCodeService.java

@@ -37,10 +37,10 @@ public interface ExchangeCodeService extends IService<ExchangeCode> {
 	/**
 	 * 获取车票
 	 */
-	GroupsRelation getGroupTripsTicket(GoodsDonSku sku, Long userId, OrderDon exCodeOrderDon, OrderDon.Type orderDonTye);
+	GroupsRelation getGroupTripsTicket(Long yhsId, GoodsDonSku sku, Long userId, OrderDon exCodeOrderDon, OrderDon.Type orderDonTye);
 
 	/**
 	 * 获取车票车位
 	 */
-	GroupsRelation getRelationNoOrder(GoodsDonSku sku, Long userId);
+	GroupsRelation getRelationNoOrder(GoodsDonSku sku, Long userId, Long yhsId);
 }

+ 17 - 8
netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java

@@ -28,6 +28,7 @@ import com.cyksj.redis.RedisService;
 import com.cyksj.service.exchange.ExchangeCodeService;
 import com.cyksj.service.relation.GroupRelationFrontService;
 import com.cyksj.service.relation.GroupsRelationExpiryRecordService;
+import com.cyksj.service.shop.YhShopFrontService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
@@ -82,6 +83,8 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 
 	private final GroupsRelationExpiryRecordService groupsRelationExpiryRecordService;
 
+	private final YhShopFrontService yhShopFrontService;
+
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
 	public List<ExcelExchangeCodeData> createExchangeCode(ExchangeCodeReq exchangeCodeReq) {
@@ -140,6 +143,9 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 		if (exchangeCode.getUseStatus()) {
 			throw BusinessRuntimeException.getInstance("该兑换码已使用");
 		}
+		//店铺中 进行兑换码 兑换 标记订单 座位
+		String customId = exchangeCodeTicket.getCustomId();
+		Long yhsId = yhShopFrontService.checkShopCustomIdAndReturnShopId(customId);
 		//兑换成功
 		exchangeCode.setUseStatus(true);
 		exchangeCode.setUserId(userId);
@@ -174,7 +180,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 			throw BusinessRuntimeException.getInstance("您的订单已退款,无法使用该兑换码");
 		}
 		//生成车票订单
-		getGroupTripsTicket(goodsDonSkuMapper.selectById(exchangeCode.getSkuId()), userId, orderDon, OrderDon.Type.EX_CODE);
+		getGroupTripsTicket(yhsId, goodsDonSkuMapper.selectById(exchangeCode.getSkuId()), userId, orderDon, OrderDon.Type.EX_CODE);
 		log.info("用户:{}通过兑换码:{}兑换成功", userId, exchangeCodeTicket.getCode());
 		if (exchangeCode.getType() == 1) {
 			luckyDrawRecordMapper.updateExCodeStatus(userId, exchangeCode.getCode());
@@ -232,7 +238,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 	 * 获取车位
 	 */
 	@Override
-	public GroupsRelation getGroupTripsTicket(GoodsDonSku sku, Long userId, OrderDon exCodeOrderDon, OrderDon.Type orderDonTye) {
+	public GroupsRelation getGroupTripsTicket(Long yhsId, GoodsDonSku sku, Long userId, OrderDon exCodeOrderDon, OrderDon.Type orderDonTye) {
 		if (sku == null) {
 			throw BusinessRuntimeException.getInstance("规格不存在,请联系客服");
 		}
@@ -244,7 +250,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 		if (user == null) {
 			throw BusinessRuntimeException.getInstance("用户不存在");
 		}
-		GroupsRelation relation = getRelationNoOrder(sku, userId);
+		GroupsRelation relation = getRelationNoOrder(sku, userId, yhsId);
 
 		Long relationId = relation.getId();
 		OrderDon orderDon;
@@ -253,6 +259,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 			orderDon.setRelationId(relationId);
 			orderDon.setUserId(userId);
 			orderDon.setStatus(goodsDon.getType() == 1 && goodsDon.getSecondType() == 2 ? OrderDon.Status.complete : OrderDon.Status.hasPayment);
+			orderDon.setYhsId(yhsId);
 			orderDonMapper.updateById(orderDon);
 			if (orderDon.getIsDp()) {
 				//是否已经发送优惠加购车票
@@ -272,7 +279,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 									log.error("订单id:{}优惠加购规格已被删除 skuId:{},车票未发送", orderDon.getId(), plus_skuId);
 									return;
 								}
-								GroupsRelation relationNoOrder = getRelationNoOrder(plus_sku, orderDon.getUserId());
+								GroupsRelation relationNoOrder = getRelationNoOrder(plus_sku, orderDon.getUserId(), orderDon.getYhsId());
 								dis_relation_ids.add(relationNoOrder.getId());
 							});
 							//保存订单关联优惠加购车票
@@ -294,6 +301,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 			orderDon.setMoney(BigDecimal.ZERO);
 			orderDon.setSkuId(sku.getId());
 			orderDon.setRelationId(relationId);
+			orderDon.setYhsId(yhsId);
 			//默认数量为1
 			orderDon.setNum(1);
 			orderDon.setGoodsId(sku.getGoodsId());
@@ -351,15 +359,15 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 	}
 
 	@Override
-	public GroupsRelation getRelationNoOrder(GoodsDonSku sku, Long userId) {
+	public GroupsRelation getRelationNoOrder(GoodsDonSku sku, Long userId, Long yhsId) {
 		GroupsRelation relation = null;
 		Integer retryNum = 1;
 		List<Long> errorsRelationIds = new ArrayList<>();
-		relation = getFinalRelation(sku, userId, relation, retryNum, errorsRelationIds);
+		relation = getFinalRelation(sku, userId, relation, retryNum, yhsId, errorsRelationIds);
 		return relation;
 	}
 
-	public GroupsRelation getFinalRelation(GoodsDonSku sku, Long userId, GroupsRelation relation, Integer retryNum, List<Long> errorsRelationIds) {
+	public GroupsRelation getFinalRelation(GoodsDonSku sku, Long userId, GroupsRelation relation, Integer retryNum, Long yhsId, List<Long> errorsRelationIds) {
 		//寻找差不多过期时间规格的车位
 		relation = groupRelationFrontService.getSimilarExpiredGroupRelation(sku.getId(), sku.getDays(), sku.getMonths(), errorsRelationIds);
 		if (relation == null) {
@@ -428,6 +436,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 			if (relation.getStatus() != GroupsRelation.Status.outside) {
 				relation.setStatus(GroupsRelation.Status.validity);
 			}
+			relation.setYhsId(yhsId);
 			groupsRelationMapper.updateById(relation);
 			redisService.del(RedisKey.GROUPS_RELATION_NUM_KEY + relation.getId());
 		} catch (Exception e) {
@@ -441,7 +450,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 				throw BusinessRuntimeException.getInstance("获取车票异常,请联系客服");
 			}
 			//失败重新给他分配车位
-			getFinalRelation(sku, userId, relation, ++retryNum, errorsRelationIds);
+			getFinalRelation(sku, userId, relation, ++retryNum, yhsId, errorsRelationIds);
 		}
 		return relation;
 	}

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -195,7 +195,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
                         try {
                             List<GoodsDonSku> goodsDonSkus = Jsons.parseList(sku.getBenefitsList(), GoodsDonSku.class);
                             //自购实物 获取权益
-                            isReceivedAll = userRealOrderBenefitsService.getPayRealGoodsBenefits(orderDon.getUserId(), orderDon.getId(), goodsDonSkus);
+                            isReceivedAll = userRealOrderBenefitsService.getPayRealGoodsBenefits(orderDon.getUserId(), orderDon.getId(), orderDon.getYhsId(), goodsDonSkus);
                         } catch (Exception e) {
                         }
                     }

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/order/UserRealOrderBenefitsService.java

@@ -17,7 +17,7 @@ public interface UserRealOrderBenefitsService {
 	/**
 	 * 获取购买实物权益
 	 */
-	Boolean getPayRealGoodsBenefits(Long userId, Long orderId, List<GoodsDonSku> skuIds);
+	Boolean getPayRealGoodsBenefits(Long userId, Long orderId, Long yhsId, List<GoodsDonSku> skuIds);
 
 	/**
 	 * 扣除实物权益

+ 17 - 7
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -74,6 +74,7 @@ import com.cyksj.service.pay.AliPayCommonService;
 import com.cyksj.service.relation.GroupRelationClearService;
 import com.cyksj.service.relation.GroupRelationFrontService;
 import com.cyksj.service.relation.GroupsRelationExpiryRecordService;
+import com.cyksj.service.shop.YhShopFrontService;
 import com.cyksj.service.sys.SysConfigService;
 import com.cyksj.service.telegram.TelegramService;
 import com.cyksj.service.template.TemplateCommonService;
@@ -220,12 +221,17 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final TelegramService telegramService;
 
+	private final YhShopFrontService yhShopFrontService;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
 	@Override
 	public OrderDon submit(OrderPayRequest payRequest) throws Exception {
 		CouponUser couponUser = null;
+		String customId = payRequest.getCustomId();
+		//若存在店铺id,校验店铺状态
+		Long yhsId = yhShopFrontService.checkShopCustomIdAndReturnShopId(customId);
 		if (StrUtil.isNotBlank(payRequest.getCouponExCode()) || payRequest.getCouponId() != null) {
 			CouponPopularizeDto couponPopularizeDto = checkCouponStatus(payRequest.getSkuId(), payRequest.getCouponExCode(), payRequest.getCouponId(), payRequest.getUserId(), false);
 			//记录优惠券使用状态
@@ -253,7 +259,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			payOpenId = user.getOpenId();
 			if (goodsDon.getType() == 1) {
 				//获取座位
-				relation = getRelation(payRequest, sku);
+				relation = getRelation(payRequest, sku, yhsId);
 				relationId = relation.getId();
 			} else {
 
@@ -350,6 +356,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		orderDon.setIsWebPay(payRequest.getIsWebPay());
 		orderDon.setSource(payRequest.getSource());
 		orderDon.setCouponExCode(payRequest.getCouponExCode());
+		//店铺id
+		orderDon.setYhsId(yhsId);
 		if (relation != null && relation.getStatus() == GroupsRelation.Status.outside) {
 			orderDon.setIsOt(true);
 		}
@@ -1337,7 +1345,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 								if (dis_relation_ids == null) {
 									dis_relation_ids = new ArrayList<>();
 								}
-								GroupsRelation relationNoOrder = exchangeCodeService.getRelationNoOrder(plus_sku, order.getUserId());
+								GroupsRelation relationNoOrder = exchangeCodeService.getRelationNoOrder(plus_sku, order.getUserId(), order.getYhsId());
 								dis_relation_ids.add(relationNoOrder.getId());
 							}
 							redisService.del(RedisService.key.PLUS_GOODS_ADDRESS_KEY.getName() + order.getId());
@@ -1352,7 +1360,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				}
 			}
 			if (order.getRelationId() != 0 && !relation.getUserId().equals(order.getUserId()) && order.getOrderType() == 1) {
-				GroupsRelation relationNoOrder = exchangeCodeService.getRelationNoOrder(sku, order.getUserId());
+				GroupsRelation relationNoOrder = exchangeCodeService.getRelationNoOrder(sku, order.getUserId(), order.getYhsId());
 				if (relationNoOrder == null) {
 					log.error("用户userId:{}支付订单orderId:{}回调后,未分配车票", order.getUserId(), order.getId());
 					return;
@@ -1801,7 +1809,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 			groupRelationClearService.clearRenewGroupRelation(relation);
 			//获取续费规格的车票
-			GroupsRelation afterRelation = exchangeCodeService.getRelationNoOrder(afterSku, userId);
+			GroupsRelation afterRelation = exchangeCodeService.getRelationNoOrder(afterSku, userId, orderDon.getYhsId());
 
 			DateTime afterExpiryTime = DateUtil.offsetMonth(preExpiryTime, num * afterSku.getMonths());
 
@@ -1984,7 +1992,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 					skuIds.forEach(skuId -> {
 						GoodsDonSku sku = goodsDonSkuMapper.selectById(skuId);
 						if (sku != null && sku.getStatus()) {
-							GroupsRelation relation = exchangeCodeService.getRelationNoOrder(sku, userId);
+							GroupsRelation relation = exchangeCodeService.getRelationNoOrder(sku, userId, null);
 							if (relation.getExpiryTime() == null || relation.getStartTime() == null) {
 								DateTime now = DateTime.now();
 								relation.setStartTime(now);
@@ -2042,8 +2050,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	/**
 	 * 获取车位
+	 * yshId 店铺id
 	 */
-	public GroupsRelation getRelation(OrderPayRequest payRequest, GoodsDonSku sku) {
+	public GroupsRelation getRelation(OrderPayRequest payRequest, GoodsDonSku sku, Long yhsId) {
 		GroupsRelation relation;
 		Long payRelationId = payRequest.getRelationId();
 		Boolean isLoginPopularize = payRequest.getIsLoginPopularize();
@@ -2098,7 +2107,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 					}
 					if (relation == null) {
 						//待发车
-						groups = groupsMapper.selectOne( Wrappers.lambdaQuery(GroupsTrips.class)
+						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)
@@ -2126,6 +2135,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		if (relation.getStatus() != GroupsRelation.Status.outside) {
 			relation.setStatus(GroupsRelation.Status.locking);
 		}
+		relation.setYhsId(yhsId);
 		groupsRelationMapper.updateById(relation);
 		redisService.del(RedisKey.GROUPS_RELATION_NUM_KEY + relation.getId());
 		return relation;

+ 2 - 2
netflix-service/src/main/java/com/cyksj/service/order/impl/UserRealOrderBenefitsImpl.java

@@ -58,7 +58,7 @@ public class UserRealOrderBenefitsImpl implements UserRealOrderBenefitsService {
 	private final OrderDonMapper orderDonMapper;
 
 	@Override
-	public Boolean getPayRealGoodsBenefits(Long userId, Long orderId, List<GoodsDonSku> skuIds) {
+	public Boolean getPayRealGoodsBenefits(Long userId, Long orderId, Long yhsId, List<GoodsDonSku> skuIds) {
 		Boolean isReceivedAll = true;
 		log.info("用户:{}实物订单orderId:{}发货,兑换权益规格数量:{}", userId, orderId, skuIds.size());
 		for (GoodsDonSku sku : skuIds) {
@@ -76,7 +76,7 @@ public class UserRealOrderBenefitsImpl implements UserRealOrderBenefitsService {
 			if (CollUtil.isEmpty(relationViewList)) {
 				log.info("用户userId:{}未有skuId:{}车票,获取对应车票", userId, sku.getId());
 				//领取权益时,没有车票的用户自动上车,获得对应车票
-				GroupsRelation relation = exchangeCodeService.getGroupTripsTicket(sku, userId, null, OrderDon.Type.PAY_EQUIPMENT);
+				GroupsRelation relation = exchangeCodeService.getGroupTripsTicket(yhsId, sku, userId, null, OrderDon.Type.PAY_EQUIPMENT);
 //				//多给三天
 //				DateTime expiryTime = DateUtil.offsetDay(relation.getExpiryTime(), 3);
 //				groupsRelationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class)

+ 22 - 0
netflix-service/src/main/java/com/cyksj/service/shop/YhShopFrontService.java

@@ -0,0 +1,22 @@
+package com.cyksj.service.shop;
+
+import com.cyksj.model.manage.entity.YhShop;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopFrontService
+ *创建者: JavaZou
+ *创建时间:2023/9/14 16:59
+ */
+public interface YhShopFrontService {
+	void applyOpenShop(YhShop shopInfo);
+
+	void reApplyOpenShop(YhShop shopInfo);
+
+	/**
+	 * 校验店铺id 并返回店铺记录id
+	 * @param customId
+	 * @return
+	 */
+	Long checkShopCustomIdAndReturnShopId(String customId);
+}

+ 145 - 0
netflix-service/src/main/java/com/cyksj/service/shop/impl/YhShopServiceImpl.java

@@ -0,0 +1,145 @@
+package com.cyksj.service.shop.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.constant.Constant;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.mapper.SysConfigMapper;
+import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
+import com.cyksj.mapper.shop.YhShopMapper;
+import com.cyksj.model.entity.SysConfig;
+import com.cyksj.model.manage.entity.YhShop;
+import com.cyksj.service.shop.YhShopFrontService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopServiceImpl
+ *创建者: JavaZou
+ *创建时间:2023/9/14 17:00
+ */
+@Service
+@RequiredArgsConstructor
+public class YhShopServiceImpl implements YhShopFrontService {
+	private final YhShopMapper yhShopMapper;
+
+	private final SysConfigMapper sysConfigMapper;
+
+	private final UserDistributeMapper userDistributeMapper;
+
+	@Override
+	public void applyOpenShop(YhShop shopInfo) {
+		String customId = shopInfo.getCustomId();
+		String name = shopInfo.getName();
+		Long userId = shopInfo.getUserId();
+		//参数校验
+		checkShopInfo(name, customId);
+		YhShop is_open = yhShopMapper.selectOne(Wrappers.lambdaQuery(YhShop.class)
+				.eq(YhShop::getUserId, userId));
+		if (is_open != null) {
+			throw BusinessRuntimeException.getInstance("只能申请开店一次");
+		}
+		YhShop is_customId = yhShopMapper.selectOne(Wrappers.lambdaQuery(YhShop.class)
+				.eq(YhShop::getCustomId, customId).last("limit 1"));
+		if (is_customId != null) {
+			throw BusinessRuntimeException.getInstance("该店铺id已存在");
+		}
+		//校验推广订单 次数是否合格
+		SysConfig sysConfig = sysConfigMapper.selectOne(Wrappers.lambdaQuery(SysConfig.class).eq(SysConfig::getSysKey, Constant.USER_OPEN_SHOP_KEY).last("limit 1"));
+		if (sysConfig == null) {
+			throw BusinessRuntimeException.getInstance("申请开店功能已关闭");
+		}
+		String sysValue = sysConfig.getSysValue();
+		if (StrUtil.isEmpty(sysValue)) {
+			throw BusinessRuntimeException.getInstance("申请开店功能已关闭");
+		}
+		int ds_order_limit = Integer.parseInt(sysValue);
+		if (ds_order_limit <= 0) {
+			throw BusinessRuntimeException.getInstance("申请开店功能已关闭");
+		}
+		//开店用户 当前分销单数
+		int user_ds_order = userDistributeMapper.count(userId);
+		if (user_ds_order < ds_order_limit) {
+			throw BusinessRuntimeException.getInstance("您推广单数不符合开店资格");
+		}
+		//TODO
+		try {
+			YhShop save = new YhShop();
+			save.setName(name);
+			save.setUserId(userId);
+			save.setCustomId(customId);
+			yhShopMapper.insert(save);
+		} catch (Exception e) {
+			throw BusinessRuntimeException.getInstance("系统繁忙,请重试..");
+		}
+	}
+
+	@Override
+	public void reApplyOpenShop(YhShop shopInfo) {
+		String customId = shopInfo.getCustomId();
+		String name = shopInfo.getName();
+		Long userId = shopInfo.getUserId();
+		checkShopInfo(name, customId);
+
+		YhShop is_open = yhShopMapper.selectOne(Wrappers.lambdaQuery(YhShop.class)
+				.eq(YhShop::getUserId, userId));
+		if (is_open == null) {
+			throw BusinessRuntimeException.getInstance("您暂无申请开店记录..");
+		}
+		String db_cId = is_open.getCustomId();
+		Boolean isApprove = is_open.getIsApprove();
+		if (isApprove) {
+			throw BusinessRuntimeException.getInstance("您的开店申请已通过.");
+		}
+
+		if (!db_cId.equals(customId)) {
+			YhShop is_customId = yhShopMapper.selectOne(Wrappers.lambdaQuery(YhShop.class)
+					.eq(YhShop::getCustomId, customId).last("limit 1"));
+			if (is_customId != null) {
+				throw BusinessRuntimeException.getInstance("该店铺id已存在");
+			}
+		}
+		//重置更新申请信息
+		yhShopMapper.update(null, Wrappers.lambdaUpdate(YhShop.class)
+				.set(YhShop::getIsApprove, false)
+				.set(YhShop::getReason, null)
+				.set(YhShop::getName, name)
+				.set(YhShop::getCustomId, customId)
+				.eq(YhShop::getId, is_open.getId()));
+	}
+
+	@Override
+	public Long checkShopCustomIdAndReturnShopId(String customId) {
+		if (StrUtil.isEmpty(customId)) {
+			return null;
+		}
+		YhShop yhShop = yhShopMapper.selectOne(Wrappers.lambdaQuery(YhShop.class)
+				.eq(YhShop::getCustomId, customId).last("limit 1"));
+		if (yhShop == null) {
+			throw BusinessRuntimeException.getInstance("该店铺不存在");
+		}
+		if (!yhShop.getIsApprove()) {
+			throw BusinessRuntimeException.getInstance("该店铺异常,请联系客服");
+		}
+		if (!yhShop.getStatus()) {
+			throw BusinessRuntimeException.getInstance("该店铺已关闭,请联系客服");
+		}
+		return yhShop.getId();
+	}
+
+	public void checkShopInfo(String name, String customId) {
+		if (StrUtil.isEmpty(name)) {
+			throw BusinessRuntimeException.getInstance("请输入店铺名称");
+		}
+		if (name.length() > 60) {
+			throw BusinessRuntimeException.getInstance("店铺名称过长");
+		}
+		if (StrUtil.isEmpty(customId)) {
+			throw BusinessRuntimeException.getInstance("请自定义店铺id");
+		}
+		if (customId.length() < 3 || customId.length() > 10) {
+			throw BusinessRuntimeException.getInstance("请输入正确的店铺id");
+		}
+	}
+}

+ 63 - 0
netflix-web/src/main/java/com/cyksj/web/controller/user/OpenShopController.java

@@ -0,0 +1,63 @@
+package com.cyksj.web.controller.user;
+
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.model.manage.entity.YhShop;
+import com.cyksj.service.shop.YhShopFrontService;
+import com.cyksj.web.util.StpUserUtil;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/*
+ *项目名: yhlxj
+ *文件名: OpenShopController
+ *创建者: JavaZou
+ *创建时间:2023/9/14 12:26
+ */
+@RestController
+@RequestMapping("/applet/shop")
+@RequiredArgsConstructor
+public class OpenShopController {
+	private final YhShopFrontService yhShopFrontService;
+
+	private final BeanSearcher beanSearcher;
+
+	/**
+	 * 开店申请
+	 */
+	@PostMapping("/apply")
+	public Result<String> applyOpenShop(@RequestBody YhShop shopInfo) {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		shopInfo.setUserId(userId);
+		yhShopFrontService.applyOpenShop(shopInfo);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+
+	/**
+	 * 店铺审核失败 重新申请
+	 */
+	@PutMapping("/reApply")
+	public Result<String> reApplyOpenShop(@RequestBody YhShop shopInfo) {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		shopInfo.setUserId(userId);
+		yhShopFrontService.reApplyOpenShop(shopInfo);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 个人店铺审核详情
+	 */
+	@GetMapping("/get/detail")
+	public Result<YhShop> getYhShopDetail() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		YhShop yhShop = beanSearcher.searchFirst(YhShop.class, MapUtils.builder()
+				.field(YhShop::getUserId, userId)
+				.selectExclude(YhShop::getId)
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(yhShop);
+	}
+
+}