소스 검색

Merge branch 'kick_out'

# Conflicts:
#	netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
zoujiajian 3 년 전
부모
커밋
d1857a1d1a

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserRelationKickOutRecord;
+
+/*
+ *项目名: netflix
+ *文件名: UserRelationKickOutRecordMapper
+ *创建者: JavaZou
+ *创建时间:2023/5/22 14:30
+ */
+public interface UserRelationKickOutRecordMapper extends BaseMapper<UserRelationKickOutRecord> {
+}

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

@@ -161,6 +161,11 @@ public class OrderDon extends BaseEntity implements Serializable {
      */
     private Long preSkuId;
 
+    /**
+     * 是否已踢出
+     */
+    private Boolean isKickOut;
+
     public enum Status {
         /**
          * 订单状态

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

@@ -14,9 +14,9 @@ import lombok.Setter;
 public class ShopConfig extends BaseEntity{
 
     /**
-     * 品如支付宝商户
+     * 木棉支付宝商户
      */
-    public static final String ZFB_DEFAULT_APP_ID = "2021003159660212";
+    public static final String ZFB_DEFAULT_APP_ID = "2021003171697073";
 
     /**
      * 分销提现支付宝默认商户

+ 34 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserRelationKickOutRecord.java

@@ -0,0 +1,34 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: UserRelationKickOutRecord
+ *创建者: JavaZou
+ *创建时间:2023/5/22 14:30
+ */
+@Getter
+@Setter
+public class UserRelationKickOutRecord extends BaseEntity{
+	private Long userId;
+
+	private Long orderId;
+
+	private String orderNo;
+
+	private Long goodsId;
+
+	private Long skuId;
+
+	private Long relationId;
+
+	private String reason;
+
+	private String img;
+
+	private String remark;
+
+	private String operator;
+}

+ 27 - 0
netflix-dao/src/main/java/com/cyksj/model/request/ClickOutReq.java

@@ -0,0 +1,27 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+/*
+ *项目名: netflix
+ *文件名: ClickOutReq
+ *创建者: JavaZou
+ *创建时间:2023/5/22 14:23
+ */
+@Getter
+@Setter
+public class ClickOutReq {
+	@NotNull(message = "订单为空")
+	private Long orderId;
+
+	@NotEmpty(message = "踢出理由为空")
+	private String reason;
+
+	private String img;
+
+	private String remark;
+}

+ 47 - 0
netflix-dao/src/main/java/com/cyksj/model/views/UserKickOutView.java

@@ -0,0 +1,47 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: UserKickOutView
+ *创建者: JavaZou
+ *创建时间:2023/5/22 15:49
+ */
+@Getter
+@Setter
+@SearchBean(tables = "user_relation_kick_out_record ukr left join goods_don g on g.id = ukr.goods_id" +
+		" left join goods_don_sku sku on sku.id = ukr.sku_id")
+public class UserKickOutView {
+	@DbField("ukr.user_id")
+	private Long userId;
+
+	@DbField("g.title")
+	private String title;
+
+	@DbField("sku.spec_val")
+	private String specVal;
+
+	@DbField("ukr.order_id")
+	private Long orderId;
+
+	@DbField("ukr.order_no")
+	private String orderNo;
+
+	@DbField("ukr.reason")
+	private String reason;
+
+	@DbField("ukr.img")
+	private String img;
+
+	@DbField("ukr.created_time")
+	private Date kickOutTime;
+
+	@DbField("ukr.remark")
+	private String remark;
+}

+ 3 - 0
netflix-service/src/main/java/com/cyksj/service/mange/CmsOrderDonService.java

@@ -6,6 +6,7 @@ import com.cyksj.model.entity.OrderDonTransport;
 import com.cyksj.model.entity.OrderDonWaybill;
 import com.cyksj.model.excel.ExcelOrderDonInfo;
 import com.cyksj.model.manage.request.ReqSetLogisticsPost;
+import com.cyksj.model.request.ClickOutReq;
 
 import java.util.List;
 
@@ -23,4 +24,6 @@ public interface CmsOrderDonService extends IService<OrderDon> {
     OrderDonTransport getTransport(Long orderId);
 
     OrderDonWaybill setWaybill(ReqSetLogisticsPost reqSetLogisticsPost);
+
+	void kickOutRelationId(long adminId, ClickOutReq req);
 }

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

@@ -5,16 +5,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.Jsons;
-import com.cyksj.mapper.GoodsDonSkuMapper;
-import com.cyksj.mapper.OrderDonMapper;
-import com.cyksj.mapper.OrderDonTransportMapper;
-import com.cyksj.mapper.OrderDonWaybillMapper;
+import com.cyksj.mapper.*;
+import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.mapper.stock.GoodsSkuStockRelateMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.excel.ExcelOrderDonInfo;
 import com.cyksj.model.manage.request.ReqSetLogisticsPost;
+import com.cyksj.model.request.ClickOutReq;
 import com.cyksj.service.mange.CmsOrderDonService;
 import com.cyksj.service.mange.stock.GoodsDonStockService;
+import com.cyksj.service.order.OrderCommonService;
 import com.cyksj.service.order.UserRealOrderBenefitsService;
 import com.cyksj.service.template.TemplateCommonService;
 import lombok.RequiredArgsConstructor;
@@ -49,6 +49,14 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final UserRealOrderBenefitsService userRealOrderBenefitsService;
 
+    private final UserRelationKickOutRecordMapper kickOutRecordMapper;
+
+    private final CmsUserMapper cmsUserMapper;
+
+    private final OrderCommonService orderCommonService;
+
+    private final GoodsDonMapper goodsDonMapper;
+
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -122,4 +130,36 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
         return orderDonWaybill;
     }
 
+    @Override
+    public void kickOutRelationId(long adminId, ClickOutReq req) {
+        Long orderId = req.getOrderId();
+        OrderDon orderDon = getById(orderId);
+        if (orderDon != null && !orderDon.getIsKickOut()) {
+            try {
+                UserRelationKickOutRecord kickOutRecord = new UserRelationKickOutRecord();
+                kickOutRecord.setUserId(orderDon.getUserId());
+                kickOutRecord.setRelationId(orderDon.getRelationId());
+                kickOutRecord.setGoodsId(orderDon.getGoodsId());
+                kickOutRecord.setSkuId(orderDon.getSkuId());
+
+
+                kickOutRecord.setReason(req.getReason());
+                kickOutRecord.setImg(req.getImg());
+                kickOutRecord.setRemark(req.getRemark());
+                kickOutRecord.setOrderId(orderDon.getId());
+                kickOutRecord.setOrderNo(orderDon.getOrderNo());
+                Optional.ofNullable(cmsUserMapper.selectById(adminId)).ifPresent(cmsUser -> kickOutRecord.setOperator(cmsUser.getNickname()));
+                kickOutRecordMapper.insert(kickOutRecord);
+
+                orderDon.setIsKickOut(true);
+                updateById(orderDon);
+                GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
+                GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(orderDon.getSkuId());
+                //清除车票
+                orderCommonService.clearUnrealGoodsDetail(orderDon, goodsDon.getType(), goodsDonSku.getMonths());
+            } catch (DuplicateKeyException e) {
+
+            }
+        }
+    }
 }

+ 22 - 0
netflix-service/src/main/java/com/cyksj/service/order/OrderCommonService.java

@@ -0,0 +1,22 @@
+package com.cyksj.service.order;
+
+import com.cyksj.model.entity.OrderDon;
+
+/*
+ *项目名: netflix
+ *文件名: OrderCommonService
+ *创建者: JavaZou
+ *创建时间:2023/5/22 14:47
+ */
+public interface OrderCommonService {
+	/**
+	 * 虚物订单退款,清出车队,车票变成已过期
+	 */
+	void clearUnrealGoodsDetail(OrderDon orderDon, Integer goodsType, Integer months);
+
+
+	/**
+	 * 清除座位缓存,可用座位数增加
+	 */
+	void delRelation(Long relationId);
+}

+ 136 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderCommonServiceImpl.java

@@ -0,0 +1,136 @@
+package com.cyksj.service.order.impl;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.constant.Constant;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.dto.RedisKey;
+import com.cyksj.mapper.*;
+import com.cyksj.model.entity.*;
+import com.cyksj.redis.RedisService;
+import com.cyksj.service.order.OrderCommonService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+
+/*
+ *项目名: netflix
+ *文件名: OrderCommonServiceImpl
+ *创建者: JavaZou
+ *创建时间:2023/5/22 14:48
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class OrderCommonServiceImpl implements OrderCommonService {
+
+	private final GroupsRelationMapper groupsRelationMapper;
+
+	private final UserRenewChangeTicketRecordMapper userRenewChangeTicketRecordMapper;
+
+	private final OrderDonMapper orderDonMapper;
+
+	private final GoodsDonSkuMapper goodsDonSkuMapper;
+
+	private final GroupsMapper groupsMapper;
+
+	private final RedisService redisService;
+
+	@Override
+	public void clearUnrealGoodsDetail(OrderDon orderDon, Integer goodsType, Integer months) {
+		if (goodsType == 1) {
+			//清出车队,车位变为已过期
+			Long relationId = orderDon.getRelationId();
+			//更换车票前后的座位id集合
+			List<Long> relationIds = new ArrayList<>();
+			relationIds.add(relationId);
+			Integer num = orderDon.getNum();
+			DateTime now = DateTime.now();
+			GroupsRelation relation = groupsRelationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class)
+					.eq(GroupsRelation::getUserId, orderDon.getUserId())
+					.eq(GroupsRelation::getId, relationId)
+					.eq(GroupsRelation::getStatus, GroupsRelation.Status.validity));
+			//车票变更之后
+			if (relation == null || orderDon.getIsChangeTicket()) {
+				UserRenewChangeTicketRecord record = userRenewChangeTicketRecordMapper.selectOne(Wrappers.lambdaQuery(UserRenewChangeTicketRecord.class)
+						.eq(UserRenewChangeTicketRecord::getUserId, orderDon.getUserId())
+						.eq(UserRenewChangeTicketRecord::getPreRelationId, relationId)
+						.orderByDesc(UserRenewChangeTicketRecord::getId).last("limit 1"));
+				if (record != null && relationId.equals(record.getPreRelationId())) {
+					relation = groupsRelationMapper.selectById(record.getAfterRelationId());
+					Optional.ofNullable(relation).ifPresent((re) -> relationIds.add(re.getId()));
+				}
+			}
+			if (relation != null) {
+				Boolean isFlag = true;
+				Date expiryTime = relation.getExpiryTime();
+				if (orderDon.getOrderType() == 2 || relationIds.size() > 1) {
+					//是否有其他付款订单是否过期
+					OrderDon otherOrder = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
+							.in(OrderDon::getRelationId, relationIds)
+							.eq(OrderDon::getUserId, orderDon.getUserId())
+							.ne(OrderDon::getId, orderDon.getId())
+							.notIn(OrderDon::getStatus, Constant.noOrderAllStatus)
+							.orderByDesc(OrderDon::getId)
+							.last("limit 1"));
+					if (otherOrder != null) {
+						Long otherSkuId = otherOrder.getSkuId();
+						GoodsDonSku otherGoodsSku = goodsDonSkuMapper.selectById(otherSkuId);
+						DateTime endTime = DateUtil.offsetMonth(otherOrder.getCreatedTime(), otherGoodsSku.getMonths() * num);
+						if (now.isBefore(endTime)) {
+							isFlag = false;
+						}
+					} else {
+						//续费更换后的座位 过期时间
+						if (expiryTime != null) {
+							DateTime refundExpiryTime = DateUtil.offsetMonth(expiryTime, -months * num);
+							if (now.isBefore(refundExpiryTime)) {
+								isFlag = false;
+							}
+						}
+					}
+				}
+				if (isFlag) {
+					relation.setUserId(0l);
+					relation.setStatus(GroupsRelation.Status.none);
+					if (expiryTime != null) {
+						relation.setStartTime(null);
+						relation.setExpiryTime(null);
+						relation.setIsHandle(false);
+						relation.setRenewStatus(false);
+						relation.setAccount(null);
+						groupsRelationMapper.updateExpiryTime(relation, expiryTime);
+					} else {
+						groupsRelationMapper.updateById(relation);
+					}
+					delRelation(relation.getId());
+				} else {
+					if (expiryTime != null) {
+						relation.setExpiryTime(DateUtil.offsetMonth(expiryTime, -months * num));
+						groupsRelationMapper.updateById(relation);
+					}
+				}
+				orderDon.setIsKickOut(true);
+				return;
+			}
+			throw BusinessRuntimeException.getInstance("车票已不存在");
+		}
+	}
+
+	@Override
+	public void delRelation(Long relationId) {
+		redisService.del(RedisKey.GROUPS_RELATION_NUM_KEY + relationId);
+		GroupsRelation relation = groupsRelationMapper.selectById(relationId);
+		int count = groupsMapper.incrAvailableNum(relation.getGroupsId());
+		if (count == 0) {
+			log.error("车位异常 groupId:{}", relation.getGroupsId());
+			throw new BusinessRuntimeException("车位异常");
+		}
+	}
+}

+ 18 - 100
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -70,6 +70,7 @@ import com.cyksj.service.exchange.ExchangeCodeService;
 import com.cyksj.service.mange.stock.GoodsDonStockService;
 import com.cyksj.service.market.MarketFrontService;
 import com.cyksj.service.market.task.TaskService;
+import com.cyksj.service.order.OrderCommonService;
 import com.cyksj.service.order.OrderDonService;
 import com.cyksj.service.order.UserRealOrderBenefitsService;
 import com.cyksj.service.relation.GroupRelationClearService;
@@ -203,6 +204,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final UserBindDetailMapper userBindDetailMapper;
 
+	private final OrderCommonService orderCommonService;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -623,7 +626,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 							groupsRelation.setUserId(0L);
 							groupsRelation.setStatus(GroupsRelation.Status.none);
 							groupsRelationMapper.updateById(groupsRelation);
-							delRelation(groupsRelation.getId());
+							orderCommonService.delRelation(groupsRelation.getId());
 
 							//车位空余发送模板消息
 //						TASK_POOL.execute(() -> {
@@ -966,20 +969,24 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		if (orderDon.getIsDistribute()) {
 			distributeWaitingSendPointsMapper.updateOrderStatus(orderDon.getId(), DistributeWaitingSendPoints.Status.close);
 		}
-		orderDonMapper.updateById(orderDon);
 		//记录退款信息
 		final String outNo = outRefundNo;
 		THREAD_POOL_TASK_EXECUTOR.execute(()->{
 			refundRecord(orderDon, goodsDon, sku, outNo);
 			goodsDonStockService.upStockRelate(null, orderDon.getId(),"refund");
 		});
-		//虚物订单退款,清出车队,车票变为已过期
-		clearUnrealGoodsDetail(orderDon, goodsDon, sku);
+		try {
+			//虚物订单退款,清出车队,车票变为已过期
+			orderCommonService.clearUnrealGoodsDetail(orderDon, goodsDon.getType(), sku.getMonths());
+		} catch (Exception e) {
+			log.error("清除车票错误:{}", StringUtil.getErrorText(e));
+		}
 		//若存在优惠券使用,退还优惠券
 		if (orderDon.getCouponUserId() != 0) {
 			redisService.set(String.format("%s-%s", orderDon.getId(), orderDon.getCouponUserId()), orderDon.getId(), 120l);
 			updateOrderDonCouponStatus(orderDon);
 		}
+		orderDonMapper.updateById(orderDon);
 		return GatewayResponse.SUCCESS.newBuilder().toResult("退款成功");
 	}
 
@@ -1047,7 +1054,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				distributeWaitingSendPointsMapper.updateOrderStatus(orderDon.getId(), DistributeWaitingSendPoints.Status.close);
 			}
 			orderDon.setRefundDesc(zfbOrderRefundReq.getRefundDesc());
-			orderDonMapper.updateById(orderDon);
 			//记录退款信息
 			THREAD_POOL_TASK_EXECUTOR.execute(()->{
 				refundRecord(orderDon, goodsDon, sku, outNo);
@@ -1063,100 +1069,22 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 					log.error("zfb减少抽奖机会错误,orderId:{},error:{}", orderDon.getId(), e);
 				}
 			});
-			//虚物订单退款,清出车队,车票变为已过期
-			clearUnrealGoodsDetail(orderDon, goodsDon, sku);
+			try {
+				//虚物订单退款,清出车队,车票变为已过期
+				orderCommonService.clearUnrealGoodsDetail(orderDon, goodsDon.getType(), sku.getMonths());
+			} catch (Exception e) {
+				log.error("清除车票错误:{}", StringUtil.getErrorText(e));
+			}
 			if (orderDon.getCouponUserId() != 0) {
 				//zfb订单退款,返还优惠券
 				updateOrderDonCouponStatus(orderDon);
 			}
+			orderDonMapper.updateById(orderDon);
 			return GatewayResponse.SUCCESS.newBuilder().toResult("退款成功");
 		}
 		throw BusinessRuntimeException.getInstance("退款失败,e:{0}", response.getSubMsg());
 	}
 
-	/**
-	 * 虚物订单退款,清出车队,车票变成已过期
-	 * @param orderDon
-	 * @param goodsDon
-	 */
-	private void clearUnrealGoodsDetail(OrderDon orderDon, GoodsDon goodsDon, GoodsDonSku sku) {
-		if (goodsDon != null && goodsDon.getType() == 1) {
-			//清出车队,车位变为已过期
-			Long relationId = orderDon.getRelationId();
-			//更换车票前后的座位id集合
-			List<Long> relationIds = new ArrayList<>();
-			relationIds.add(relationId);
-			Integer months = sku.getMonths();
-			Integer num = orderDon.getNum();
-			DateTime now = DateTime.now();
-			GroupsRelation relation = groupsRelationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class)
-					.eq(GroupsRelation::getUserId, orderDon.getUserId())
-					.eq(GroupsRelation::getId, relationId)
-					.eq(GroupsRelation::getStatus, GroupsRelation.Status.validity));
-			//车票变更之后
-			if (relation == null || orderDon.getIsChangeTicket()) {
-				UserRenewChangeTicketRecord record = userRenewChangeTicketRecordMapper.selectOne(Wrappers.lambdaQuery(UserRenewChangeTicketRecord.class)
-						.eq(UserRenewChangeTicketRecord::getUserId, orderDon.getUserId())
-						.eq(UserRenewChangeTicketRecord::getPreRelationId, relationId)
-						.orderByDesc(UserRenewChangeTicketRecord::getId).last("limit 1"));
-				if (record != null && relationId.equals(record.getPreRelationId())) {
-					relation = groupsRelationMapper.selectById(record.getAfterRelationId());
-					Optional.ofNullable(relation).ifPresent((re) -> relationIds.add(re.getId()));
-				}
-			}
-			if (relation != null) {
-				Boolean isFlag = true;
-				Date expiryTime = relation.getExpiryTime();
-				if (orderDon.getOrderType() == 2 || relationIds.size() > 1) {
-					//是否有其他付款订单是否过期
-					OrderDon otherOrder = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
-							.in(OrderDon::getRelationId, relationIds)
-							.eq(OrderDon::getUserId, orderDon.getUserId())
-							.ne(OrderDon::getId, orderDon.getId())
-							.notIn(OrderDon::getStatus, Constant.noOrderAllStatus)
-							.orderByDesc(OrderDon::getId)
-							.last("limit 1"));
-					if (otherOrder != null) {
-						Long otherSkuId = otherOrder.getSkuId();
-						GoodsDonSku otherGoodsSku = goodsDonSkuMapper.selectById(otherSkuId);
-						DateTime endTime = DateUtil.offsetMonth(otherOrder.getCreatedTime(), otherGoodsSku.getMonths() * num);
-						if (now.isBefore(endTime)) {
-							isFlag = false;
-						}
-					} else {
-						//续费更换后的座位 过期时间
-						if (expiryTime != null) {
-							DateTime refundExpiryTime = DateUtil.offsetMonth(expiryTime, -sku.getMonths() * num);
-							if (now.isBefore(refundExpiryTime)) {
-								isFlag = false;
-							}
-						}
-					}
-				}
-				if (isFlag) {
-					relation.setUserId(0l);
-					relation.setStatus(GroupsRelation.Status.none);
-					if (expiryTime != null) {
-						relation.setStartTime(null);
-						relation.setExpiryTime(null);
-						relation.setIsHandle(false);
-						relation.setRenewStatus(false);
-						relation.setAccount(null);
-						groupsRelationMapper.updateExpiryTime(relation, expiryTime);
-					} else {
-						groupsRelationMapper.updateById(relation);
-					}
-					delRelation(relation.getId());
-				} else {
-					if (expiryTime != null) {
-						relation.setExpiryTime(DateUtil.offsetMonth(expiryTime, -months * num));
-						groupsRelationMapper.updateById(relation);
-					}
-				}
-			}
-		}
-	}
-
 	/**
 	 * 校验订单是否符合退款操作
 	 * @param orderDon
@@ -1326,16 +1254,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 	}
 
-	public void delRelation(Long relationId) {
-		redisService.del(RedisKey.GROUPS_RELATION_NUM_KEY + relationId);
-		GroupsRelation relation = groupsRelationMapper.selectById(relationId);
-		int count = groupsMapper.incrAvailableNum(relation.getGroupsId());
-		if (count == 0) {
-			log.error("车位异常 groupId:{}", relation.getGroupsId());
-			throw new BusinessRuntimeException("车位异常");
-		}
-	}
-
 	@Override
 	public void saveTransport(Long addressId, Long orderId) {
 		if (addressId == null) {

+ 22 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsOrderController.java

@@ -1,6 +1,7 @@
 package com.cyksj.web.controller.manage;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -24,6 +25,7 @@ import com.cyksj.model.excel.ExcelRealGoodsUserInterestHasPaymentData;
 import com.cyksj.model.manage.request.ReqSetLogisticsPost;
 import com.cyksj.model.manage.views.AccountView;
 import com.cyksj.model.manage.views.OrderDonView;
+import com.cyksj.model.request.ClickOutReq;
 import com.cyksj.model.request.RealGoodsServiceReq;
 import com.cyksj.model.request.UserRealGoodsInterestReq;
 import com.cyksj.model.views.*;
@@ -387,4 +389,24 @@ public class CmsOrderController {
 		SearchResult<OrderCommentView> search = beanSearcher.search(OrderCommentView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
+
+	/**
+	 * 踢出车队
+	 */
+	@PutMapping("/kickOut")
+	@NoSubmit
+	public Result<String> kickOut(@RequestBody @Validated ClickOutReq req) {
+		long adminId = StpUtil.getLoginIdAsLong();
+		cmsOrderDonService.kickOutRelationId(adminId, req);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 踢出车队列表
+	 */
+	@GetMapping("/get/kickOut/list")
+	public Result<SearchResult<UserKickOutView>> getKickOutList() {
+		SearchResult<UserKickOutView> search = beanSearcher.search(UserKickOutView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
 }