|
|
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
import org.dromara.backstage.api.RemotePtRoomService;
|
|
|
import org.dromara.common.core.config.DefaultConfig;
|
|
|
@@ -43,6 +44,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.LinkedBlockingQueue;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 散客入住Service业务层处理
|
|
|
@@ -52,6 +54,7 @@ import java.util.concurrent.LinkedBlockingQueue;
|
|
|
*/
|
|
|
@RequiredArgsConstructor
|
|
|
@Service
|
|
|
+@Slf4j
|
|
|
public class KfOrderServiceImpl implements IKfOrderService {
|
|
|
@DubboReference
|
|
|
private final RemotePtRoomService roomService;
|
|
|
@@ -237,7 +240,7 @@ public class KfOrderServiceImpl implements IKfOrderService {
|
|
|
for (int i = 0; i < orders.size(); i++) {
|
|
|
orders.get(i).setOrderStatus(HotelBusinessConstants.ORDER_STATUS_SF);
|
|
|
orders.get(i).setOrderType(HotelBusinessConstants.ORDER_TYPE_TK);
|
|
|
- orders.get(i).setOrderIndex(i);
|
|
|
+ orders.get(i).setOrderIndex(i+1);
|
|
|
}
|
|
|
// 根据teamId 删除历史锁房
|
|
|
baseMapper.delete(new LambdaQueryWrapper<KfOrder>()
|
|
|
@@ -455,15 +458,53 @@ public class KfOrderServiceImpl implements IKfOrderService {
|
|
|
*/
|
|
|
@Override
|
|
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
|
|
- if (isValid) {
|
|
|
- // TODO 做一些业务上的校验,判断是否需要校验
|
|
|
+ if (ids == null || ids.isEmpty()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 1. 根据id查询要解锁的订单列表
|
|
|
+ List<KfOrderVo> delOrders = baseMapper.selectVoList(
|
|
|
+ Wrappers.lambdaQuery(KfOrder.class)
|
|
|
+ .select(KfOrder::getRoomCode, KfOrder::getTeamId)
|
|
|
+ .in(KfOrder::getId, ids));
|
|
|
+
|
|
|
+ if (delOrders.isEmpty()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 批量删除要解锁的订单
|
|
|
+ int count = baseMapper.deleteByIds(ids);
|
|
|
+
|
|
|
+ // 3. 批量修改房间状态
|
|
|
+ List<String> roomCodes = delOrders.stream().map(KfOrderVo::getRoomCode).toList();
|
|
|
+ baseMapper.updateRoomStatusBatch(roomCodes, HotelBusinessConstants.ROOM_STATUS_OK);
|
|
|
+ // 4. 重设锁房缓存
|
|
|
+ if (count > 0) {
|
|
|
+ Long teamId = delOrders.get(0).getTeamId();
|
|
|
+ RedisUtils.deleteObject(CacheNames.CLASS_ROOM + "_" + teamId);
|
|
|
+ // 获取当前团队的所有房间代码
|
|
|
+ Set<String> allRoomCodes = new HashSet<>();
|
|
|
+ allRoomCodes.addAll(
|
|
|
+ baseMapper.selectVoList(
|
|
|
+ Wrappers.lambdaQuery(KfOrder.class)
|
|
|
+ .select(KfOrder::getRoomCode)
|
|
|
+ .eq(KfOrder::getTeamId, teamId)
|
|
|
+ .eq(KfOrder::getOrderStatus, HotelBusinessConstants.ORDER_STATUS_SF))
|
|
|
+ .stream()
|
|
|
+ .map(KfOrderVo::getRoomCode)
|
|
|
+ .collect(Collectors.toSet())
|
|
|
+ );
|
|
|
+
|
|
|
+ RedisUtils.setCacheObject(CacheNames.CLASS_ROOM + "_" + teamId, allRoomCodes);
|
|
|
+ }
|
|
|
+
|
|
|
+ return count > 0;
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 记录异常日志
|
|
|
+ log.error("解锁房间失败", e);
|
|
|
+ return false;
|
|
|
}
|
|
|
- int count = 0;
|
|
|
- List<KfOrderVo> vo =
|
|
|
- baseMapper.selectVoList(Wrappers.lambdaQuery(KfOrder.class).select(KfOrder::getRoomCode).in(KfOrder::getId, ids));
|
|
|
- count = baseMapper.deleteByIds(ids);
|
|
|
- baseMapper.updateRoomStatusBatch(vo.stream().map(KfOrderVo::getRoomCode).toList() , HotelBusinessConstants.ROOM_STATUS_OK);
|
|
|
- return count > 0;
|
|
|
}
|
|
|
|
|
|
/**
|