|
@@ -0,0 +1,257 @@
|
|
|
+package com.qmth.eds.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.qmth.boot.core.solar.config.SolarProperties;
|
|
|
+import com.qmth.boot.core.solar.model.AppInfo;
|
|
|
+import com.qmth.boot.core.solar.model.OrgInfo;
|
|
|
+import com.qmth.boot.core.solar.service.SolarService;
|
|
|
+import com.qmth.eds.bean.dto.AuthOrgInfoDto;
|
|
|
+import com.qmth.eds.common.contant.SystemConstant;
|
|
|
+import com.qmth.eds.common.entity.BasicSchool;
|
|
|
+import com.qmth.eds.common.entity.SysOrg;
|
|
|
+import com.qmth.eds.common.entity.TSAuth;
|
|
|
+import com.qmth.eds.common.enums.AuthEnum;
|
|
|
+import com.qmth.eds.common.enums.ExceptionResultEnum;
|
|
|
+import com.qmth.eds.common.enums.UploadFileEnum;
|
|
|
+import com.qmth.eds.common.util.FileStoreUtil;
|
|
|
+import com.qmth.eds.core.config.DictionaryConfig;
|
|
|
+import com.qmth.eds.mapper.BasicSchoolMapper;
|
|
|
+import com.qmth.eds.mapper.SysOrgMapper;
|
|
|
+import com.qmth.eds.mapper.TSAuthMapper;
|
|
|
+import com.qmth.eds.service.*;
|
|
|
+import org.apache.commons.codec.digest.DigestUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileInputStream;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 授权信息service
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class AuthInfoServiceImpl implements AuthInfoService {
|
|
|
+ private final static Logger log = LoggerFactory.getLogger(AuthInfoServiceImpl.class);
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ SolarProperties solarProperties;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ SolarService solarService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ TSAuthService tsAuthService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ TSAuthMapper tsAuthMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ CommonCacheService commonCacheService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ BasicSchoolService basicSchoolService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ BasicSchoolMapper basicSchoolMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ FileStoreUtil fileStoreUtil;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ DictionaryConfig dictionaryConfig;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ AuthInfoService authInfoService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ SysOrgService sysOrgService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ SysOrgMapper sysOrgMapper;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 授权信息初始化
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public AppInfo appInfoInit() {
|
|
|
+ AppInfo appInfo = null;
|
|
|
+ try {
|
|
|
+ appInfo = solarService.getAppInfo();
|
|
|
+ if (Objects.nonNull(appInfo) && Objects.nonNull(solarProperties)) {
|
|
|
+ if (Objects.nonNull(solarProperties.getAccessKey())
|
|
|
+ && !Objects.equals(solarProperties.getAccessKey().trim(), "")
|
|
|
+ && Objects.nonNull(solarProperties.getAccessSecret())
|
|
|
+ && !Objects.equals(solarProperties.getAccessSecret().trim(), "")) {//在线激活
|
|
|
+ authInfoService.saveAuthInfo(appInfo, AuthEnum.ON_LINE, null);
|
|
|
+ } else if (Objects.nonNull(solarProperties.getLicense())
|
|
|
+ && !Objects.equals(solarProperties.getLicense().trim(), "")) {//离线激活
|
|
|
+ authInfoService.saveAuthInfo(appInfo, AuthEnum.OFF_LINE, null);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ QueryWrapper<TSAuth> tsAuthQueryWrapper = new QueryWrapper<>();
|
|
|
+ tsAuthQueryWrapper.lambda().isNotNull(TSAuth::getFile);
|
|
|
+ List<TSAuth> tsAuthList = tsAuthService.list(tsAuthQueryWrapper);
|
|
|
+ if (!CollectionUtils.isEmpty(tsAuthList)) {
|
|
|
+ for (TSAuth t : tsAuthList) {
|
|
|
+ appInfo = solarService.update(t.getFile());
|
|
|
+ authInfoService.saveAuthInfo(appInfo, AuthEnum.OFF_LINE, t.getFile());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return appInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * app是否过期
|
|
|
+ *
|
|
|
+ * @param code
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void appHasExpired(String code) {
|
|
|
+ if (Objects.nonNull(code)) {
|
|
|
+ AuthOrgInfoDto authOrgInfoDto = commonCacheService.authInfoCache(code);
|
|
|
+ if (Objects.isNull(authOrgInfoDto) || (Objects.nonNull(authOrgInfoDto) && authOrgInfoDto.getControl().hasExpired())) {
|
|
|
+ throw ExceptionResultEnum.AUTH_INFO_ERROR.exception();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 离线激活
|
|
|
+ *
|
|
|
+ * @param licenseData
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void updateLicense(byte[] licenseData) throws Exception {
|
|
|
+ AppInfo appInfo = solarService.update(licenseData);
|
|
|
+ if (Objects.isNull(appInfo)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("激活失败");
|
|
|
+ }
|
|
|
+ authInfoService.saveAuthInfo(appInfo, AuthEnum.OFF_LINE, licenseData);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询授权信息
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Long selectAuthInfo() {
|
|
|
+ Long expireTime = null;
|
|
|
+ AppInfo appInfo = solarService.getAppInfo();
|
|
|
+ if (Objects.nonNull(appInfo) && Objects.nonNull(appInfo.getControl())) {
|
|
|
+ expireTime = Objects.nonNull(appInfo.getControl().getExpireTime()) ? appInfo.getControl().getExpireTime() : -1;
|
|
|
+ }
|
|
|
+ return expireTime;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存鉴权信息
|
|
|
+ *
|
|
|
+ * @param appInfo
|
|
|
+ * @param authEnum
|
|
|
+ * @param file
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public void saveAuthInfo(AppInfo appInfo, AuthEnum authEnum, byte[] file) throws Exception {
|
|
|
+ List<OrgInfo> orgInfoList = solarService.getOrgList();
|
|
|
+ List<TSAuth> tsAuthList = null;
|
|
|
+ Set<Long> orgIdsSet = null;
|
|
|
+ Set<BasicSchool> basicSchoolSet = null;
|
|
|
+ Set<SysOrg> sysOrgSet = null;
|
|
|
+ if (!CollectionUtils.isEmpty(orgInfoList)) {
|
|
|
+ tsAuthList = new ArrayList<>();
|
|
|
+ orgIdsSet = new HashSet<>();
|
|
|
+ basicSchoolSet = new HashSet<>();
|
|
|
+ sysOrgSet = new HashSet<>();
|
|
|
+ }
|
|
|
+ boolean oss = dictionaryConfig.sysDomain().isOss();
|
|
|
+ for (OrgInfo o : orgInfoList) {
|
|
|
+ orgIdsSet.add(o.getId());
|
|
|
+ if (authEnum == AuthEnum.OFF_LINE) {
|
|
|
+ if (Objects.isNull(file)) {
|
|
|
+ tsAuthList.add(new TSAuth(o.getId(), solarProperties.getLicense(), authEnum, appInfo.getControl().getExpireTime()));
|
|
|
+ } else {
|
|
|
+ tsAuthList.add(new TSAuth(o.getId(), file, authEnum, appInfo.getControl().getExpireTime()));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ tsAuthList.add(new TSAuth(o.getId(), solarProperties.getAccessKey(), solarProperties.getAccessSecret(), authEnum, appInfo.getControl().getExpireTime()));
|
|
|
+ }
|
|
|
+ if (Objects.isNull(commonCacheService.updateAuthInfoCache(o.getCode()))) {
|
|
|
+ commonCacheService.removeAuthInfoCache(o.getCode());
|
|
|
+ }
|
|
|
+
|
|
|
+ QueryWrapper<BasicSchool> basicSchoolQueryWrapper = new QueryWrapper<>();
|
|
|
+ basicSchoolQueryWrapper.lambda().eq(BasicSchool::getCode, o.getCode());
|
|
|
+ BasicSchool basicSchool = basicSchoolService.getOne(basicSchoolQueryWrapper);
|
|
|
+ if (Objects.isNull(basicSchool)) {//不存在则创建学校
|
|
|
+ basicSchool = new BasicSchool(o.getId(), o.getCode(), o.getName(), o.getAccessKey(), o.getAccessSecret());
|
|
|
+ if (Objects.nonNull(o.getLogo()) && (!o.getLogo().startsWith("https:") || !o.getLogo().startsWith("http"))) {
|
|
|
+ String filePath = dictionaryConfig.fssLocalFileDomain().getConfig() + File.separator + SystemConstant.getUuid() + ".jpg";
|
|
|
+ File logoFile = new File(filePath);
|
|
|
+ if (!logoFile.getParentFile().exists()) {
|
|
|
+ // 不存在则创建父目录及子文件
|
|
|
+ logoFile.getParentFile().mkdirs();
|
|
|
+ logoFile.createNewFile();
|
|
|
+ }
|
|
|
+ SystemConstant.base64ToImage(o.getLogo(), filePath);
|
|
|
+
|
|
|
+ if (oss) {
|
|
|
+ LocalDateTime nowTime = LocalDateTime.now();
|
|
|
+ StringJoiner stringJoiner = new StringJoiner("");
|
|
|
+ stringJoiner.add(UploadFileEnum.FILE.name().toLowerCase()).add(File.separator)
|
|
|
+ .add(String.valueOf(nowTime.getYear())).add(File.separator)
|
|
|
+ .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
|
|
|
+ .add(String.format("%02d", nowTime.getDayOfMonth())).add(File.separator)
|
|
|
+ .add(SystemConstant.getUuid()).add(".jpg");
|
|
|
+ fileStoreUtil.ossUpload(stringJoiner.toString(), logoFile, DigestUtils.md5Hex(new FileInputStream(logoFile)), UploadFileEnum.FILE.getFssType());
|
|
|
+ logoFile.delete();
|
|
|
+ basicSchool.setLogo(fileStoreUtil.getPrivateUrl(stringJoiner.toString(), UploadFileEnum.FILE.getFssType()));
|
|
|
+ } else {
|
|
|
+ basicSchool.setLogo(filePath);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ basicSchool.setLogo(o.getLogo());
|
|
|
+ }
|
|
|
+ basicSchoolSet.add(basicSchool);
|
|
|
+ }
|
|
|
+
|
|
|
+ QueryWrapper<SysOrg> sysOrgQueryWrapper = new QueryWrapper<>();
|
|
|
+ sysOrgQueryWrapper.lambda().eq(SysOrg::getSchoolId, basicSchool.getId());
|
|
|
+ int count = sysOrgService.count(sysOrgQueryWrapper);
|
|
|
+ if (count == 0) {
|
|
|
+ sysOrgSet.add(new SysOrg(basicSchool.getId(), basicSchool.getName()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!CollectionUtils.isEmpty(tsAuthList) && !CollectionUtils.isEmpty(orgIdsSet)) {
|
|
|
+ QueryWrapper<TSAuth> tsAuthQueryWrapper = new QueryWrapper<>();
|
|
|
+ tsAuthQueryWrapper.lambda().in(TSAuth::getSchoolId, orgIdsSet);
|
|
|
+ tsAuthService.remove(tsAuthQueryWrapper);
|
|
|
+ tsAuthMapper.insertBatch(tsAuthList);
|
|
|
+
|
|
|
+ if (!CollectionUtils.isEmpty(basicSchoolSet)) {
|
|
|
+ commonCacheService.removeSchoolIdCache();
|
|
|
+ commonCacheService.removeSchoolCodeCache();
|
|
|
+ basicSchoolMapper.insertBatch(basicSchoolSet);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!CollectionUtils.isEmpty(sysOrgSet)) {
|
|
|
+ commonCacheService.removeOrgCache();
|
|
|
+ sysOrgMapper.insertBatch(sysOrgSet);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|