SceneCleanOrigServiceImpl.java 5.0 KB

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