This commit is contained in:
dzc committed 2025-09-29 09:10:37 +08:00
commit a50a4a6a60
4 files changed
+326 -5

No files matched your search

@@ -0,0 +1,205 @@
package com.bsd.pjcloud.integrated.vo.visitor;
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsCarAppDTO;
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsPeopleAppDTO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 访客表分页查询VO
*
* @author zjf
* @date 2025-04-09 15:22:47
*/
@Data
@Schema(description = "访客表分页查询VO")
public class VisitorsPageVo {
@Schema(description="id")
private Long id;
/**
* 姓名
*/
@Schema(description="姓名")
private String name;
/**
* 手机号
*/
@Schema(description="手机号")
private String mobile;
/**
* 身份证号
*/
@Schema(description="身份证号")
private String idCard;
/**
* 描述
*/
@Schema(description="拜访原因")
private String reasonValue;
/**
* 审核状态
*/
@Schema(description="审核状态")
private String checkStatus;
/**
* 到访单位ID
*/
@Schema(description="到访单位ID")
private Long deptId;
/**
* 到访单位名称
*/
@Schema(description="到访单位名称")
private String deptName;
/**
* 接待人
*/
@Schema(description="拜访人")
private String userName;
/**
* 车牌号id
*/
@Schema(description="车牌号id")
private Long carId;
/**
* 公司名称
*/
@Schema(description="公司名称")
private String companyName;
/**
* 随行人员数量
*/
@Schema(description="随行人员数量")
private Integer peopleNumber;
/**
* 到访时间
*/
@Schema(description="到访时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime vStartDate;
/**
* 到访时间
*/
@Schema(description="到访时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime vEndDate;
/**
* 是否驾驶车辆0 否 1是
*/
@Schema(description="是否驾驶车辆0 否 1是")
private String isDrive;
/**
* 流程id
*/
@Schema(description="流程id")
private String processInstanceId;
/**
* 审核原因
*/
@Schema(description="审核原因")
private String checkReason;
/**
* 创建者
*/
@Schema(description="创建者")
private String createBy;
/**
* 创建时间
*/
@Schema(description="创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
/**
* 更新者
*/
@Schema(description="更新者")
private String updateBy;
/**
* 更新时间
*/
@Schema(description="更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime updateTime;
/**
* 是否删除
*/
@Schema(description="是否删除")
private String delFlag;
/**
* 租户编号
*/
@Schema(description="租户编号")
private Long tenantId;
@Schema(description="token")
private String token;
@Schema(description="1 主动申请,2邀约,3 后台创建")
private String type;
@Schema(description="用户id")
private Long userId;
@Schema(description="接待人id")
private Long receiveId;
@Schema(description="是否随行人员")
private String isOtherPeople;
@Schema(description="访客记录唯一标识,用于已预约登记、访客签离等操作")
private String orderId;
@Schema(description="预约记录ID,可作为修改、取消预约的依据")
private String appointRecordId;
@Schema(description="二维码")
private String qrcode;
@Schema(description="验证码")
private String verificationCode;
@Schema(description="邀约id")
private Long yyId;
@Schema(description="访客用户id")
private Long visitorUserId;
/**
* 车牌号集合
*/
@Schema(description="车牌号集合")
private List<VisitorsCarAppDTO> carList;
/**
* 随行人员集合
*/
@Schema(description="随行人员集合")
private List<VisitorsPeopleAppDTO> otherPeople;
}
@@ -17,6 +17,7 @@ import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsYYAppDTO;
import com.bsd.pjcloud.integrated.entity.VisitorsEntity;
import com.bsd.pjcloud.integrated.service.VisitorsService;
import com.bsd.pjcloud.integrated.vo.visitor.app.VisitorsAppVo;
import com.bsd.pjcloud.integrated.vo.visitor.VisitorsPageVo;
import org.springframework.security.access.prepost.PreAuthorize;
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
@@ -54,11 +55,8 @@ public class VisitorsController {
@Operation(summary = "分页查询" , description = "分页查询" )
@GetMapping("/page" )
@PreAuthorize("@pms.hasPermission('integrated_visitors_view')" )
public R getVisitorsPage(@ParameterObject Page page, @ParameterObject VisitorsEntity visitors) {
LambdaQueryWrapper<VisitorsEntity> wrapper = Wrappers.lambdaQuery();
wrapper.eq(StrUtil.isNotBlank(visitors.getName()),VisitorsEntity::getName,visitors.getName());
wrapper.eq(StrUtil.isNotBlank(visitors.getMobile()),VisitorsEntity::getMobile,visitors.getMobile());
return R.ok(visitorsService.page(page, wrapper));
public R getVisitorsPage(@ParameterObject Page<VisitorsEntity> page, @ParameterObject VisitorsEntity visitors) {
return R.ok(visitorsService.getVisitorsPageWithDeptName(page, visitors));
}
@@ -10,6 +10,7 @@ import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsYYAppDTO;
import com.bsd.pjcloud.integrated.entity.VisitorsEntity;
import com.bsd.pjcloud.integrated.vo.visitor.app.VisitorsAppVo;
import com.bsd.pjcloud.integrated.vo.visitor.app.VisitorsAppYYDetailVo;
import com.bsd.pjcloud.integrated.vo.visitor.VisitorsPageVo;
import java.util.List;
@@ -88,6 +89,14 @@ public interface VisitorsService extends IService<VisitorsEntity> {
Object receiveYY(VisitorsReceiveAppDTO visitorsReceiveAppDTO);
/**
* 分页查询访客表(包含部门名称回显)
* @param page 分页对象
* @param visitors 访客表查询条件
* @return 分页结果
*/
Page<VisitorsPageVo> getVisitorsPageWithDeptName(Page<VisitorsEntity> page, VisitorsEntity visitors);
/**
* 获取邀约详情
@@ -28,6 +28,8 @@ import com.bsd.pjcloud.integrated.constant.IntegratedFlowConstant;
import com.bsd.pjcloud.integrated.constant.VisitorTypeEnum;
import com.bsd.pjcloud.integrated.controller.AppVisitorUserController;
import com.bsd.pjcloud.integrated.dto.visitor.app.*;
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsCarAppDTO;
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsPeopleAppDTO;
import com.bsd.pjcloud.integrated.entity.VisitorUserEntity;
import com.bsd.pjcloud.integrated.entity.VisitorsCarEntity;
import com.bsd.pjcloud.integrated.entity.VisitorsEntity;
@@ -38,6 +40,7 @@ import com.bsd.pjcloud.integrated.mapper.VisitorsPeopleMapper;
import com.bsd.pjcloud.integrated.service.VisitorUserService;
import com.bsd.pjcloud.integrated.service.VisitorsService;
import com.bsd.pjcloud.integrated.vo.visitor.app.*;
import com.bsd.pjcloud.integrated.vo.visitor.VisitorsPageVo;
import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdPartySmsService;
import com.bsd.pjcloud.thirdparty.api.feign.RemoterVisitorService;
import com.bsd.pjcloud.thirdparty.dto.visitor.AppointmentInfo;
@@ -49,6 +52,7 @@ import com.bsd.pjcloud.thirdparty.dto.visitor.request.make.VisitorInfo;
import com.bsd.pjcloud.thirdparty.dto.visitor.response.make.AppointmentData;
import com.bsd.pjcloud.thirdparty.dto.visitor.response.make.QueryAppointmentRecordsResponse;
import com.github.yulichang.toolkit.StrUtils;
import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.oauth2.jwt.Jwt;
@@ -605,5 +609,110 @@ public class VisitorsServiceImpl extends ServiceImpl<VisitorsMapper, VisitorsEnt
return result;
}
@Override
public Page<VisitorsPageVo> getVisitorsPageWithDeptName(Page<VisitorsEntity> page, VisitorsEntity visitors) {
// 构建查询条件
LambdaQueryWrapper<VisitorsEntity> wrapper = Wrappers.lambdaQuery();
wrapper.eq(StrUtil.isNotBlank(visitors.getType()), VisitorsEntity::getType, visitors.getType());
wrapper.eq(StrUtil.isNotBlank(visitors.getName()), VisitorsEntity::getName, visitors.getName());
wrapper.eq(StrUtil.isNotBlank(visitors.getMobile()), VisitorsEntity::getMobile, visitors.getMobile());
// 执行分页查询
Page<VisitorsEntity> entityPage = baseMapper.selectPage(page, wrapper);
// 批量查询部门信息,避免N+1问题
List<Long> deptIds = entityPage.getRecords().stream()
.map(VisitorsEntity::getDeptId)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
Map<Long, String> deptNameMap = new HashMap<>();
if (!deptIds.isEmpty()) {
R<Map<Long, SysDept>> deptMapR = remoteDeptService.getDeptByDeptIds(deptIds);
if (deptMapR.isOk() && deptMapR.getData() != null) {
for (Map.Entry<Long, SysDept> entry : deptMapR.getData().entrySet()) {
deptNameMap.put(entry.getKey(), entry.getValue().getName());
}
}
}
// 批量查询车辆信息
List<Long> visitorIds = entityPage.getRecords().stream()
.map(VisitorsEntity::getId)
.collect(Collectors.toList());
final Map<Long, List<VisitorsCarAppDTO>> carMap;
final Map<Long, List<VisitorsPeopleAppDTO>> peopleMap;
if (!visitorIds.isEmpty()) {
// 查询车辆信息
List<VisitorsCarEntity> carEntities = visitorsCarMapper.selectList(
new LambdaQueryWrapper<VisitorsCarEntity>()
.in(VisitorsCarEntity::getVisitorsId, visitorIds)
);
if (!CollectionUtils.isEmpty(carEntities)) {
carMap = carEntities.stream()
.collect(Collectors.groupingBy(
VisitorsCarEntity::getVisitorsId,
Collectors.mapping(car -> {
VisitorsCarAppDTO dto = new VisitorsCarAppDTO();
dto.setCarNumber(car.getCarNumber());
return dto;
}, Collectors.toList())
));
} else {
carMap = new HashMap<>();
}
// 查询随行人员信息
List<VisitorsPeopleEntity> peopleEntities = visitorsPeopleMapper.selectList(
new LambdaQueryWrapper<VisitorsPeopleEntity>()
.in(VisitorsPeopleEntity::getVisitorsId, visitorIds)
);
if (!CollectionUtils.isEmpty(peopleEntities)) {
peopleMap = peopleEntities.stream()
.collect(Collectors.groupingBy(
VisitorsPeopleEntity::getVisitorsId,
Collectors.mapping(people -> {
VisitorsPeopleAppDTO dto = new VisitorsPeopleAppDTO();
dto.setName(people.getName());
dto.setMobile(people.getMobile());
return dto;
}, Collectors.toList())
));
} else {
peopleMap = new HashMap<>();
}
} else {
carMap = new HashMap<>();
peopleMap = new HashMap<>();
}
// 转换为VO
List<VisitorsPageVo> voList = entityPage.getRecords().stream().map(entity -> {
VisitorsPageVo vo = BeanUtils.toBean(entity, VisitorsPageVo.class);
// 设置部门名称
if (entity.getDeptId() != null) {
vo.setDeptName(deptNameMap.get(entity.getDeptId()));
}
// 设置车辆信息
vo.setCarList(carMap.getOrDefault(entity.getId(), new ArrayList<>()));
// 设置随行人员信息
vo.setOtherPeople(peopleMap.getOrDefault(entity.getId(), new ArrayList<>()));
return vo;
}).collect(Collectors.toList());
// 构建返回结果
Page<VisitorsPageVo> resultPage = new Page<>();
resultPage.setCurrent(entityPage.getCurrent());
resultPage.setSize(entityPage.getSize());
resultPage.setTotal(entityPage.getTotal());
resultPage.setPages(entityPage.getPages());
resultPage.setRecords(voList);
return resultPage;
}
}