From d4b5bb839b67d05c1bbd01d18c6a2c7e2ef509e0 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Sun, 28 Sep 2025 19:02:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BF=E5=AE=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/VisitorsController.java | 8 +- .../integrated/service/VisitorsService.java | 9 ++ .../service/impl/VisitorsServiceImpl.java | 109 ++++++++++++++++++ 3 files changed, 121 insertions(+), 5 deletions(-) diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/VisitorsController.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/VisitorsController.java index c3236b6be..2e8141b75 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/VisitorsController.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/VisitorsController.java @@ -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 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 page, @ParameterObject VisitorsEntity visitors) { + return R.ok(visitorsService.getVisitorsPageWithDeptName(page, visitors)); } diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/VisitorsService.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/VisitorsService.java index 6eb23f0ad..6fa95ddce 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/VisitorsService.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/VisitorsService.java @@ -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 { Object receiveYY(VisitorsReceiveAppDTO visitorsReceiveAppDTO); + /** + * 分页查询访客表(包含部门名称回显) + * @param page 分页对象 + * @param visitors 访客表查询条件 + * @return 分页结果 + */ + Page getVisitorsPageWithDeptName(Page page, VisitorsEntity visitors); + /** * 获取邀约详情 diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/VisitorsServiceImpl.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/VisitorsServiceImpl.java index 763271a96..7d777d9b4 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/VisitorsServiceImpl.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/service/impl/VisitorsServiceImpl.java @@ -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 getVisitorsPageWithDeptName(Page page, VisitorsEntity visitors) { + // 构建查询条件 + LambdaQueryWrapper 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 entityPage = baseMapper.selectPage(page, wrapper); + + // 批量查询部门信息,避免N+1问题 + List deptIds = entityPage.getRecords().stream() + .map(VisitorsEntity::getDeptId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + + Map deptNameMap = new HashMap<>(); + if (!deptIds.isEmpty()) { + R> deptMapR = remoteDeptService.getDeptByDeptIds(deptIds); + if (deptMapR.isOk() && deptMapR.getData() != null) { + for (Map.Entry entry : deptMapR.getData().entrySet()) { + deptNameMap.put(entry.getKey(), entry.getValue().getName()); + } + } + } + + // 批量查询车辆信息 + List visitorIds = entityPage.getRecords().stream() + .map(VisitorsEntity::getId) + .collect(Collectors.toList()); + + final Map> carMap; + final Map> peopleMap; + + if (!visitorIds.isEmpty()) { + // 查询车辆信息 + List carEntities = visitorsCarMapper.selectList( + new LambdaQueryWrapper() + .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 peopleEntities = visitorsPeopleMapper.selectList( + new LambdaQueryWrapper() + .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 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 resultPage = new Page<>(); + resultPage.setCurrent(entityPage.getCurrent()); + resultPage.setSize(entityPage.getSize()); + resultPage.setTotal(entityPage.getTotal()); + resultPage.setPages(entityPage.getPages()); + resultPage.setRecords(voList); + + return resultPage; + } + } \ No newline at end of file