123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- package com.fdkankan.scene.service.impl;
- import cn.hutool.core.bean.BeanUtil;
- import cn.hutool.core.io.FileUtil;
- import cn.hutool.core.util.StrUtil;
- import cn.hutool.extra.qrcode.QrCodeUtil;
- import cn.hutool.extra.qrcode.QrConfig;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.fdkankan.common.constant.ErrorCode;
- import com.fdkankan.common.constant.PayStatus;
- import com.fdkankan.common.constant.SceneStatus;
- import com.fdkankan.common.exception.BusinessException;
- import com.fdkankan.fyun.face.FYunFileServiceInterface;
- import com.fdkankan.model.constants.ConstantFilePath;
- import com.fdkankan.model.constants.UploadFilePath;
- import com.fdkankan.scene.entity.SceneEditInfoExt;
- import com.fdkankan.scene.entity.ScenePro;
- import com.fdkankan.scene.service.ISceneEditInfoExtService;
- import com.fdkankan.scene.service.ISceneProService;
- import com.fdkankan.web.response.ResultData;
- import com.fdkankan.redis.constant.RedisKey;
- import com.fdkankan.redis.constant.RedisLockKey;
- import com.fdkankan.redis.util.RedisLockUtil;
- import com.fdkankan.redis.util.RedisUtil;
- import com.fdkankan.scene.entity.SceneDataDownload;
- import com.fdkankan.scene.entity.SceneEditInfo;
- import com.fdkankan.scene.entity.ScenePlus;
- import com.fdkankan.scene.entity.ScenePlusExt;
- import com.fdkankan.scene.mapper.IScenePlusMapper;
- import com.fdkankan.scene.service.ISceneDataDownloadService;
- import com.fdkankan.scene.service.ISceneEditInfoService;
- import com.fdkankan.scene.service.IScenePlusExtService;
- import com.fdkankan.scene.service.IScenePlusService;
- import com.fdkankan.scene.vo.BaseSceneParamVO;
- import com.fdkankan.scene.vo.SceneCheckKeyParamVO;
- import com.fdkankan.scene.vo.SceneDataDownloadVO;
- import java.io.File;
- import java.util.List;
- import java.util.Objects;
- import java.util.UUID;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.web.multipart.MultipartFile;
- /**
- * <p>
- * 场景主表 服务实现类
- * </p>
- *
- * @author
- * @since 2022-03-16
- */
- @Slf4j
- @Service
- public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlus> implements IScenePlusService {
- @Value("${main.url}")
- private String mainUrl;
- @Value("${scene.pro.new.url}")
- private String sceneProNewUrl;
- @Autowired
- private IScenePlusExtService scenePlusExtService;
- @Autowired
- private IScenePlusService scenePlusService;
- @Autowired
- private ISceneEditInfoService sceneEditInfoService;
- @Autowired
- private ISceneDataDownloadService sceneDataDownloadService;
- @Autowired
- private RedisUtil redisUtil;
- @Autowired
- private RedisLockUtil redisLockUtil;
- @Autowired
- private ISceneProService sceneProService;
- @Autowired
- private FYunFileServiceInterface fYunFileService;
- @Autowired
- private ISceneEditInfoExtService sceneEditInfoExtService;
- @Override
- public ScenePlus getScenePlusByNum(String num) {
- return this.getOne(new LambdaQueryWrapper<ScenePlus>().eq(ScenePlus::getNum, num));
- }
- @Override
- public ResultData checkKey(SceneCheckKeyParamVO param) throws Exception {
- ScenePlus scenePlus = scenePlusService.getOne(new LambdaQueryWrapper<ScenePlus>()
- .eq(ScenePlus::getNum, param.getNum())
- .eq(ScenePlus::getPayStatus, PayStatus.PAY.code()));
- if (Objects.isNull(scenePlus)) {
- throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
- }
- SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
- if (Objects.isNull(sceneEditInfo)) {
- throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
- }
- if(!param.getPassword().equals(sceneEditInfo.getScenePassword())){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5021);
- }
- return ResultData.ok();
- }
- @Override
- public ResultData updateScenePlusUserIdByCameraId(List<Long> cameraIdList, Long userId) {
- LambdaUpdateWrapper<ScenePlus> updateWrapper = new LambdaUpdateWrapper<ScenePlus>()
- .set(ScenePlus::getUserId, userId).in(ScenePlus::getCameraId, cameraIdList);
- this.update(updateWrapper);
- return ResultData.ok();
- }
- @Override
- public ResultData moveScene(List<String> numList, Long cameraId, Long userId) {
- LambdaUpdateWrapper<ScenePlus> updateWrapper =
- new LambdaUpdateWrapper<ScenePlus>()
- .set(ScenePlus::getUserId, userId)
- .set(ScenePlus::getCameraId, cameraId)
- .in(ScenePlus::getNum, numList);
- this.update(updateWrapper);
- return ResultData.ok();
- }
- @Override
- public ResultData downLoadZSData(String num) throws Exception {
- if(StrUtil.isEmpty(num)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
- }
- String version = "v4";
- ScenePlus scenePlus = this.getScenePlusByNum(num);
- ScenePro scenePro = null;
- if(Objects.isNull(scenePlus)){
- scenePro = sceneProService.getByNum(num);
- version = "v3";
- if(Objects.isNull(scenePro)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
- }
- }
- SceneDataDownload sceneDataDownload = sceneDataDownloadService.findBySceneNum(num);
- if(sceneDataDownload == null){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5025);
- }
- SceneDataDownloadVO sceneDataDownloadVO = BeanUtil.copyProperties(sceneDataDownload, SceneDataDownloadVO.class);
- sceneDataDownloadVO.setVersion(version);
- return ResultData.ok(sceneDataDownloadVO);
- }
- @Override
- public ScenePlus checkSceneAvail(String num) {
- ScenePlus scenePlus = this.getScenePlusByNum(num);
- if(Objects.isNull(scenePlus)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
- }
- if(!SceneStatus.SUCCESS.code().equals(scenePlus.getSceneStatus())
- && !SceneStatus.NO_DISPLAY.code().equals(scenePlus.getSceneStatus())){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5033);
- }
- if(!PayStatus.PAY.code().equals(scenePlus.getPayStatus())){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5034);
- }
- return scenePlus;
- }
- @Override
- public ResultData updateViewCount(String sceneNum) {
- String key = RedisKey.SCENE_VISIT_CNT;
- if(!redisUtil.hHasKey(key, sceneNum)){
- String lockKey = String.format(RedisLockKey.LOCK_SCENE_VISIT_CNT, sceneNum);
- String lockVal = cn.hutool.core.lang.UUID.randomUUID().toString();
- boolean lock = redisLockUtil.lock(lockKey, lockVal, RedisKey.EXPIRE_TIME_10_MINUTE);
- if(!lock){
- return ResultData.ok();
- }
- try {
- String cnt = redisUtil.hget(key, sceneNum);
- if(StrUtil.isEmpty(cnt)){
- //标记是否找到了场景,如果找到就不往下找
- Integer viewCount = null;
- ScenePlus scenePlus = scenePlusService.getScenePlusByNum(sceneNum);
- ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
- viewCount = scenePlusExt.getViewCount();
- redisUtil.hset(key, sceneNum, Objects.isNull(viewCount) ? "0" : String.valueOf(viewCount));
- }
- }finally {
- redisLockUtil.unlockLua(lockKey, lockVal);
- }
- }
- redisUtil.hincr(key, sceneNum, 1);
- return ResultData.ok();
- }
- @Override
- public ResultData uploadShareLogo(String num, MultipartFile file) throws Exception {
- ScenePlus scenePlus = this.getScenePlusByNum(num);
- if (Objects.isNull(scenePlus)) {
- return ResultData.error(ErrorCode.FAILURE_CODE_5005);
- }
- ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
- SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByScenePlusId(scenePlus.getId());
- String fileName = file.getOriginalFilename();
- String extName = fileName.substring(fileName.lastIndexOf("."));
- File newFile = File.createTempFile(UUID.randomUUID().toString() ,extName);
- file.transferTo(newFile);
- String logoPath = newFile.getPath();
- String outPathZh = ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+num+".png";
- String outPathEn = ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+num+"_en.png";
- String webSize = mainUrl + "/" + sceneProNewUrl + num;
- QrCodeUtil.generate(webSize, QrConfig.create().setImg(logoPath), FileUtil.file(outPathZh));
- QrCodeUtil.generate(webSize + "&lang=en", QrConfig.create().setImg(logoPath), FileUtil.file(outPathEn));
- //上传logo图片
- String ossLogoPath = String.format(UploadFilePath.DOWNLOADS_QRCODE, num) + "shareLogo" + extName;
- fYunFileService.uploadFile(scenePlusExt.getYunFileBucket(), logoPath, ossLogoPath);
- //上传二维码
- fYunFileService.uploadFile(scenePlusExt.getYunFileBucket(), outPathZh, String.format(UploadFilePath.DOWNLOADS_QRCODE, num) + num + ".png");
- fYunFileService.uploadFile(scenePlusExt.getYunFileBucket(), outPathEn, String.format(UploadFilePath.DOWNLOADS_QRCODE, num) + num + "_en.png");
- sceneEditInfoExt.setShareLogoImg(ossLogoPath);
- sceneEditInfoExtService.updateById(sceneEditInfoExt);
- FileUtil.del(newFile);
- FileUtil.del(new File(outPathEn));
- FileUtil.del(new File(outPathZh));
- return ResultData.ok();
- }
- }
|