123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- package com.wtkj.service.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.toolkit.IdWorker;
- import com.wtkj.entity.FileShare;
- import com.wtkj.entity.Project;
- import com.wtkj.entity.ProjectAuth;
- import com.wtkj.entity.ProjectGroup;
- import com.wtkj.service.*;
- import com.wutong.file.entity.FileAttach;
- import com.wutong.file.feign.IFileClient;
- import lombok.AllArgsConstructor;
- import org.springblade.core.log.exception.ServiceException;
- import org.springblade.core.redis.cache.BladeRedis;
- import org.springblade.core.secure.utils.AuthUtil;
- import org.springblade.core.tool.api.R;
- import org.springblade.core.tool.utils.Func;
- import org.springblade.core.tool.utils.StringUtil;
- import org.springblade.system.entity.Dept;
- import org.springblade.system.feign.ISysClient;
- import org.springblade.system.user.entity.User;
- import org.springblade.system.user.feign.IUserClient;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.time.Duration;
- import java.util.ArrayList;
- import java.util.List;
- import static com.wtkj.config.MagicValue.ZERO;
- import static com.wtkj.config.NacosConfigValue.expireIn;
- import static com.wtkj.config.NacosConfigValue.scanCount;
- /**
- * @author Blizzard
- * @create at 2023-09-19 17:35
- * @describe
- */
- @AllArgsConstructor
- @Service
- public class QrcodeServiceImpl implements IQrcodeService {
- private final BladeRedis redis;
- private final IUserClient userClient;
- private final IProjectAuthService projectAuthService;
- private final IProjectGroupService projectGroupService;
- private final IProjectService projectService;
- private final IFileShareService fileShareService;
- private final IFileClient fileClient;
- private final ISysClient sysClient;
- @Override
- public JSONObject createDeptQrcode(Long deptId) {
- JSONObject res = new JSONObject();
- String kv = IdWorker.getIdStr();
- Long userId = AuthUtil.getUserId();
- redis.setEx(kv, 0, Duration.ofSeconds(expireIn));
- res.put("qrcodeId", kv);
- res.put("createUser", userId);
- res.put("deptId", deptId);
- return res;
- }
- @Override
- public boolean inviteToDept(String qrcodeId, Long createUser, Long deptId) {
- boolean flag = false;
- boolean exist = isExist(qrcodeId);
- Long userId = AuthUtil.getUserId();
- //二维码可用前提下
- if (exist) {
- //1.绑定机构
- R<Boolean> rpc = userClient.bindUser(userId, deptId);
- //2.保存外部联系人
- if (rpc.isSuccess()) {
- flag = rpc.getData();
- }
- }
- return flag;
- }
- @Override
- public JSONObject scanInviteToDept(String qrcodeId, Long createUser, Long deptId) {
- JSONObject res = new JSONObject();
- User user = null;
- Dept topDept = null;
- Dept dept = null;
- R<User> userR = userClient.userInfoById(createUser);
- if (userR.isSuccess()) {
- user = userR.getData();
- }
- R<Dept> rpc = sysClient.getDept(deptId);
- if (rpc.isSuccess()) {
- Dept data = rpc.getData();
- String ancestors = data.getAncestors();
- // ancestors 0,1689540492698267649
- if (StringUtil.isNotBlank(ancestors) && ancestors.contains(String.valueOf(ZERO))) {
- List<Long> deptIds = Func.toLongList(ancestors);
- if (deptIds.size() > 1) {
- Long topDeptId = deptIds.get(1);
- R<Dept> deptR = sysClient.getDept(topDeptId);
- if (deptR.isSuccess()) {
- topDept = deptR.getData();
- dept = data;
- }
- } else {
- topDept = data;
- }
- }
- }
- res.put("user", user);
- res.put("topDept", topDept);
- res.put("dept", dept);
- return res;
- }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public boolean inviteToProject(String qrcodeId, Long createUser, Long projectId, Long deptId) {
- boolean flag = false;
- boolean exist = isExist(qrcodeId);
- if (exist) {
- //1.权限 3.项目组
- ProjectAuth auth = new ProjectAuth();
- auth.setProjectId(projectId);
- auth.setTopDept(deptId);
- auth.setUserDept(Func.firstLong(AuthUtil.getDeptId()));
- auth.setUserId(AuthUtil.getUserId());
- projectAuthService.save(auth);
- Project project = projectService.getById(projectId);
- if (project != null) {
- ProjectGroup group = new ProjectGroup();
- group.setProjectId(projectId);
- group.setInviteDept(project.getCompetentUnit());
- group.setBeInvitedDept(deptId);
- flag = projectGroupService.save(group);
- }
- }
- return flag;
- }
- @Override
- public JSONObject scanInviteToProject(String qrcodeId, Long createUser, Long projectId, Long topDept) {
- JSONObject res = new JSONObject();
- User user = null;
- String projectName = null;
- String unitName = null;
- R<User> userR = userClient.userInfoById(createUser);
- if (userR.isSuccess()) {
- user = userR.getData();
- }
- Project project = projectService.getById(projectId);
- if (project != null) {
- projectName = project.getName();
- Long competentUnit = project.getCompetentUnit();
- R<Dept> dept = sysClient.getDept(competentUnit);
- if (dept.isSuccess()) {
- unitName = dept.getData().getDeptName();
- }
- }
- res.put("user", user);
- res.put("projectName", projectName);
- res.put("unitName", unitName);
- return res;
- }
- @Override
- public JSONObject createGroupQrcode(Long projectId) {
- JSONObject res = new JSONObject();
- String kv = IdWorker.getIdStr();
- redis.setEx(kv, 0, Duration.ofSeconds(expireIn));
- res.put("createUser", AuthUtil.getUser());
- res.put("projectId", projectId);
- res.put("qrcodeId", kv);
- return res;
- }
- @Override
- public Long savaShare(FileShare share) {
- Long key = null;
- boolean save = fileShareService.save(share);
- if (save) {
- key = share.getId();
- redis.setEx(String.valueOf(key), 0, Duration.ofDays(3));
- }
- return key;
- }
- @Override
- public List<FileAttach> getShare(Long id) {
- List<FileAttach> res = new ArrayList<>();
- boolean available = isAvailable(String.valueOf(id));
- if (available) {
- FileShare byId = fileShareService.getById(id);
- if (byId != null) {
- String bladeFileIds = byId.getBladeFileIds();
- R<List<FileAttach>> rpc = fileClient.fileList(bladeFileIds);
- if (rpc.isSuccess()) {
- res = rpc.getData();
- }
- }
- }
- return res;
- }
- /**
- * 判断二维码是否有效和是否达到扫描上限
- */
- private boolean isExist(String key) {
- boolean flag = false;
- Boolean exists = redis.exists(key);
- //如果存在
- if (exists) {
- Long count = redis.incrBy(key, 1);
- if (count > scanCount) {
- throw new ServiceException("二维码只能扫描" + scanCount + "次数");
- } else {
- flag = true;
- }
- }
- return flag;
- }
- private boolean isAvailable(String key) {
- boolean flag = false;
- Boolean exists = redis.exists(key);
- //如果存在
- if (exists) {
- Long count = redis.incrBy(key, 1);
- if (count > 20) {
- throw new ServiceException("二维码只能扫描" + 20 + "次数");
- } else {
- flag = true;
- }
- }
- return flag;
- }
- }
|