SceneAsynOperLogServiceImpl.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package com.fdkankan.scene.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.date.DateTime;
  4. import cn.hutool.core.date.DateUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  7. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  8. import com.fdkankan.common.constant.CommonOperStatus;
  9. import com.fdkankan.common.constant.CommonStatus;
  10. import com.fdkankan.common.constant.SceneAsynFuncType;
  11. import com.fdkankan.common.constant.SceneAsynModuleType;
  12. import com.fdkankan.common.constant.SceneAsynOperType;
  13. import com.fdkankan.scene.entity.SceneAsynOperLog;
  14. import com.fdkankan.scene.entity.ScenePlus;
  15. import com.fdkankan.scene.entity.ScenePlusExt;
  16. import com.fdkankan.scene.mapper.ISceneAsynOperLogMapper;
  17. import com.fdkankan.scene.oss.OssUtil;
  18. import com.fdkankan.scene.service.ISceneAsynOperLogService;
  19. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  20. import com.fdkankan.scene.service.IScenePlusExtService;
  21. import com.fdkankan.scene.service.IScenePlusService;
  22. import com.fdkankan.scene.vo.SceneAsynOperLogParamVO;
  23. import com.fdkankan.web.response.ResultData;
  24. import java.io.IOException;
  25. import java.nio.file.FileSystemException;
  26. import java.util.Calendar;
  27. import java.util.List;
  28. import java.util.stream.Collectors;
  29. import lombok.extern.slf4j.Slf4j;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.stereotype.Service;
  32. /**
  33. * <p>
  34. * 服务实现类
  35. * </p>
  36. *
  37. * @author
  38. * @since 2022-12-07
  39. */
  40. @Slf4j
  41. @Service
  42. public class SceneAsynOperLogServiceImpl extends ServiceImpl<ISceneAsynOperLogMapper, SceneAsynOperLog> implements ISceneAsynOperLogService {
  43. @Autowired
  44. private OssUtil ossUtil;
  45. @Autowired
  46. private IScenePlusService scenePlusService;
  47. @Autowired
  48. private IScenePlusExtService scenePlusExtService;
  49. @Override
  50. public ResultData getAsynOperLog(SceneAsynOperLogParamVO param) {
  51. LambdaQueryWrapper<SceneAsynOperLog> queryWrapper = new LambdaQueryWrapper<>();
  52. queryWrapper.eq(SceneAsynOperLog::getNum, param.getNum());
  53. if(StrUtil.isNotEmpty(param.getOperType())){
  54. queryWrapper.eq(SceneAsynOperLog::getOperType, param.getOperType());
  55. }
  56. if(StrUtil.isNotEmpty(param.getModule())){
  57. queryWrapper.eq(SceneAsynOperLog::getModule, param.getModule());
  58. }
  59. if(StrUtil.isNotEmpty(param.getFunc())){
  60. queryWrapper.eq(SceneAsynOperLog::getFunc, param.getFunc());
  61. }
  62. //需要弹窗的异步操作列表
  63. List<SceneAsynOperLog> list = this.list(queryWrapper);
  64. //如果列表中有需要弹窗并且处理完毕的,需要把这些数据改为不需要弹窗了,因为前端请求到之后就会弹出提示,下次不需要弹窗了
  65. if(CollUtil.isNotEmpty(list)){
  66. List<Long> idList = list.stream().filter(log -> {
  67. if(!log.getState().equals(CommonOperStatus.WAITING.code())){
  68. return true;
  69. }
  70. return false;
  71. }).map(log->log.getId()).collect(Collectors.toList());
  72. if(CollUtil.isNotEmpty(idList)){
  73. this.update(new LambdaUpdateWrapper<SceneAsynOperLog>()
  74. .set(SceneAsynOperLog::getPop, CommonStatus.NO.code())
  75. .in(SceneAsynOperLog::getId, idList));
  76. }
  77. }
  78. return ResultData.ok(list);
  79. }
  80. @Override
  81. public void cleanDownloadPanorama() {
  82. List<SceneAsynOperLog> downloadList = this.list(
  83. new LambdaQueryWrapper<SceneAsynOperLog>()
  84. .eq(SceneAsynOperLog::getOperType, SceneAsynOperType.DOWNLOAD.code())
  85. .eq(SceneAsynOperLog::getModule, SceneAsynModuleType.UPLOAD_DOWNLOAD.code())
  86. .eq(SceneAsynOperLog::getFunc, SceneAsynFuncType.PANORAMIC_IMAGE.code()));
  87. if(CollUtil.isEmpty(downloadList)){
  88. return;
  89. }
  90. DateTime preMonth = DateUtil.offsetMonth(Calendar.getInstance().getTime(), -1);
  91. List<SceneAsynOperLog> deleteList = downloadList.parallelStream().filter(log -> {
  92. if (log.getCreateTime().before(preMonth)) {
  93. return Boolean.TRUE;
  94. }
  95. return false;
  96. }).collect(Collectors.toList());
  97. if(CollUtil.isEmpty(deleteList)){
  98. return;
  99. }
  100. //删除数据库记录
  101. List<Long> deleteIdList = deleteList.parallelStream().map(item -> item.getId()).collect(Collectors.toList());
  102. this.removeByIds(deleteIdList);
  103. deleteList.parallelStream().forEach(item -> {
  104. if(StrUtil.isNotEmpty(item.getUrl())){
  105. try{
  106. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(item.getNum());
  107. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  108. ossUtil.deleteObject(scenePlusExt.getYunFileBucket(), item.getUrl());
  109. }catch (FileSystemException e){
  110. }
  111. }
  112. });
  113. }
  114. }