123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- package com.fdkankan.scene.service.impl;
- import cn.hutool.core.bean.BeanUtil;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.exceptions.ExceptionUtil;
- 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.ConstantFilePath;
- import com.fdkankan.common.constant.ErrorCode;
- import com.fdkankan.common.constant.UploadFilePath;
- import com.fdkankan.common.response.ResultData;
- import com.fdkankan.common.util.FileUtil;
- import com.fdkankan.common.util.FileUtils;
- import com.fdkankan.common.util.MatrixToImageWriterUtil;
- import com.fdkankan.fyun.oss.UploadToOssUtil;
- import com.fdkankan.rabbitmq.util.RabbitMqProducer;
- 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.bean.SceneJsonBean;
- import com.fdkankan.scene.entity.SceneEditControls;
- import com.fdkankan.scene.entity.SceneEditInfo;
- import com.fdkankan.scene.entity.SceneEditInfoExt;
- import com.fdkankan.scene.entity.ScenePlusExt;
- import com.fdkankan.scene.entity.ScenePro;
- import com.fdkankan.scene.entity.SceneProEdit;
- import com.fdkankan.scene.entity.SceneProEditExt;
- import com.fdkankan.scene.entity.SceneProEditV3;
- import com.fdkankan.scene.entity.SceneProExt;
- import com.fdkankan.scene.entity.SceneProV3;
- import com.fdkankan.scene.entity.SceneRepairLog;
- import com.fdkankan.scene.mapper.ISceneUpgradeMapper;
- import com.fdkankan.scene.service.ISceneEditControlsService;
- import com.fdkankan.scene.service.ISceneEditInfoExtService;
- import com.fdkankan.scene.service.ISceneEditInfoService;
- import com.fdkankan.scene.service.IScenePlusExtService;
- import com.fdkankan.scene.service.ISceneProEditExtService;
- import com.fdkankan.scene.service.ISceneProEditService;
- import com.fdkankan.scene.service.ISceneProEditV3Service;
- import com.fdkankan.scene.service.ISceneProExtService;
- import com.fdkankan.scene.service.ISceneProService;
- import com.fdkankan.scene.service.ISceneProV3Service;
- import com.fdkankan.scene.service.ISceneRepairLogService;
- import com.fdkankan.scene.service.ISceneUpgradeToV4Service;
- import com.fdkankan.scene.vo.SceneEditControlsVO;
- import com.fdkankan.scene.vo.UpgradeToV4ParamVO;
- import java.io.File;
- import java.util.Calendar;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- import java.util.Objects;
- import java.util.Set;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- /**
- * <p>
- * TODO
- * </p>
- *
- * @author dengsixing
- * @since 2022/4/21
- **/
- @Slf4j
- @Service
- public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service {
- @Value("${queue.scene.upgrade-to-v4}")
- private String upgradeToV4;
- @Autowired
- private ISceneProV3Service sceneProV3Service;
- @Autowired
- private ISceneProEditV3Service sceneProEditV3Service;
- @Autowired
- private ISceneUpgradeMapper sceneUpgradeMapper;
- @Autowired
- private RedisLockUtil redisLockUtil;
- @Autowired
- private ISceneRepairLogService sceneRepairLogService;
- @Autowired
- private RabbitMqProducer rabbitMqProducer;
- @Autowired
- private RedisUtil redisUtil;
- @Override
- public ResultData upgradeToV4(UpgradeToV4ParamVO param) {
- SceneProV3 sceneProV3 = JSON.parseObject(param.getScenePro(), SceneProV3.class);
- SceneProEditV3 sceneProEditV3 = JSON.parseObject(param.getSceneProEdit(), SceneProEditV3.class);
- //加锁
- String lockKey = String.format(RedisLockKey.LOCK_SCENE_UPGRADE_V4, sceneProV3.getNum());
- boolean lock = redisLockUtil.lock(lockKey,RedisKey.EXPIRE_TIME_2_HOUR);
- if(!lock){
- return ResultData.error(ErrorCode.FAILURE_CODE_7019);
- }
- try {
- //查询升级日志,如果已经升级成功,不允许重复升级
- SceneRepairLog sceneRepairLog = sceneRepairLogService.getOne(
- new LambdaQueryWrapper<SceneRepairLog>()
- .eq(SceneRepairLog::getNum, sceneProV3.getNum()));
- if(Objects.nonNull(sceneRepairLog)){
- if(sceneRepairLog.getState() == 0)
- return ResultData.error(ErrorCode.FAILURE_CODE_7019);
- if(sceneRepairLog.getState() == 1)
- return ResultData.error(ErrorCode.FAILURE_CODE_7020);
- }
- //写入sceneProV3
- sceneProV3Service.saveOrUpdate(sceneProV3);
- //写入sceneProEditV3
- sceneProEditV3Service.saveOrUpdate(sceneProEditV3);
- //写入写入sceneProEdit、写入sceneProEditExt
- sceneUpgradeMapper.transferSceneProEdit(sceneProEditV3.getId());
- sceneUpgradeMapper.transferSceneProEditExt(sceneProEditV3.getId());
- //同步到scenePro、sceneProExt
- sceneUpgradeMapper.transferScenePro(sceneProV3.getId());
- sceneUpgradeMapper.transferSceneProExt(sceneProV3.getId());
- //同步到scenePlus、scenePlus
- sceneUpgradeMapper.transferScenePlus(sceneProV3.getId());
- sceneUpgradeMapper.transferScenePlusExt(sceneProV3.getId());
- //todo 发送mq
- rabbitMqProducer.sendByWorkQueue(upgradeToV4, sceneProV3.getId());
- // TODO: 2022/4/22 写入进度条
- Map<String, Integer> progress = new HashMap<>();
- progress.put("status", 0);
- progress.put("progress", 0);
- redisUtil.set(RedisKey.scene_upgrade_progress_num, JSON.toJSONString(progress));
- }catch (Exception e){
- return ResultData.error(ErrorCode.FAILURE_CODE_7021);
- }finally {
- //解锁
- redisLockUtil.unlockLua(lockKey);
- }
- return ResultData.ok();
- }
- }
|