diff --git a/src/main/java/club/joylink/rtss/controller/permission2/AcPermissionDistributeController.java b/src/main/java/club/joylink/rtss/controller/permission2/AcPermissionDistributeController.java index 7cf9fd6f6..d01be99b3 100644 --- a/src/main/java/club/joylink/rtss/controller/permission2/AcPermissionDistributeController.java +++ b/src/main/java/club/joylink/rtss/controller/permission2/AcPermissionDistributeController.java @@ -70,14 +70,22 @@ public class AcPermissionDistributeController { } /** - * 生成分发二维码(用户扫码可以领取权限) + * 生成分发二维码 * * @param pdId 权限分发id */ @GetMapping(path = "/{pdId}/qrCode") public String generateQrCode(@PathVariable("pdId") Long pdId, @RequestAttribute(value = AuthenticateInterceptor.LOGIN_INFO_KEY) LoginUserInfoVO loginInfo) { + return this.permissionDistributeService.generateQrCode(pdId,loginInfo); + } + /** + * 微信扫码获取权限分发相关信息 + * @param code 用户编码 + * @param id 权限分发id + */ + @GetMapping + public void findPermissionDistributeInfo(String code, Long id){ - return null; } } diff --git a/src/main/java/club/joylink/rtss/services/permission/PermissionDistributeService.java b/src/main/java/club/joylink/rtss/services/permission/PermissionDistributeService.java index 44d2b6a67..9f02fc241 100644 --- a/src/main/java/club/joylink/rtss/services/permission/PermissionDistributeService.java +++ b/src/main/java/club/joylink/rtss/services/permission/PermissionDistributeService.java @@ -1,5 +1,6 @@ package club.joylink.rtss.services.permission; +import club.joylink.rtss.controller.advice.AuthenticateInterceptor; import club.joylink.rtss.dao.OrgDAO; import club.joylink.rtss.dao.SysAccountDAO; import club.joylink.rtss.dao.permission.AcPermissionDAO; @@ -12,7 +13,11 @@ import club.joylink.rtss.entity.permission.PermissionDistribute; import club.joylink.rtss.entity.permission.PermissionDistributeExample; import club.joylink.rtss.entity.permission.PermissionSubject; import club.joylink.rtss.exception.BusinessExceptionAssertEnum; +import club.joylink.rtss.services.QRCodeManager; +import club.joylink.rtss.services.WxApiService; +import club.joylink.rtss.services.auth.IAuthenticateService; import club.joylink.rtss.vo.AccountVO; +import club.joylink.rtss.vo.LoginUserInfoVO; import club.joylink.rtss.vo.client.PageVO; import club.joylink.rtss.vo.permission.*; import club.joylink.rtss.vo.permission.convertor.PermissionDistributeConvertor; @@ -22,10 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.*; import java.io.Serializable; import java.time.LocalDateTime; @@ -48,6 +50,10 @@ public class PermissionDistributeService { private SysAccountDAO sysAccountDAO; @Autowired private OrgDAO orgDAO; + @Autowired + private QRCodeManager qrCodeManager; + @Autowired + private IAuthenticateService authenticateService; /** * 创建权限分发 @@ -151,10 +157,15 @@ public class PermissionDistributeService { PermissionDistribute permissionDistribute = this.permissionDistributeDAO.selectByPrimaryKey(pdId); BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertTrue(null != permissionDistribute, String.format("权限分发[id=%s]不存在", pdId)); BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertTrue(PermissionDistributeStatusEnum.Valid.equals(PermissionDistributeStatusEnum.getItem(permissionDistribute.getStatus())), String.format("权限分发[id=%s]已失效", pdId)); - BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertTrue(permissionDistribute.getRemains()>0,String.format("权限分发[id=%s]剩余权限数量不足", pdId)); + BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertTrue(permissionDistribute.getRemains() > 0, String.format("权限分发[id=%s]剩余权限数量不足", pdId)); + final LocalDateTime now = LocalDateTime.now(); + final LocalDateTime startTime = permissionDistribute.getStartTime(); + final LocalDateTime endTime = permissionDistribute.getEndTime(); + final boolean isForever = permissionDistribute.getForever(); + BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertTrue(isForever ? now.isAfter(startTime) : now.isAfter(startTime) && now.isBefore(endTime), String.format("当前时间不在权限分发[id=%s]有效时间内", pdId)); // 校验权限 Permission permission = this.permissionDAO.selectByPrimaryKey(permissionDistribute.getPermissionId()); - BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertTrue(null != permission, String.format("权限分发[id=%s]的权限不存在", pdId, permissionDistribute.getPermissionId())); + BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertTrue(null != permission, String.format("权限分发[id=%s]的权限[id=%s]不存在", pdId, permissionDistribute.getPermissionId())); // 校验主体 Serializable subject = null; switch (subjectType) { @@ -190,12 +201,35 @@ public class PermissionDistributeService { // 从权限分发减掉已经分发的并修改权限分发状态 PermissionDistribute updateDistribute = new PermissionDistribute(); updateDistribute.setId(permissionDistribute.getId()); - updateDistribute.setRemains(permissionDistribute.getRemains()-permissionSubject.getAmount()); - if(updateDistribute.getRemains()<=0){ + updateDistribute.setRemains(permissionDistribute.getRemains() - permissionSubject.getAmount()); + if (updateDistribute.getRemains() <= 0) { updateDistribute.setStatus(PermissionDistributeStatusEnum.InValid.getValue()); } this.permissionDistributeDAO.updateByPrimaryKeySelective(updateDistribute); // return permissionSubjectId; } + + /** + * 生成权限分发二维码 + * + * @param pdId 权限分发id + */ + public String generateQrCode(Long pdId, LoginUserInfoVO loginInfo) { + return qrCodeManager.getDistributeCode(pdId, loginInfo.getProject()); + } + + /** + * 微信扫码获取权限分发相关信息 + * + * @param code 用户编码 + * @param id 权限分发id + */ + public void scanPermissionDistributeInfo(String code, Long id) { + AccountVO accountVO = this.authenticateService.getOrCreateUserByWmcode(WxApiService.MiniApp.JoyLink, code); + PermissionDistribute permissionDistribute = this.permissionDistributeDAO.selectByPrimaryKey(id); + BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertTrue(null != permissionDistribute, String.format("权限分发[id=%s]不存在", id)); + Permission permission = this.permissionDAO.selectByPrimaryKey(permissionDistribute.getPermissionId()); + BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertTrue(null != permission, String.format("权限分发[id=%s]的权限[id=%s]不存在", id, permissionDistribute.getPermissionId())); + } } diff --git a/src/main/java/club/joylink/rtss/vo/permission/ScanPermissionDistributeInfoRspVo.java b/src/main/java/club/joylink/rtss/vo/permission/ScanPermissionDistributeInfoRspVo.java new file mode 100644 index 000000000..a0a72b99d --- /dev/null +++ b/src/main/java/club/joylink/rtss/vo/permission/ScanPermissionDistributeInfoRspVo.java @@ -0,0 +1,80 @@ +package club.joylink.rtss.vo.permission; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 扫码获取权限分发的响应 + */ +@Data +public class ScanPermissionDistributeInfoRspVo { + /** + * 扫码用户的账号id + */ + private Long accountId; + /** + * 权限分发id + */ + private Long pdId; + + /** + * 关联权限id + */ + private Long permissionId; + + /** + * 分发来自subject id(rts_permission_subject) + */ + private Long sourceSubjectId; + + /** + * 总数量 + */ + private Integer amount; + + /** + * 剩余数量 + */ + private Integer remains; + + /** + * 是否永久:true/false + */ + private Boolean forever; + + /** + * 权限分发状态 + */ + private Integer status; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 修改时间 + */ + private LocalDateTime updateTime; + + /** + * 开始时间 + */ + private LocalDateTime startTime; + + /** + * 结束时间 + */ + private LocalDateTime endTime; + + /** + * 创建者id + */ + private Long creatorId; + + /** + * 备注描述 + */ + private String dsc; +}