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 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.exception.BusinessException;
import com.fdkankan.fyun.face.FYunFileServiceInterface;
import com.fdkankan.model.constants.UploadFilePath;
import com.fdkankan.scene.entity.SceneDynamicPanel;
import com.fdkankan.scene.entity.SceneEditInfo;
import com.fdkankan.scene.entity.ScenePlus;
import com.fdkankan.scene.mapper.ISceneDynamicPanelMapper;
import com.fdkankan.scene.service.ISceneDynamicPanelService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.scene.service.ISceneEditInfoService;
import com.fdkankan.scene.service.IScenePlusService;
import com.fdkankan.scene.vo.BaseJsonDataParamVO;
import com.fdkankan.scene.vo.SceneDynamicPanelVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 场景动态面板 服务实现类
*
*
* @author
* @since 2024-05-21
*/
@Service
public class SceneDynamicPanelServiceImpl extends ServiceImpl implements ISceneDynamicPanelService {
@Resource
private FYunFileServiceInterface fileServiceInterface;
@Autowired
private ISceneEditInfoService sceneEditInfoService;
@Autowired
private IScenePlusService scenePlusService;
@Override
public List list(String num) {
List list = this.list(new LambdaQueryWrapper().eq(SceneDynamicPanel::getNum, num));
return BeanUtil.copyToList(list, SceneDynamicPanelVO.class);
}
@Override
public void update(BaseJsonDataParamVO param) {
JSONObject data = param.getData();
String sid = data.getString("sid");
if(StrUtil.isEmpty(sid)){
throw new BusinessException(ErrorCode.FAILURE_CODE_3001, "sid can not be null");
}
ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
SceneDynamicPanel one = this.getOne(new LambdaQueryWrapper().eq(SceneDynamicPanel::getNum, param.getNum()).eq(SceneDynamicPanel::getSid, sid));
if(Objects.isNull(one)){
throw new BusinessException(ErrorCode.FAILURE_CODE_3001, "sid error");
}
//上传文件
String editPath = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum()) + "dynamicPanel.json";
String viewPath = String.format(UploadFilePath.USER_VIEW_PATH, param.getNum()) + "dynamicPanel.json";
String fileContent = fileServiceInterface.getFileContent(editPath);
JSONArray jsonArray = JSON.parseArray(fileContent);
Map map = new HashMap<>();
jsonArray.stream().forEach(v->{
JSONObject obj = (JSONObject) v;
map.put(obj.getString("sid"), obj);
});
JSONObject oldObj = map.get(sid);
if(Objects.nonNull(oldObj)){
data.put("text", oldObj.get("text"));
}
map.put(sid, data);
Collection values = map.values();
fileServiceInterface.uploadFile(JSON.toJSONString(values).getBytes(StandardCharsets.UTF_8), editPath);
fileServiceInterface.uploadFile(JSON.toJSONString(values).getBytes(StandardCharsets.UTF_8), viewPath);
//更新版本号
SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
sceneEditInfoService.upgradeVersionById(sceneEditInfo.getId());
}
@Override
public Byte checkDynamicPanel(String num) {
Long count = this.count(new LambdaQueryWrapper().eq(SceneDynamicPanel::getNum, num));
return count > 0 ? CommonStatus.YES.code() : CommonStatus.NO.code();
}
}