会议
This commit is contained in:
1 parent
6814d5aaaf
commit
33660e460a
5 files changed
+318
-3
No files matched your search
+73
@@ -0,0 +1,73 @@
|
||||
package com.bsd.pjcloud.integrated.vo.meeting.app;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class MeetingRoomPageVo {
|
||||
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@Schema(description="id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 会议室名称
|
||||
*/
|
||||
@Schema(description="会议室名称")
|
||||
private String roomName;
|
||||
|
||||
/**
|
||||
* 图片
|
||||
*/
|
||||
@Schema(description="图片")
|
||||
private String picUrl;
|
||||
|
||||
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
@Schema(description="描述")
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* 状态(0=维护中 1=可用)
|
||||
*/
|
||||
@Schema(description="状态(0=维护中 1=可用)")
|
||||
private String status;
|
||||
|
||||
|
||||
/**
|
||||
* 默认管理员
|
||||
*/
|
||||
@Schema(description="默认管理员")
|
||||
private Long adminId;
|
||||
|
||||
/**
|
||||
* 位置
|
||||
*/
|
||||
@Schema(description="位置")
|
||||
private String location;
|
||||
|
||||
/**
|
||||
* 容纳人数
|
||||
*/
|
||||
@Schema(description="容纳人数")
|
||||
private Integer capacity;
|
||||
|
||||
/**
|
||||
* 可用时间段
|
||||
*/
|
||||
@Schema(description="可用时间段")
|
||||
private String availableTime;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
+25
-3
@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.common.log.annotation.SysLog;
|
||||
import com.bsd.pjcloud.common.security.util.SecurityUtils;
|
||||
@@ -12,6 +13,7 @@ import com.bsd.pjcloud.integrated.entity.MeetingRoomEntity;
|
||||
import com.bsd.pjcloud.integrated.entity.MeetingRoomEquipmentEntity;
|
||||
import com.bsd.pjcloud.integrated.service.MeetingRoomEquipmentService;
|
||||
import com.bsd.pjcloud.integrated.service.MeetingRoomService;
|
||||
import com.bsd.pjcloud.integrated.vo.meeting.app.MeetingRoomPageVo;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
@@ -67,7 +69,7 @@ public class MeetingRoomController {
|
||||
@GetMapping("/{id}" )
|
||||
@PreAuthorize("@pms.hasPermission('integrated_meetingRoom_view')" )
|
||||
public R getById(@PathVariable("id" ) Long id) {
|
||||
return R.ok(meetingRoomService.getById(id));
|
||||
return R.ok(meetingRoomService.getDetialById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -103,7 +105,7 @@ public class MeetingRoomController {
|
||||
@PutMapping
|
||||
@PreAuthorize("@pms.hasPermission('integrated_meetingRoom_edit')" )
|
||||
public R updateById(@RequestBody MeetingRoomEntity meetingRoom) {
|
||||
return R.ok(meetingRoomService.updateById(meetingRoom));
|
||||
return R.ok(meetingRoomService.updateMeetingRoom(meetingRoom));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -115,8 +117,14 @@ public class MeetingRoomController {
|
||||
@SysLog("通过id删除会议室信息表" )
|
||||
@DeleteMapping
|
||||
@PreAuthorize("@pms.hasPermission('integrated_meetingRoom_del')" )
|
||||
@Transactional
|
||||
public R removeById(@RequestBody Long[] ids) {
|
||||
return R.ok(meetingRoomService.removeBatchByIds(CollUtil.toList(ids)));
|
||||
boolean b = meetingRoomService.removeBatchByIds(CollUtil.toList(ids));
|
||||
|
||||
LambdaQueryWrapper<MeetingRoomEquipmentEntity> meetingRoomEquipmentEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
meetingRoomEquipmentEntityLambdaQueryWrapper.in(MeetingRoomEquipmentEntity::getRoomId, ids);
|
||||
meetingRoomEquipmentService.remove(meetingRoomEquipmentEntityLambdaQueryWrapper);
|
||||
return R.ok(b);
|
||||
}
|
||||
|
||||
|
||||
@@ -132,4 +140,18 @@ public class MeetingRoomController {
|
||||
public List<MeetingRoomEntity> export(MeetingRoomEntity meetingRoom,Long[] ids) {
|
||||
return meetingRoomService.list(Wrappers.lambdaQuery(meetingRoom).in(ArrayUtil.isNotEmpty(ids), MeetingRoomEntity::getId, ids));
|
||||
}
|
||||
|
||||
|
||||
/**---------------------------APP------------------------------*/
|
||||
@GetMapping("/app/list")
|
||||
public R<Page<MeetingRoomPageVo>> appList(@ParameterObject Page page, @ParameterObject MeetingRoomEntity meetingRoom) {
|
||||
LambdaQueryWrapper<MeetingRoomEntity> meetingRoomEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
meetingRoomEntityLambdaQueryWrapper.eq(MeetingRoomEntity::getStatus, YesNoEnum.YES.getCode());
|
||||
meetingRoomEntityLambdaQueryWrapper.orderByDesc(MeetingRoomEntity::getSort).orderByDesc(MeetingRoomEntity::getId);
|
||||
|
||||
Page<MeetingRoomPageVo> pageData = meetingRoomService.MeetingRoomPageScope(page, meetingRoomEntityLambdaQueryWrapper);
|
||||
|
||||
|
||||
return R.ok(pageData);
|
||||
}
|
||||
}
|
||||
+6
@@ -88,4 +88,10 @@ public class MeetingRoomEquipmentEntity extends Model<MeetingRoomEquipmentEntity
|
||||
*/
|
||||
@Schema(description="租户编号")
|
||||
private Long tenantId;
|
||||
|
||||
|
||||
|
||||
@TableField(exist = false)
|
||||
@Schema(description="设备名称")
|
||||
private String equipmentName;
|
||||
}
|
||||
+20
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.bsd.pjcloud.integrated.entity.MeetingRoomEntity;
|
||||
import com.bsd.pjcloud.integrated.vo.meeting.app.MeetingRoomPageVo;
|
||||
|
||||
public interface MeetingRoomService extends IService<MeetingRoomEntity> {
|
||||
|
||||
@@ -15,4 +16,23 @@ public interface MeetingRoomService extends IService<MeetingRoomEntity> {
|
||||
* @return
|
||||
*/
|
||||
Object pageScope(Page page, LambdaQueryWrapper<MeetingRoomEntity> wrapper);
|
||||
|
||||
|
||||
/**
|
||||
* 详情
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
Object getDetialById(Long id);
|
||||
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
* @param meetingRoom
|
||||
* @return
|
||||
*/
|
||||
Object updateMeetingRoom(MeetingRoomEntity meetingRoom);
|
||||
|
||||
|
||||
Page<MeetingRoomPageVo> MeetingRoomPageScope(Page page, LambdaQueryWrapper<MeetingRoomEntity> meetingRoomEntityLambdaQueryWrapper);
|
||||
}
|
||||
+194
@@ -4,10 +4,26 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.bsd.pjcloud.common.data.datascope.DataScope;
|
||||
import com.bsd.pjcloud.integrated.entity.MeetingEquipmentEntity;
|
||||
import com.bsd.pjcloud.integrated.entity.MeetingRoomEntity;
|
||||
import com.bsd.pjcloud.integrated.entity.MeetingRoomEquipmentEntity;
|
||||
import com.bsd.pjcloud.integrated.mapper.MeetingEquipmentMapper;
|
||||
import com.bsd.pjcloud.integrated.mapper.MeetingRoomEquipmentMapper;
|
||||
import com.bsd.pjcloud.integrated.mapper.MeetingRoomMapper;
|
||||
import com.bsd.pjcloud.integrated.service.MeetingRoomService;
|
||||
import com.bsd.pjcloud.integrated.vo.meeting.app.MeetingRoomPageVo;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 会议室信息表
|
||||
*
|
||||
@@ -15,9 +31,187 @@ import org.springframework.stereotype.Service;
|
||||
* @date 2025-03-24 16:00:41
|
||||
*/
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class MeetingRoomServiceImpl extends ServiceImpl<MeetingRoomMapper, MeetingRoomEntity> implements MeetingRoomService {
|
||||
|
||||
private final MeetingRoomEquipmentMapper meetingRoomEquipmentMapper;
|
||||
private final MeetingEquipmentMapper meetingEquipmentMapper;
|
||||
|
||||
@Override
|
||||
public Object pageScope(Page page, LambdaQueryWrapper<MeetingRoomEntity> wrapper) {
|
||||
return baseMapper.selectPageByScope(page, wrapper, DataScope.of());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getDetialById(Long id) {
|
||||
MeetingRoomEntity meetingRoomEntity = baseMapper.selectById(id);
|
||||
|
||||
LambdaQueryWrapper<MeetingRoomEquipmentEntity> meetingRoomEquipmentEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
meetingRoomEquipmentEntityLambdaQueryWrapper.eq(MeetingRoomEquipmentEntity::getRoomId, id);
|
||||
List<MeetingRoomEquipmentEntity> meetingRoomEquipmentEntities = meetingRoomEquipmentMapper.selectList(meetingRoomEquipmentEntityLambdaQueryWrapper);
|
||||
if (!CollectionUtils.isEmpty(meetingRoomEquipmentEntities)){
|
||||
List<Long> equipmentIds = meetingRoomEquipmentEntities.stream().map(meetingRoomEquipmentEntity -> meetingRoomEquipmentEntity.getEquipId()).collect(Collectors.toList());
|
||||
List<MeetingEquipmentEntity> meetingEquipmentEntities = meetingEquipmentMapper.selectByIds(equipmentIds);
|
||||
// 1. 转换为ID为key的Map
|
||||
Map<Long, MeetingEquipmentEntity> equipmentMap = meetingEquipmentEntities.stream()
|
||||
.collect(Collectors.toMap(
|
||||
MeetingEquipmentEntity::getId,
|
||||
equipment -> equipment,
|
||||
(existing, replacement) -> existing));
|
||||
// 2. 循环设置关联设备对象
|
||||
meetingRoomEquipmentEntities.forEach(roomEquip -> {
|
||||
MeetingEquipmentEntity equipment = equipmentMap.get(roomEquip.getEquipId());
|
||||
if (equipment != null) {
|
||||
roomEquip.setEquipmentName(equipment.getName()); // 设置关联的设备对象
|
||||
}
|
||||
});
|
||||
}
|
||||
meetingRoomEntity.setEquipmentList(meetingRoomEquipmentEntities);
|
||||
return meetingRoomEntity;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Object updateMeetingRoom(MeetingRoomEntity meetingRoom) {
|
||||
// 1. 更新会议室基本信息
|
||||
baseMapper.updateById(meetingRoom);
|
||||
|
||||
// 2. 处理设备关联变更
|
||||
Long roomId = meetingRoom.getId();
|
||||
List<MeetingRoomEquipmentEntity> newEquipments = meetingRoom.getEquipmentList();
|
||||
|
||||
// 2.1 查询现有设备关联(包含主键id)
|
||||
LambdaQueryWrapper<MeetingRoomEquipmentEntity> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(MeetingRoomEquipmentEntity::getRoomId, roomId);
|
||||
List<MeetingRoomEquipmentEntity> existingEquipments = meetingRoomEquipmentMapper.selectList(queryWrapper);
|
||||
|
||||
// 2.2 构建新旧设备ID映射(包含主键用于更新)
|
||||
Map<Long, MeetingRoomEquipmentEntity> existingMap = existingEquipments.stream()
|
||||
.collect(Collectors.toMap(MeetingRoomEquipmentEntity::getEquipId, e -> e));
|
||||
|
||||
Map<Long, MeetingRoomEquipmentEntity> newMap = newEquipments.stream()
|
||||
.collect(Collectors.toMap(MeetingRoomEquipmentEntity::getEquipId, e -> e));
|
||||
|
||||
// 2.3 需要删除的设备(存在旧列表但不存在新列表)
|
||||
List<Long> toRemoveIds = existingEquipments.stream()
|
||||
.filter(e -> !newMap.containsKey(e.getEquipId()))
|
||||
.map(MeetingRoomEquipmentEntity::getEquipId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 2.4 需要新增的设备(存在新列表但不存在旧列表)
|
||||
List<MeetingRoomEquipmentEntity> toAdd = newEquipments.stream()
|
||||
.filter(e -> !existingMap.containsKey(e.getEquipId()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 2.5 需要更新的设备(同时存在于新旧列表)
|
||||
List<MeetingRoomEquipmentEntity> toUpdate = newEquipments.stream()
|
||||
.filter(e -> existingMap.containsKey(e.getEquipId()))
|
||||
.map(e -> {
|
||||
// 继承原有主键ID
|
||||
MeetingRoomEquipmentEntity existing = existingMap.get(e.getEquipId());
|
||||
e.setId(existing.getId());
|
||||
return e;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 3. 执行数据库操作
|
||||
if (!toRemoveIds.isEmpty()) {
|
||||
LambdaQueryWrapper<MeetingRoomEquipmentEntity> deleteWrapper = new LambdaQueryWrapper<>();
|
||||
deleteWrapper.eq(MeetingRoomEquipmentEntity::getRoomId, roomId)
|
||||
.in(MeetingRoomEquipmentEntity::getEquipId, toRemoveIds);
|
||||
meetingRoomEquipmentMapper.delete(deleteWrapper);
|
||||
}
|
||||
|
||||
if (!toAdd.isEmpty()) {
|
||||
toAdd.forEach(equip -> {
|
||||
equip.setRoomId(roomId);
|
||||
equip.setTenantId(meetingRoom.getTenantId());
|
||||
meetingRoomEquipmentMapper.insert(equip); // 新增操作
|
||||
});
|
||||
}
|
||||
|
||||
if (!toUpdate.isEmpty()) {
|
||||
toUpdate.forEach(equip -> {
|
||||
equip.setRoomId(roomId);
|
||||
equip.setTenantId(meetingRoom.getTenantId());
|
||||
meetingRoomEquipmentMapper.updateById(equip); // 更新操作
|
||||
});
|
||||
}
|
||||
|
||||
return meetingRoom;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<MeetingRoomPageVo> MeetingRoomPageScope(Page page, LambdaQueryWrapper<MeetingRoomEntity> meetingRoomEntityLambdaQueryWrapper) {
|
||||
|
||||
// 1. 执行原始分页查询
|
||||
Page<MeetingRoomEntity> entityPage = baseMapper.selectPage(page, meetingRoomEntityLambdaQueryWrapper);
|
||||
|
||||
// 2. 转换为VO分页对象(保留分页信息)
|
||||
Page<MeetingRoomPageVo> voPage = new Page<>();
|
||||
BeanUtils.copyProperties(entityPage, voPage, "records"); // 复制分页参数
|
||||
|
||||
// 3. 处理设备关联数据(批量查询优化)
|
||||
List<Long> roomIds = entityPage.getRecords().stream()
|
||||
.map(MeetingRoomEntity::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 3.1 批量查询设备关联信息
|
||||
// Map<Long, List<MeetingRoomEquipmentEntity>> equipmentMap = getRoomEquipmentMap(roomIds);
|
||||
|
||||
// 4. 转换记录列表
|
||||
List<MeetingRoomPageVo> voRecords = entityPage.getRecords().stream().map(entity -> {
|
||||
MeetingRoomPageVo vo = new MeetingRoomPageVo();
|
||||
// 4.1 基础字段拷贝
|
||||
BeanUtils.copyProperties(entity, vo);
|
||||
|
||||
// 4.2 设置设备信息
|
||||
// List<MeetingRoomEquipmentEntity> equipments = equipmentMap.get(entity.getId());
|
||||
// if (!CollectionUtils.isEmpty(equipments)) {
|
||||
// vo.setEquipmentNames(equipments.stream()
|
||||
// .map(MeetingRoomEquipmentEntity::getEquipmentName)
|
||||
// .collect(Collectors.toList()));
|
||||
// }
|
||||
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
voPage.setRecords(voRecords);
|
||||
return voPage;
|
||||
}
|
||||
/**
|
||||
* 批量获取会议室设备关联信息
|
||||
*/
|
||||
private Map<Long, List<MeetingRoomEquipmentEntity>> getRoomEquipmentMap(List<Long> roomIds) {
|
||||
if (CollectionUtils.isEmpty(roomIds)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
// 1. 查询设备关联记录
|
||||
LambdaQueryWrapper<MeetingRoomEquipmentEntity> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.in(MeetingRoomEquipmentEntity::getRoomId, roomIds);
|
||||
List<MeetingRoomEquipmentEntity> equipmentList = meetingRoomEquipmentMapper.selectList(queryWrapper);
|
||||
|
||||
// 2. 查询设备详细信息
|
||||
List<Long> equipIds = equipmentList.stream()
|
||||
.map(MeetingRoomEquipmentEntity::getEquipId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Map<Long, MeetingEquipmentEntity> equipmentInfoMap = meetingEquipmentMapper.selectBatchIds(equipIds)
|
||||
.stream()
|
||||
.collect(Collectors.toMap(MeetingEquipmentEntity::getId, e -> e));
|
||||
|
||||
// 3. 填充设备名称
|
||||
equipmentList.forEach(equip -> {
|
||||
MeetingEquipmentEntity info = equipmentInfoMap.get(equip.getEquipId());
|
||||
if (info != null) {
|
||||
equip.setEquipmentName(info.getName());
|
||||
}
|
||||
});
|
||||
|
||||
// 4. 按会议室ID分组
|
||||
return equipmentList.stream()
|
||||
.collect(Collectors.groupingBy(MeetingRoomEquipmentEntity::getRoomId));
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user