package com.fdkankan.scene.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fdkankan.common.constant.CommonStatus;
import com.fdkankan.common.constant.ErrorCode;
import com.fdkankan.common.constant.PayStatus;
import com.fdkankan.common.constant.SceneStatus;
import com.fdkankan.common.constant.ServerCode;
import com.fdkankan.common.constant.UploadFilePath;
import com.fdkankan.common.exception.BusinessException;
import com.fdkankan.common.response.Result;
import com.fdkankan.common.response.ResultData;
import com.fdkankan.common.util.DateExtUtil;
import com.fdkankan.fyun.oss.UploadToOssUtil;
import com.fdkankan.platform.api.feign.PlatformGoodsClient;
import com.fdkankan.platform.api.feign.PlatformUserClient;
import com.fdkankan.scene.bean.CameraBean;
import com.fdkankan.scene.bean.UserIncrementBean;
import com.fdkankan.scene.callback.FdkkMiniReqErrorCallback;
import com.fdkankan.scene.callback.FdkkMiniReqSuccessCallback;
import com.fdkankan.scene.entity.ScenePlus;
import com.fdkankan.scene.httpclient.FdkankanMiniClient;
import com.fdkankan.scene.service.ISceneEditInfoExtService;
import com.fdkankan.scene.service.ISceneEditInfoService;
import com.fdkankan.scene.service.ISceneEditService;
import com.fdkankan.scene.service.IScenePlusService;
import com.fdkankan.scene.service.ISceneProService;
import com.fdkankan.scene.service.ISceneUploadService;
import com.fdkankan.scene.vo.BaseDataParamVO;
import com.fdkankan.scene.vo.BaseSceneParamVO;
import com.fdkankan.scene.vo.DeleteFileParamVO;
import com.fdkankan.scene.vo.LocalesParamVO;
import com.fdkankan.scene.vo.SceneAuthVO;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;
/**
*
* TODO
*
*
* @author dengsixing
* @since 2022/3/11
**/
@Service
@RefreshScope
public class SceneEditServiceImpl implements ISceneEditService {
@Value("${oss.bucket:4dkankan}")
private String bucket;
@Value("${http.host.4dkankanMini}")
private String fkankanMiniHost;
@Autowired
ISceneProService sceneProService;
@Autowired
PlatformGoodsClient platformGoodsClient;
@Autowired
PlatformUserClient platformUserClient;
@Autowired
IScenePlusService scenePlusService;
@Autowired
private UploadToOssUtil uploadToOssUtil;
@Autowired
private ISceneUploadService sceneUploadService;
@Autowired
private ISceneEditInfoService sceneEditInfoService;
@Autowired
private ISceneEditInfoExtService sceneEditInfoExtService;
@Autowired
private FdkankanMiniClient fdkankanMiniClient;
@Override
public SceneAuthVO getAuth(BaseSceneParamVO param) throws Exception{
ScenePlus scenePlus = scenePlusService.getOne(
new LambdaQueryWrapper().eq(ScenePlus::getNum, param.getNum())
.eq(ScenePlus::getPayStatus, PayStatus.PAY.code())
.in(ScenePlus::getSceneStatus, SceneStatus.SUCCESS.code(), SceneStatus.NO_DISPLAY.code()));
if(scenePlus == null){
throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
}
//判断该场景是否属于增值权益
boolean isVip = false;
//获取该相机是否有权益
boolean isExpired = false;
// ResultData cameraResultData = platformGoodsClient.getCameraById(scenePlus.getCameraId());
// if(!cameraResultData.getSuccess()){
// throw new Exception(ServerCode.FEIGN_REQUEST_FAILD.message());
// }
// Camera camera = cameraResultData.getData();
// if(camera != null){
// ResultData incrementResultData = platformUserClient
// .getUserIncrementByCameraId(camera.getId());
// if(!incrementResultData.getSuccess()){
// throw new Exception(ServerCode.FEIGN_REQUEST_FAILD.message());
// }
// UserIncrement userIncrement = incrementResultData.getData();
// if(userIncrement != null){
// if( userIncrement.getIsExpired().intValue() == 0){
// isVip = true;
// }
// if(userIncrement.getIsExpired().intValue() == 1){
// isExpired = true;
// }
// }else{
// Date date = DateUtil.parse("2021-09-09 00:00:00", DateExtUtil.dateStyle);
//
// //非07批次的放开
// String pc = camera.getSnCode().substring(0,2);
// if(!pc.equals("07") ){
// if(camera.getCreateTime()!=null && date.after(camera.getCreateTime())){
// isVip = true;
// isExpired = false;
// }
// }
// }
// }
// TODO: 2022/4/25 v3v4共存过渡期结束需要删除,恢复上面注释内容 ------------------------------------------start
String url = fkankanMiniHost + "/api/user/increment/findByCameraId?cameraId=" + scenePlus.getCameraId();
Result userIncrementResult =
fdkankanMiniClient.getUserIncrementByCameraId(
url, new FdkkMiniReqSuccessCallback(), new FdkkMiniReqErrorCallback());
UserIncrementBean userIncrement = userIncrementResult.getData();
if(userIncrement != null){
if(userIncrement.getIsExpired() == 0){
isVip = true;
}
if(userIncrement.getIsExpired() == 1){
isExpired = true;
}
}else{
url = fkankanMiniHost + "/api/user/camera/getCameraByCameraId?cameraId=" + scenePlus.getCameraId();
Result cameraResult =
fdkankanMiniClient.getCameraByCameraId(
url,new FdkkMiniReqSuccessCallback(), new FdkkMiniReqErrorCallback());
CameraBean camera = cameraResult.getData();
if(camera == null || Objects.isNull(camera.getId())){
throw new BusinessException(ServerCode.FEIGN_REQUEST_FAILD);
}
Date date = DateUtil.parse("2021-09-09 00:00:00", DateExtUtil.dateStyle);
//非07批次的放开
String pc = camera.getSnCode().substring(0,2);
if(!pc.equals("07") ){
if(camera.getCreateTime()!=null && date.after(camera.getCreateTime())){
isVip = true;
isExpired = false;
}
}
}
// TODO: 2022/4/25 v3v4共存过渡期结束需要删除,恢复上面注释内容 ------------------------------------------end
return SceneAuthVO.builder().isExpired(isExpired).isVip(isVip).build();
}
@Override
public ResultData locales(LocalesParamVO param) throws Exception {
String key = "v4/www/locales/" + param.getFile();
uploadToOssUtil.upload(JSON.toJSONBytes(param.getData()), key);
return ResultData.ok();
}
@Override
public ResultData saveTour(BaseDataParamVO param) throws IOException {
String key = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum()) + "tour.json";
uploadToOssUtil.upload(param.getData().getBytes(StandardCharsets.UTF_8), key);
sceneEditInfoExtService.updateToursByNum(
param.getNum(), Integer.valueOf(CommonStatus.YES.code()));
return ResultData.ok();
}
@Override
public ResultData deleteTour(BaseSceneParamVO param) throws Exception {
String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum());
String tourJsonPath = userEditPath + "tour.json";
String tourJson = uploadToOssUtil.getObjectContent(bucket, tourJsonPath);
JSONArray tours = JSON.parseArray(tourJson);
if(CollUtil.isNotEmpty(tours)){
List fileNames = new ArrayList<>();
for (Object o : tours) {
JSONObject tour = (JSONObject)o;
JSONObject enter = tour.getJSONObject("enter");
if(Objects.nonNull(enter)){
String enterOver = enter.getString("cover");
if(StrUtil.isNotEmpty(enterOver)){
fileNames.add(enterOver);
}
}
JSONObject exit = tour.getJSONObject("exit");
if(Objects.nonNull(exit)){
String exitOver = exit.getString("cover");
if(StrUtil.isNotEmpty(exitOver)){
fileNames.add(exitOver);
}
}
String music = tour.getString("music");
if(StrUtil.isNotEmpty(music)){
fileNames.add( music);
}
}
//批量删除资源文件
if(CollUtil.isNotEmpty(fileNames)){
sceneUploadService.delete(
DeleteFileParamVO.builder()
.num(param.getNum()).bizType("tour").fileNames(fileNames)
.build());
}
}
//删除tour.json文件
uploadToOssUtil.delete(tourJsonPath);
sceneEditInfoExtService.updateToursByNum(
param.getNum(), Integer.valueOf(CommonStatus.NO.code()));
return ResultData.ok();
}
}