package com.fdkankan.scene.service.impl;
import cn.hutool.core.io.FileUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.fdkankan.common.constant.ConstantFilePath;
import com.fdkankan.common.constant.ErrorCode;
import com.fdkankan.common.constant.PayStatus;
import com.fdkankan.common.constant.UploadFilePath;
import com.fdkankan.common.exception.BusinessException;
import com.fdkankan.common.response.ResultData;
import com.fdkankan.common.util.MatrixToImageWriterUtil;
import com.fdkankan.fyun.oss.UploadToOssUtil;
import com.fdkankan.platform.api.feign.PlatformGoodsClient;
import com.fdkankan.scene.entity.SceneEditInfo;
import com.fdkankan.scene.entity.ScenePlus;
import com.fdkankan.scene.entity.ScenePlusExt;
import com.fdkankan.scene.entity.ScenePro;
import com.fdkankan.scene.entity.SceneProEdit;
import com.fdkankan.scene.entity.SceneProExt;
import com.fdkankan.scene.mapper.IScenePlusMapper;
import com.fdkankan.scene.service.ISceneEditInfoService;
import com.fdkankan.scene.service.IScenePlusExtService;
import com.fdkankan.scene.service.IScenePlusService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.scene.vo.SceneCheckKeyParamVO;
import java.io.File;
import java.util.Calendar;
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;
/**
*
* 场景主表 服务实现类
*
*
* @author
* @since 2022-03-16
*/
@Slf4j
@Service
public class ScenePlusServiceImpl extends ServiceImpl implements IScenePlusService {
@Value("${main.url}")
private String mainUrl;
@Value("${scene.pro.new.url}")
private String sceneProNewUrl;
@Autowired
private IScenePlusExtService scenePlusExtService;
@Autowired
private PlatformGoodsClient platformGoodsClient;
@Autowired
private IScenePlusService scenePlusService;
@Autowired
private ISceneEditInfoService sceneEditInfoService;
@Autowired
private UploadToOssUtil uploadToOssUtil;
@Override
public ScenePlus getScenePlusByNum(String num) {
return this.getOne(new LambdaQueryWrapper().eq(ScenePlus::getNum, num));
}
@Override
public ResultData resetSpace(String num) throws Exception{
ScenePlus scenePlus = this.getScenePlusByNum(num);
ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
if(Objects.isNull(scenePlus)){
log.info("该场景不存在无法重置容量,场景码为:" + num);
return ResultData.error(ErrorCode.FAILURE_CODE_5058);
}
if (scenePlusExt.getSceneScheme() < 4){
log.info("该场景不属于八目相机无法重置容量,场景码为:" + num);
return ResultData.error(ErrorCode.FAILURE_CODE_5057);
}
platformGoodsClient.updateCameraDetailByCameraIdAndSpace(scenePlus.getCameraId(), -scenePlusExt.getSpace());
scenePlusExt.setSpace(Long.parseLong("0"));
scenePlusExtService.updateById(scenePlusExt);
return ResultData.ok();
}
@Override
public ResultData checkKey(SceneCheckKeyParamVO param) throws Exception {
// ScenePro scenePro = sceneProService.getOne(
// new LambdaQueryWrapper()
// .eq(ScenePro::getNum, param.getNum())
// .eq(ScenePro::getPayStatus, PayStatus.PAY.code()));
ScenePlus scenePlus = scenePlusService.getOne(new LambdaQueryWrapper()
.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 cameraIdList, Long userId) {
LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper()
.set(ScenePlus::getUserId, userId).in(ScenePlus::getCameraId, cameraIdList);
this.update(updateWrapper);
return ResultData.ok();
}
@Override
public ResultData moveScene(List numList, Long cameraId, Long userId) {
LambdaUpdateWrapper updateWrapper =
new LambdaUpdateWrapper()
.set(ScenePlus::getUserId, userId)
.set(ScenePlus::getCameraId, cameraId)
.in(ScenePlus::getNum, numList);
this.update(updateWrapper);
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());
String fileName = file.getOriginalFilename();
String extName = fileName.substring(fileName.lastIndexOf("."));
File newFile = File.createTempFile(UUID.randomUUID().toString() ,extName);
file.transferTo(newFile);
String logoPah = 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;
//生成新的分享的二维码-中文版本
MatrixToImageWriterUtil.createQRCode(webSize, outPathZh, true, logoPah);
//生成新的分享的二维码-英文版本
MatrixToImageWriterUtil.createQRCode(webSize + "&lang=en", outPathEn, true, logoPah);
//上传二维码
uploadToOssUtil.upload(outPathZh, String.format(UploadFilePath.DOWNLOADS_QRCODE, num) + num + ".png");
uploadToOssUtil.upload(outPathEn, String.format(UploadFilePath.DOWNLOADS_QRCODE, num) + num + "_en.png");
FileUtil.del(newFile);
FileUtil.del(new File(outPathEn));
FileUtil.del(new File(outPathZh));
return ResultData.ok();
}
}