package com.doumee.service.business.impl.hksync; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.request.*; import com.doumee.core.haikang.model.param.respose.*; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; import com.doumee.dao.business.DeviceMapper; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.net.URLEncoder; /** * 设备信息表Service实现 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service public class HkSyncLoginAuthServiceImpl extends HkSyncBaseServiceImpl { @Autowired private DeviceMapper deviceMapper; @Autowired private RedisTemplate redisTemplate; @Autowired private SystemDictDataBiz systemDictDataBiz; /** * 同步海康门禁设备数据 * @param param * @return */ @Override public String getServiceUrl(HKGetServiceLoginUrlRequest param){ if(StringUtils.isBlank(param.getLabel())||StringUtils.isBlank(param.getUsername())){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,登录组件失败,请稍后重试!"); } //优先从缓存取数据,如果有缓存,直接返回缓存地址 /*String cacheUrl = (String) redisTemplate.opsForValue().get(Constants.REDIS_HK_TOKEN_KEY+param.getUsername()+param.getLabel()); if(StringUtils.isNotBlank(cacheUrl)){ return cacheUrl; }*/ String url = systemDictDataBiz.queryByCode(Constants.HK_PARAM,param.getLabel()).getCode(); if(StringUtils.isBlank(url)){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } ApplyCTGTRequest ctgtParam = new ApplyCTGTRequest(); ctgtParam.setLanguage("zh_CN"); ctgtParam.setUserCode(param.getUsername()); ctgtParam.setLoginType("2"); BaseResponse response = HKService.applyCTGT(ctgtParam); if(response !=null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) &&response.getData()!=null &&StringUtils.isNotBlank(response.getData().getCTGT())){ //处理新增成功的数据,修改海康同步状态 String ctgt = response.getData().getCTGT(); ApplySTequest stParam = new ApplySTequest(); stParam.setCtgt(ctgt); stParam.setService(url); BaseResponse result = HKService.applyST(stParam); if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) &&result.getData()!=null &&StringUtils.isNotBlank(result.getData().getST())){ //处理新增成功的数据,修改海康同步状态 String st = result.getData().getST(); try { String serviceUrl = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_NGINX_URL).getCode() +(HKConstants.InterfacePath.tokenLoginUrl[0].replace("${st}", st).replace("${service}", URLEncoder.encode(url, "UTF-8"))); // redisTemplate.opsForValue().set(Constants.REDIS_HK_TOKEN_KEY+param.getUsername()+param.getLabel(),serviceUrl,1, TimeUnit.HOURS); return serviceUrl; }catch (Exception e){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,登录组件失败,请稍后重试!"); } }else{ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,登录组件失败,请稍后重试!"); } }else{ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,登录组件失败,请稍后重试!"); } } }