|
|
@@ -1,5 +1,6 @@
|
|
|
package org.dromara.hotel.service.impl;
|
|
|
|
|
|
+import org.dromara.common.core.constant.HotelBusinessConstants;
|
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
@@ -9,12 +10,19 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import org.dromara.hotel.domain.KfGuest;
|
|
|
+import org.dromara.hotel.domain.KfGuestTeamR;
|
|
|
+import org.dromara.hotel.domain.bo.KfGuestBo;
|
|
|
+import org.dromara.hotel.mapper.KfGuestMapper;
|
|
|
+import org.dromara.hotel.mapper.KfGuestTeamRMapper;
|
|
|
+import org.dromara.hotel.service.IKfGuestService;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.dromara.hotel.domain.bo.KfTeamBo;
|
|
|
import org.dromara.hotel.domain.vo.KfTeamVo;
|
|
|
import org.dromara.hotel.domain.KfTeam;
|
|
|
import org.dromara.hotel.mapper.KfTeamMapper;
|
|
|
import org.dromara.hotel.service.IKfTeamService;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
@@ -32,6 +40,8 @@ import java.util.Collection;
|
|
|
public class KfTeamServiceImpl implements IKfTeamService {
|
|
|
|
|
|
private final KfTeamMapper baseMapper;
|
|
|
+ private final KfGuestMapper guestMapper;
|
|
|
+ private final KfGuestTeamRMapper relationMapper;
|
|
|
|
|
|
/**
|
|
|
* 查询客团信息
|
|
|
@@ -74,10 +84,11 @@ public class KfTeamServiceImpl implements IKfTeamService {
|
|
|
Map<String, Object> params = bo.getParams();
|
|
|
LambdaQueryWrapper<KfTeam> lqw = Wrappers.lambdaQuery();
|
|
|
lqw.like(StringUtils.isNotBlank(bo.getName()), KfTeam::getName, bo.getName());
|
|
|
- lqw.eq(bo.getStartTime() != null, KfTeam::getStartTime, bo.getStartTime());
|
|
|
- lqw.eq(bo.getEndTime() != null, KfTeam::getEndTime, bo.getEndTime());
|
|
|
+ lqw.between(params.get("beginStartTime") != null && params.get("endStartTime") != null,
|
|
|
+ KfTeam::getStartTime, params.get("beginStartTime"), params.get("endStartTime"));
|
|
|
lqw.eq(bo.getPlanQuantity() != null, KfTeam::getPlanQuantity, bo.getPlanQuantity());
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getOtherId()), KfTeam::getOtherId, bo.getOtherId());
|
|
|
+ lqw.orderByDesc(KfTeam::getStartTime);
|
|
|
return lqw;
|
|
|
}
|
|
|
|
|
|
@@ -102,12 +113,35 @@ public class KfTeamServiceImpl implements IKfTeamService {
|
|
|
* @return 是否新增成功
|
|
|
*/
|
|
|
@Override
|
|
|
+ @Transactional
|
|
|
public Boolean insertByBo(KfTeamBo bo) {
|
|
|
KfTeam add = MapstructUtils.convert(bo, KfTeam.class);
|
|
|
validEntityBeforeSave(add);
|
|
|
+ //1.新增客团信息
|
|
|
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 =
|
|
|
+ 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);
|
|
|
+ noIdList.stream().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);
|
|
|
+ }
|
|
|
}
|
|
|
return flag;
|
|
|
}
|
|
|
@@ -122,7 +156,35 @@ public class KfTeamServiceImpl implements IKfTeamService {
|
|
|
public Boolean updateByBo(KfTeamBo bo) {
|
|
|
KfTeam update = MapstructUtils.convert(bo, KfTeam.class);
|
|
|
validEntityBeforeSave(update);
|
|
|
- return baseMapper.updateById(update) > 0;
|
|
|
+ //1.修改客团信息
|
|
|
+ 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.处理新的客人
|
|
|
+ if(newGuests.size() > 0){
|
|
|
+ List<Long> guestIdList =
|
|
|
+ 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.stream().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);
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
}
|
|
|
|
|
|
/**
|