Merge branch 'master' of https://gitea.zianxin.com/zax/biz-api-cloud
This commit is contained in:
commit
a50a4a6a60
4 files changed
+326
-5
No files matched your search
+205
@@ -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;
|
||||
}
|
||||
+3
-5
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
+9
@@ -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);
|
||||
|
||||
|
||||
/**
|
||||
* 获取邀约详情
|
||||
|
||||
+109
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user