SceneCleanOrigServiceImpl.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package com.fdkankan.scene.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.exceptions.ExceptionUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import com.alibaba.fastjson.JSON;
  6. import com.alibaba.fastjson.JSONObject;
  7. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8. import com.fdkankan.common.constant.CommonStatus;
  9. import com.fdkankan.common.constant.CommonSuccessStatus;
  10. import com.fdkankan.common.constant.OperationType;
  11. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  12. import com.fdkankan.model.constants.ConstantFilePath;
  13. import com.fdkankan.scene.bean.SceneBean;
  14. import com.fdkankan.scene.entity.SceneCleanOrig;
  15. import com.fdkankan.scene.mapper.ISceneCleanOrigMapper;
  16. import com.fdkankan.scene.mapper.IScenePlusExtMapper;
  17. import com.fdkankan.scene.service.ISceneCleanOrigService;
  18. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  19. import com.fdkankan.scene.service.IScenePlusExtService;
  20. import com.fdkankan.scene.service.IScenePlusService;
  21. import com.fdkankan.scene.service.ISceneProService;
  22. import lombok.extern.slf4j.Slf4j;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.beans.factory.annotation.Value;
  25. import org.springframework.stereotype.Service;
  26. import sun.font.TextRecord;
  27. import java.util.Date;
  28. import java.util.List;
  29. import java.util.Objects;
  30. /**
  31. * <p>
  32. * 删除oss原始资源记录 服务实现类
  33. * </p>
  34. *
  35. * @author
  36. * @since 2023-03-29
  37. */
  38. @Slf4j
  39. @Service
  40. public class SceneCleanOrigServiceImpl extends ServiceImpl<ISceneCleanOrigMapper, SceneCleanOrig> implements ISceneCleanOrigService {
  41. @Value("${scene.cleanOrig.month}")
  42. private Integer cleanOrigMonth;
  43. @Autowired
  44. private ISceneProService sceneProService;
  45. @Autowired
  46. private IScenePlusService scenePlusService;
  47. @Autowired
  48. private IScenePlusExtService scenePlusExtService;
  49. @Autowired
  50. private FYunFileServiceInterface fYunFileService;
  51. @Override
  52. public void cleanOrigV4() {
  53. //查询所有计算时间超过限定时间的场景,计算成功、未被删除、最后一次计算后未被删除过的
  54. List<SceneBean> sceneBeans = scenePlusService.listCleanOrigScene(cleanOrigMonth);
  55. if(CollUtil.isEmpty(sceneBeans)){
  56. return;
  57. }
  58. sceneBeans.parallelStream().forEach(scene->{
  59. this.cleanOrigHandler(scene);
  60. });
  61. }
  62. @Override
  63. public void cleanOrigV3() {
  64. //查询所有计算时间超过限定时间的场景,计算成功、未被删除
  65. List<SceneBean> sceneBeans = sceneProService.listCleanOrigScene(cleanOrigMonth);
  66. if(CollUtil.isEmpty(sceneBeans)){
  67. return;
  68. }
  69. sceneBeans.parallelStream().forEach(scene->{
  70. this.cleanOrigHandler(scene);
  71. });
  72. }
  73. private void cleanOrigHandler(SceneBean scene){
  74. try {
  75. int successStatus = CommonSuccessStatus.SUCCESS.code();
  76. String reason = null;
  77. String dataSource = scene.getDataSource();
  78. if(StrUtil.isNotEmpty(dataSource)){
  79. String homePath = dataSource.replace(ConstantFilePath.BUILD_MODEL_PATH, ConstantFilePath.OSS_PREFIX);
  80. //由于国内测试和生产用的bucket是同一个,这里需要做一个安全校验,保证不会删错
  81. String fileContent = fYunFileService.getFileContent(homePath.concat("/").concat("data.fdage"));
  82. if(StrUtil.isNotBlank(fileContent)){
  83. JSONObject jsonObject = JSON.parseObject(fileContent);
  84. String snCode = jsonObject.getJSONObject("cam").getString("uuid");
  85. String uuidTime = jsonObject.getString("uuidtime");
  86. if(StrUtil.isEmpty(snCode)
  87. || StrUtil.isEmpty(uuidTime)
  88. || !homePath.contains(snCode)
  89. || !homePath.contains(snCode.concat("_").concat(uuidTime))){
  90. successStatus = CommonSuccessStatus.FAIL.code();
  91. reason = "dataSource与data.fdage文件不匹配";
  92. }else{
  93. fYunFileService.deleteFolder(homePath);
  94. }
  95. }
  96. }
  97. this.saveLog(scene.getNum(), successStatus, reason);
  98. }catch (Exception e){
  99. log.error("删除原始资源失败,num : " + scene.getNum(), e);
  100. this.saveLog(scene.getNum(), CommonSuccessStatus.FAIL.code(), ExceptionUtil.stacktraceToString(e, 3000));
  101. }
  102. }
  103. private void saveLog(String num, int status, String reason){
  104. //清除旧的日志
  105. this.remove(new LambdaQueryWrapper<SceneCleanOrig>().eq(SceneCleanOrig::getNum, num));
  106. SceneCleanOrig sceneCleanOrig = new SceneCleanOrig();
  107. sceneCleanOrig.setNum(num);
  108. sceneCleanOrig.setState(status);
  109. sceneCleanOrig.setReason(reason);
  110. this.saveOrUpdate(sceneCleanOrig);
  111. }
  112. }