|
@@ -1,5 +1,7 @@
|
|
|
package org.dromara.hotel.service.impl;
|
|
package org.dromara.hotel.service.impl;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
@@ -7,6 +9,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.dromara.common.core.constant.HotelBusinessConstants;
|
|
import org.dromara.common.core.constant.HotelBusinessConstants;
|
|
|
|
|
+import org.dromara.common.core.domain.R;
|
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
@@ -15,11 +18,14 @@ import org.dromara.hotel.domain.KfGuest;
|
|
|
import org.dromara.hotel.domain.KfGuestTeamR;
|
|
import org.dromara.hotel.domain.KfGuestTeamR;
|
|
|
import org.dromara.hotel.domain.KfTeam;
|
|
import org.dromara.hotel.domain.KfTeam;
|
|
|
import org.dromara.hotel.domain.bo.KfGuestBo;
|
|
import org.dromara.hotel.domain.bo.KfGuestBo;
|
|
|
|
|
+import org.dromara.hotel.domain.bo.KfGuestTeamRBo;
|
|
|
import org.dromara.hotel.domain.bo.KfTeamBo;
|
|
import org.dromara.hotel.domain.bo.KfTeamBo;
|
|
|
|
|
+import org.dromara.hotel.domain.vo.KfGuestTeamRVo;
|
|
|
import org.dromara.hotel.domain.vo.KfTeamVo;
|
|
import org.dromara.hotel.domain.vo.KfTeamVo;
|
|
|
import org.dromara.hotel.mapper.KfGuestMapper;
|
|
import org.dromara.hotel.mapper.KfGuestMapper;
|
|
|
import org.dromara.hotel.mapper.KfGuestTeamRMapper;
|
|
import org.dromara.hotel.mapper.KfGuestTeamRMapper;
|
|
|
import org.dromara.hotel.mapper.KfTeamMapper;
|
|
import org.dromara.hotel.mapper.KfTeamMapper;
|
|
|
|
|
+import org.dromara.hotel.service.IKfGuestService;
|
|
|
import org.dromara.hotel.service.IKfTeamService;
|
|
import org.dromara.hotel.service.IKfTeamService;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -28,6 +34,8 @@ import java.util.Collection;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 客团信息Service业务层处理
|
|
* 客团信息Service业务层处理
|
|
@@ -40,7 +48,8 @@ import java.util.Map;
|
|
|
public class KfTeamServiceImpl implements IKfTeamService {
|
|
public class KfTeamServiceImpl implements IKfTeamService {
|
|
|
|
|
|
|
|
private final KfTeamMapper baseMapper;
|
|
private final KfTeamMapper baseMapper;
|
|
|
- private final KfGuestMapper guestMapper;
|
|
|
|
|
|
|
+// private final KfGuestMapper guestMapper;
|
|
|
|
|
+ private final IKfGuestService guestService;
|
|
|
private final KfGuestTeamRMapper relationMapper;
|
|
private final KfGuestTeamRMapper relationMapper;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -119,29 +128,8 @@ public class KfTeamServiceImpl implements IKfTeamService {
|
|
|
validEntityBeforeSave(add);
|
|
validEntityBeforeSave(add);
|
|
|
//1.新增客团信息
|
|
//1.新增客团信息
|
|
|
boolean flag = baseMapper.insert(add) > 0;
|
|
boolean flag = baseMapper.insert(add) > 0;
|
|
|
- if (flag) {
|
|
|
|
|
- bo.setId(add.getId());
|
|
|
|
|
- //2.新增客人信息
|
|
|
|
|
- List<KfGuestBo> guestBoList = bo.getGuestList();
|
|
|
|
|
- if (guestBoList != null && guestBoList.size() > 0) {
|
|
|
|
|
- List<Long> guestIdList =
|
|
|
|
|
- new java.util.ArrayList<>(guestBoList.stream().filter(item -> item.getId() != null).map(item -> item.getId()).toList());
|
|
|
|
|
- List<KfGuestBo> noIdBoList = guestBoList.stream().filter(item -> item.getId() == null).toList();
|
|
|
|
|
- if (noIdBoList != null && noIdBoList.size() > 0) {
|
|
|
|
|
- Collection<KfGuest> noIdList = MapstructUtils.convert(noIdBoList, KfGuest.class);
|
|
|
|
|
- guestMapper.insertBatch(noIdList);
|
|
|
|
|
- guestIdList.addAll(noIdList.stream().map(KfGuest::getId).toList());
|
|
|
|
|
- }
|
|
|
|
|
- //3.新增客人客团关系
|
|
|
|
|
- List<KfGuestTeamR> relations = guestIdList.stream().map(item -> {
|
|
|
|
|
- KfGuestTeamR kfGuestTeamR = new KfGuestTeamR();
|
|
|
|
|
- kfGuestTeamR.setGuestId(item);
|
|
|
|
|
- kfGuestTeamR.setTeamId(bo.getId());
|
|
|
|
|
- kfGuestTeamR.setCheckInStatus(HotelBusinessConstants.NO);
|
|
|
|
|
- return kfGuestTeamR;
|
|
|
|
|
- }).toList();
|
|
|
|
|
- relationMapper.insertBatch(relations);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (flag && bo.getGuestList().size() > 0) {
|
|
|
|
|
+ addGuestTeamR(add.getId(), bo.getGuestList());
|
|
|
}
|
|
}
|
|
|
return flag;
|
|
return flag;
|
|
|
}
|
|
}
|
|
@@ -158,35 +146,56 @@ public class KfTeamServiceImpl implements IKfTeamService {
|
|
|
validEntityBeforeSave(update);
|
|
validEntityBeforeSave(update);
|
|
|
//1.修改客团信息
|
|
//1.修改客团信息
|
|
|
boolean flag = baseMapper.updateById(update) > 0;
|
|
boolean flag = baseMapper.updateById(update) > 0;
|
|
|
- //2.过滤已在该团的客人
|
|
|
|
|
- List<Long> dbGuestIds =
|
|
|
|
|
- relationMapper.selectObjs(Wrappers.lambdaQuery(KfGuestTeamR.class)
|
|
|
|
|
- .select(KfGuestTeamR::getGuestId).eq(KfGuestTeamR::getTeamId, bo.getId()));
|
|
|
|
|
- List<KfGuestBo> newGuests =
|
|
|
|
|
- bo.getGuestList().stream().filter(item -> !dbGuestIds.contains(item.getId())).toList();
|
|
|
|
|
- //3.处理新的客人
|
|
|
|
|
|
|
+ //2.更新客团成员
|
|
|
|
|
+ List<KfGuestTeamRBo> newGuests = bo.getGuestList();
|
|
|
if (newGuests.size() > 0) {
|
|
if (newGuests.size() > 0) {
|
|
|
- List<Long> guestIdList =
|
|
|
|
|
- new java.util.ArrayList<>(newGuests.stream().filter(item -> item.getId() != null).map(item -> item.getId()).toList());
|
|
|
|
|
- List<KfGuestBo> noIdBoList = newGuests.stream().filter(item -> item.getId() == null).toList();
|
|
|
|
|
- if (noIdBoList != null && noIdBoList.size() > 0) {
|
|
|
|
|
- Collection<KfGuest> noIdList = MapstructUtils.convert(noIdBoList, KfGuest.class);
|
|
|
|
|
- guestMapper.insertBatch(noIdList);
|
|
|
|
|
- noIdList.forEach(item -> guestIdList.add(item.getId()));
|
|
|
|
|
- }
|
|
|
|
|
- //3.新增客人客团关系
|
|
|
|
|
- List<KfGuestTeamR> relations = guestIdList.stream().map(item -> {
|
|
|
|
|
- KfGuestTeamR kfGuestTeamR = new KfGuestTeamR();
|
|
|
|
|
- kfGuestTeamR.setGuestId(item);
|
|
|
|
|
- kfGuestTeamR.setTeamId(bo.getId());
|
|
|
|
|
- kfGuestTeamR.setCheckInStatus(HotelBusinessConstants.NO);
|
|
|
|
|
- return kfGuestTeamR;
|
|
|
|
|
- }).toList();
|
|
|
|
|
- relationMapper.insertBatch(relations);
|
|
|
|
|
|
|
+ addGuestTeamR(update.getId(), newGuests);
|
|
|
}
|
|
}
|
|
|
return flag;
|
|
return flag;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /** 新增客团成员*/
|
|
|
|
|
+ private R<String> addGuestTeamR(Long teamId, List<KfGuestTeamRBo> boList){
|
|
|
|
|
+ //1.新增客人
|
|
|
|
|
+ List guestBoList = boList.stream().filter(item -> item.getGuestId() == null).toList();
|
|
|
|
|
+ List<KfGuest> guests = BeanUtil.copyToList(guestBoList, KfGuest.class);
|
|
|
|
|
+ //插入客人信息
|
|
|
|
|
+ R<String> result = guestService.insertBatch(guests);
|
|
|
|
|
+
|
|
|
|
|
+ //2.新增客人客团关系
|
|
|
|
|
+ //查询已经在该团的客人id
|
|
|
|
|
+ LambdaQueryWrapper warpper = new LambdaQueryWrapper<>(KfGuestTeamR.class)
|
|
|
|
|
+ .select(KfGuestTeamR::getGuestId)
|
|
|
|
|
+ .eq(KfGuestTeamR::getTeamId, teamId);
|
|
|
|
|
+ List<KfGuestTeamRVo> existsGuestList = relationMapper.selectVoList(warpper);
|
|
|
|
|
+ //从请求参数的人员列表中过滤出老的客人id集合
|
|
|
|
|
+ List<Long> oldGuestIdList =
|
|
|
|
|
+ boList.stream()
|
|
|
|
|
+ .filter(item -> item.getGuestId() != null)
|
|
|
|
|
+ .map(item -> item.getGuestId()).collect(Collectors.toList());
|
|
|
|
|
+ //删除掉已经在该客团中的客人ID,避免一个人添加多次
|
|
|
|
|
+ if(ObjectUtil.isNotEmpty(existsGuestList)){
|
|
|
|
|
+ List<Long> existsGuestIds = existsGuestList.stream().map(item -> item.getGuestId()).toList();
|
|
|
|
|
+ oldGuestIdList.removeAll(existsGuestIds);
|
|
|
|
|
+ }
|
|
|
|
|
+ //获得本次新增的客人id集合
|
|
|
|
|
+ List<Long> newGuestIdList = guests.stream().map(KfGuest::getId).toList();
|
|
|
|
|
+ //合并两个list
|
|
|
|
|
+ List<Long> allGuestIdList = Stream.concat(oldGuestIdList.stream(), newGuestIdList.stream()).toList();
|
|
|
|
|
+ List<KfGuestTeamR> relations = initGuestTeamRList(teamId, allGuestIdList);
|
|
|
|
|
+ relationMapper.insertBatch(relations);
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private List<KfGuestTeamR> initGuestTeamRList(Long teamId, List<Long> guestIds) {
|
|
|
|
|
+ return guestIds.stream().map(item -> {
|
|
|
|
|
+ KfGuestTeamR kfGuestTeamR = new KfGuestTeamR();
|
|
|
|
|
+ kfGuestTeamR.setGuestId(item);
|
|
|
|
|
+ kfGuestTeamR.setTeamId(teamId);
|
|
|
|
|
+ kfGuestTeamR.setCheckInStatus(HotelBusinessConstants.NO);
|
|
|
|
|
+ return kfGuestTeamR;
|
|
|
|
|
+ }).toList();
|
|
|
|
|
+ }
|
|
|
/**
|
|
/**
|
|
|
* 保存前的数据校验
|
|
* 保存前的数据校验
|
|
|
*/
|
|
*/
|