From 3ab0cbef405ab480d5efeb9a28d0fcb093bf2b6d Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Thu, 10 Apr 2025 17:03:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BF=E5=AE=A2=E6=8E=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E5=AF=B9=E6=8C=87=E5=AE=9A=E7=94=A8=E6=88=B7=E4=B8=8B=E7=BA=BF?= =?UTF-8?q?=E5=8A=9F=E8=83=BD-1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/endpoint/PjcloudTokenEndpoint.java | 57 +++++++- .../core/constant/SecurityConstants.java | 6 + .../dto/visitors/app/VisitorsAppDTO.java | 21 +-- .../vo/app/visitor/VisitorsAppVo.java | 129 ++++++++++++++++++ .../vo/app/visitor/VisitorsCarAppVo.java | 27 ++++ .../pjcloud-integrated-biz/pom.xml | 6 + .../bsd/pjcloud/integrated/IntegratedApp.java | 2 +- .../controller/VisitorsController.java | 37 ++++- .../integrated/entity/VisitorsEntity.java | 11 +- .../service/impl/VisitorsServiceImpl.java | 18 ++- .../main/resources/mapper/VisitorsMapper.xml | 4 +- .../admin/api/feign/RemoteTokenService.java | 10 ++ .../admin/controller/SysTokenController.java | 2 +- 13 files changed, 309 insertions(+), 21 deletions(-) create mode 100644 pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/app/visitor/VisitorsAppVo.java create mode 100644 pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/app/visitor/VisitorsCarAppVo.java diff --git a/pjcloud-auth/src/main/java/com/bsd/pjcloud/auth/endpoint/PjcloudTokenEndpoint.java b/pjcloud-auth/src/main/java/com/bsd/pjcloud/auth/endpoint/PjcloudTokenEndpoint.java index e0a140a17..73ce9bf39 100644 --- a/pjcloud-auth/src/main/java/com/bsd/pjcloud/auth/endpoint/PjcloudTokenEndpoint.java +++ b/pjcloud-auth/src/main/java/com/bsd/pjcloud/auth/endpoint/PjcloudTokenEndpoint.java @@ -74,10 +74,7 @@ import org.springframework.web.servlet.ModelAndView; import java.security.Principal; import java.time.Duration; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -320,9 +317,14 @@ public class PjcloudTokenEndpoint { }).filter(tokenVo -> { // 根据用户名过滤 String username = MapUtil.getStr(params, SecurityConstants.DETAILS_USERNAME); +// Long userId = MapUtil.getLong(params, SecurityConstants.USER_ID); if (StrUtil.isBlank(username)) { return true; } +// if (null==userId) { +// return true; +// } +// return tokenVo.getUserId().equals(userId); return tokenVo.getUsername().contains(username); }).collect(Collectors.toList()); result.setRecords(tokenVoList); @@ -330,6 +332,53 @@ public class PjcloudTokenEndpoint { return R.ok(result); } + /** + * 移动端下线 + * token查询 + * @return + */ + @Inner + @PostMapping("/selectTokenByUserId") + public R> tokenList(@RequestParam("userId")Long userId,@RequestParam("clientId")String clientId) { + // 根据分页参数获取对应数据 + String key = String.format("%s::%s::*", tenantKeyStrResolver.key(), CacheConstants.PROJECT_OAUTH_ACCESS); + Set keys = redisTemplate.keys(key); + + List tokenVoList = redisTemplate.opsForValue().multiGet(new ArrayList<>(keys)).stream().map(obj -> { + OAuth2Authorization authorization = (OAuth2Authorization) obj; + TokenVO tokenVo = new TokenVO(); + tokenVo.setClientId(authorization.getRegisteredClientId()); + tokenVo.setId(authorization.getId()); + tokenVo.setUsername(authorization.getPrincipalName()); + OAuth2Authorization.Token accessToken = authorization.getAccessToken(); + tokenVo.setAccessToken(accessToken.getToken().getTokenValue()); + + String expiresAt = TemporalAccessorUtil.format(accessToken.getToken().getExpiresAt(), + DatePattern.NORM_DATETIME_PATTERN); + tokenVo.setExpiresAt(expiresAt); + + String issuedAt = TemporalAccessorUtil.format(accessToken.getToken().getIssuedAt(), + DatePattern.NORM_DATETIME_PATTERN); + tokenVo.setIssuedAt(issuedAt); + + Map attributes = authorization.getAttributes(); + Authentication authentication = (Authentication) attributes.get(Principal.class.getName()); + + if (Objects.isNull(authentication)) { + return tokenVo; + } + + PjcloudUser pjcloudUser = (PjcloudUser) authentication.getPrincipal(); + tokenVo.setUserId(pjcloudUser.getId()); + return tokenVo; + }).filter(tokenVo -> { + return tokenVo.getUserId().equals(userId) && tokenVo.getClientId().equals(clientId); + }) + .collect(Collectors.toList()); + + return R.ok(tokenVoList); + } + @Inner @GetMapping("/query-token") public R queryToken(String token) { diff --git a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/SecurityConstants.java b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/SecurityConstants.java index 353428fab..82e90bf5c 100644 --- a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/SecurityConstants.java +++ b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/SecurityConstants.java @@ -204,6 +204,12 @@ public interface SecurityConstants { */ String DETAILS_USERNAME = "username"; + + /** + * id建 + */ + String USER_ID = "userId"; + /** * 姓名 */ diff --git a/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/dto/visitors/app/VisitorsAppDTO.java b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/dto/visitors/app/VisitorsAppDTO.java index 75d03d885..d672d2e42 100644 --- a/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/dto/visitors/app/VisitorsAppDTO.java +++ b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/dto/visitors/app/VisitorsAppDTO.java @@ -55,13 +55,8 @@ public class VisitorsAppDTO { * 接待人 */ @Schema(description="接待人") - private Long userName; + private String userName; - /** - * 车牌号id - */ - @Schema(description="车牌号id") - private Long carId; /** * 公司名称 @@ -75,11 +70,17 @@ public class VisitorsAppDTO { @Schema(description="随行人员数量") private Integer peopleNumber; + /** - * 到访时间 - */ - @Schema(description="到访时间") - private LocalDateTime vDate; + * 到访时间 + */ + @Schema(description="到访时间") + private LocalDateTime vStartDate; + /** + * 到访时间 + */ + @Schema(description="到访时间") + private LocalDateTime vEndDate; /** * 是否驾驶车辆0 否 1是 diff --git a/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/app/visitor/VisitorsAppVo.java b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/app/visitor/VisitorsAppVo.java new file mode 100644 index 000000000..0bccf6027 --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/app/visitor/VisitorsAppVo.java @@ -0,0 +1,129 @@ +package com.bsd.pjcloud.integrated.vo.app.visitor; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.bsd.pjcloud.common.core.util.TenantTable; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 访客表 + * + * @author zjf + * @date 2025-04-09 15:22:47 + */ +@Data +@Schema(description = "访客表vo") +public class VisitorsAppVo{ + + + /** + * id + */ + @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 description; + + /** + * 审核状态 + */ + @Schema(description="审核状态") + private String checkStatus; + + /** + * 到访单位 + */ + @Schema(description="到访单位") + private Long deptId; + + /** + * 接待人 + */ + @Schema(description="接待人") + private Long userName; + + /** + * 车牌号id + */ + @Schema(description="车牌号id") + private Long carId; + + /** + * 公司名称 + */ + @Schema(description="公司名称") + private String companyName; + + /** + * 随行人员数量 + */ + @Schema(description="随行人员数量") + private Integer peopleNumber; + + /** + * 到访时间 + */ + @Schema(description="到访时间") + private LocalDateTime vStartDate; + /** + * 到访时间 + */ + @Schema(description="到访时间") + private LocalDateTime vEndDate; + + /** + * 是否驾驶车辆0 否 1是 + */ + @Schema(description="是否驾驶车辆0 否 1是") + private String isDrive; + + + /** + * 审核原因 + */ + @Schema(description="审核原因") + private String checkReason; + + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description="创建时间") + private LocalDateTime createTime; + + + + @Schema(description="token") + private String token; + + @Schema(description="车牌号") + private List visitorsCarAppVos; +} \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/app/visitor/VisitorsCarAppVo.java b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/app/visitor/VisitorsCarAppVo.java new file mode 100644 index 000000000..a2ec2333c --- /dev/null +++ b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/vo/app/visitor/VisitorsCarAppVo.java @@ -0,0 +1,27 @@ +package com.bsd.pjcloud.integrated.vo.app.visitor; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 车牌号 + * + * @author zjf + * @date 2025-04-09 15:10:54 + */ +@Data + +@Schema(description = "车牌号") +public class VisitorsCarAppVo { + + + private Long id; + + /** + * 车牌号 + */ + @Schema(description="车牌号") + private String carNumber; + + +} \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/pom.xml b/pjcloud-integrated/pjcloud-integrated-biz/pom.xml index 5561f5f81..678eaf1a3 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/pom.xml +++ b/pjcloud-integrated/pjcloud-integrated-biz/pom.xml @@ -13,6 +13,12 @@ pjcloud-integrated-biz + + + com.bsd + pjcloud-common-idempotent + + org.springframework.boot diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/IntegratedApp.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/IntegratedApp.java index 48afe3ba6..1b6dad128 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/IntegratedApp.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/IntegratedApp.java @@ -12,7 +12,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; *

* 项目启动类 */ -@EnableOpenApi("supermarketerp") +@EnableOpenApi("integrated") @EnablePjcloudFeignClients @EnableDiscoveryClient @EnablePjcloudResourceServer 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 27ea89356..7f04c0ce4 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 @@ -7,7 +7,10 @@ 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.util.R; +import com.bsd.pjcloud.common.idempotent.annotation.Idempotent; import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.common.security.annotation.Inner; +import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum; import com.bsd.pjcloud.integrated.dto.visitors.app.VisitorsAppDTO; import com.bsd.pjcloud.integrated.entity.VisitorsEntity; import com.bsd.pjcloud.integrated.service.VisitorsService; @@ -21,6 +24,7 @@ import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import java.time.LocalDateTime; import java.util.List; /** @@ -129,9 +133,40 @@ public class VisitorsController { */ @Operation(summary = "app新增访客表" , description = "app新增访客表" ) @SysLog("新增访客表" ) - @PostMapping + @PostMapping("/app/save") + @Idempotent(key = "#key", expireTime = 10, info = "请勿重复提交") + @Inner(value = false) public R save(@RequestBody VisitorsAppDTO visitors) { return R.ok(visitorsService.vistorsSave(visitors)); } + + /** + * 扫码发送请求确认是否能通过 + * 通过token查询访客表 + * @param + * @return R + */ + @Operation(summary = "通过token查询" , description = "通过token查询" ) + @GetMapping("/app/check/{token}" ) + public R getByToken(@PathVariable("token" ) String token) { + + LambdaQueryWrapper visitorsEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); + visitorsEntityLambdaQueryWrapper.eq(VisitorsEntity::getToken,token); + visitorsEntityLambdaQueryWrapper.eq(VisitorsEntity::getCheckStatus, TaskCheckStatusEnum.RESULT); + VisitorsEntity visitors = visitorsService.getOne(visitorsEntityLambdaQueryWrapper); + if (visitors == null){ + return R.failed("没有此预约信息"); + } + LocalDateTime vStartDate = visitors.getVStartDate(); + if (vStartDate.isBefore(LocalDateTime.now())){ + return R.failed("预约时间未到"); + } + LocalDateTime vEndDate = visitors.getVEndDate(); + if (vEndDate.isBefore(LocalDateTime.now())){ + return R.failed("预约已过期"); + } + return R.ok(true); + } + } \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/VisitorsEntity.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/VisitorsEntity.java index 50d908bcf..8e8a70881 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/VisitorsEntity.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/VisitorsEntity.java @@ -93,7 +93,12 @@ public class VisitorsEntity extends Model { * 到访时间 */ @Schema(description="到访时间") - private LocalDateTime vDate; + private LocalDateTime vStartDate; + /** + * 到访时间 + */ + @Schema(description="到访时间") + private LocalDateTime vEndDate; /** * 是否驾驶车辆0 否 1是 @@ -154,4 +159,8 @@ public class VisitorsEntity extends Model { */ @Schema(description="租户编号") private Long tenantId; + + + @Schema(description="token") + private String token; } \ No newline at end of file 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 e42de1ce0..88bd05026 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 @@ -17,12 +17,18 @@ import com.bsd.pjcloud.integrated.entity.VisitorsEntity; import com.bsd.pjcloud.integrated.mapper.VisitorsCarMapper; import com.bsd.pjcloud.integrated.mapper.VisitorsMapper; import com.bsd.pjcloud.integrated.service.VisitorsService; +import com.bsd.pjcloud.integrated.vo.app.visitor.VisitorsAppVo; +import com.bsd.pjcloud.integrated.vo.app.visitor.VisitorsCarAppVo; import lombok.AllArgsConstructor; +import org.springframework.security.oauth2.jwt.Jwt; +import org.springframework.security.oauth2.jwt.JwtClaimsSet; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.time.LocalDateTime; import java.util.List; +import java.util.UUID; /** * 访客表 @@ -61,7 +67,10 @@ public class VisitorsServiceImpl extends ServiceImpl visitorsCarAppDTOList = visitors.getVisitorsCarAppDTOList(); if (!CollectionUtils.isEmpty(visitorsCarAppDTOList)){ List visitorsCarEntities = BeanUtils.toBean(visitorsCarAppDTOList, VisitorsCarEntity.class); @@ -70,6 +79,11 @@ public class VisitorsServiceImpl extends ServiceImpl visitorsCarAppVos = BeanUtils.toBean(visitorsCarAppDTOList, VisitorsCarAppVo.class); + visitorAppVo.setVisitorsCarAppVos(visitorsCarAppVos); + return visitorAppVo; } + + } \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/VisitorsMapper.xml b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/VisitorsMapper.xml index 588e2542d..840556b33 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/VisitorsMapper.xml +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/VisitorsMapper.xml @@ -15,7 +15,8 @@ - + + @@ -25,5 +26,6 @@ + \ No newline at end of file diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteTokenService.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteTokenService.java index 9ab861223..3fbe32341 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteTokenService.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteTokenService.java @@ -44,6 +44,16 @@ public interface RemoteTokenService { @PostMapping("/token/page") R getTokenPage(@RequestBody Map params); + + /** + * 查询token 信息 + * @param + * @return page + */ + @NoToken + @PostMapping("/token/selectTokenByUserId") + R getTokenByUserId(@RequestParam("userId")Long userId,@RequestParam("clientId")String clientId); + /** * 删除token * @param token token diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysTokenController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysTokenController.java index 6a11075fb..37fdac06f 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysTokenController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysTokenController.java @@ -57,7 +57,7 @@ public class SysTokenController { /** * 删除 - * @param token getTokenPage + * @param tokens getTokenPage * @return success/false */ @SysLog("删除用户token")