孙永军 hai 1 ano
pai
achega
5d7caf89d0

+ 18 - 4
src/main/java/com/sxtvs/open/api/review/controller/ReviewImgRecordController.java

@@ -7,10 +7,7 @@ import com.sxtvs.open.api.review.entity.ReviewImgRecord;
 import com.sxtvs.open.api.review.service.impl.ReviewImgRecordServiceImpl;
 import com.sxtvs.open.core.auth.LoginRequired;
 import jakarta.annotation.Resource;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.HashMap;
@@ -40,6 +37,17 @@ public class ReviewImgRecordController {
         return Map.of("url", ossService.vcrPut(file));
     }
 
+    @PostMapping("uploads")
+    @LoginRequired
+    public void upload(@RequestParam("title") String title, @RequestParam("files") MultipartFile[] file){
+        for( MultipartFile multipartFile : file){
+            ReviewImgRecord reviewImgRecord = new ReviewImgRecord();
+            reviewImgRecord.setTitle(title);
+            reviewImgRecord.setUrl(ossService.vcrPut(multipartFile));
+            reviewImgRecordService.store(reviewImgRecord);
+        }
+    }
+
     @PostMapping("store")
     @LoginRequired
     public ReviewImgRecord store(@RequestBody ReviewImgRecord reviewImgRecord){
@@ -51,4 +59,10 @@ public class ReviewImgRecordController {
     public Page<ReviewImgRecord> list(@RequestBody PageReqDTO pageReqDTO){
         return reviewImgRecordService.list(pageReqDTO);
     }
+
+    @GetMapping("del")
+    @LoginRequired
+    public void del(@RequestParam("id") Long id){
+        reviewImgRecordService.removeById(id);
+    }
 }

+ 18 - 4
src/main/java/com/sxtvs/open/api/review/controller/ReviewVideosRecordController.java

@@ -8,10 +8,7 @@ import com.sxtvs.open.api.review.entity.ReviewVideosRecord;
 import com.sxtvs.open.api.review.service.impl.ReviewVideosRecordServiceImpl;
 import com.sxtvs.open.core.auth.LoginRequired;
 import jakarta.annotation.Resource;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.HashMap;
@@ -41,6 +38,17 @@ public class ReviewVideosRecordController {
         return Map.of("url", ossService.vcrPut(file));
     }
 
+    @PostMapping("uploads")
+    @LoginRequired
+    public void upload(@RequestParam("title") String title, @RequestParam("files") MultipartFile[] file){
+        for( MultipartFile multipartFile : file){
+            ReviewVideosRecord reviewVideosRecord = new ReviewVideosRecord();
+            reviewVideosRecord.setTitle(title);
+            reviewVideosRecord.setUrl(ossService.vcrPut(multipartFile));
+            reviewVideoRecordService.store(reviewVideosRecord);
+        }
+    }
+
     @PostMapping("store")
     @LoginRequired
     public ReviewVideosRecord store(@RequestBody ReviewVideosRecord reviewVideosRecord){
@@ -52,4 +60,10 @@ public class ReviewVideosRecordController {
     public Page<ReviewVideosRecord> list(@RequestBody PageReqDTO pageReqDTO){
         return reviewVideoRecordService.list(pageReqDTO);
     }
+
+    @GetMapping("del")
+    @LoginRequired
+    public void del(@RequestParam("id") Long id){
+        reviewVideoRecordService.removeById(id);
+    }
 }

+ 35 - 14
src/main/java/com/sxtvs/open/api/review/service/impl/ReviewImgRecordServiceImpl.java

@@ -24,6 +24,7 @@ import java.sql.Wrapper;
 import java.time.LocalDateTime;
 import java.util.Arrays;
 import java.util.Optional;
+import java.util.concurrent.ThreadPoolExecutor;
 
 /**
  * <p>
@@ -40,32 +41,42 @@ public class ReviewImgRecordServiceImpl extends ServiceImpl<ReviewImgRecordMappe
     @Resource
     private VcrService vcrService;
 
+    @Resource
+    private ThreadPoolExecutor threadPoolExecutor;
+
     public ReviewImgRecord store(ReviewImgRecord reviewImgRecord) {
         Optional<String> token = HttpContextUtil.getToken();
 
         String uid = AESUtil.decryptStr(token.get());
         reviewImgRecord.setUid(Long.valueOf(uid));
         reviewImgRecord.setCreateTime(LocalDateTime.now());
-        ResponseEntity<ImgReviewResp> resp = vcrService.reviewImg(JSON.toJSONString(ImmutableMap.of("source", reviewImgRecord.getUrl())));
-        ImgReviewResp body = resp.getBody();
-
-        if (null == body){
-            log.error("图片审核失败 {}", resp.getStatusCode());
-            this.save(reviewImgRecord);
-            throw new BizException("图片审核失败,系统正在尝试重新提交,请稍后");
-        }
-        body.fill();
-        reviewImgRecord.setTaskId(body.getTaskId());
-
+        reviewImgRecord.setStatus("PROVISIONING");
         if(TextUtils.isEmpty(reviewImgRecord.getTitle())){
             String[] extension = reviewImgRecord.getUrl().split("/");
             reviewImgRecord.setTitle(extension[extension.length - 1]);
         }
 
-        reviewImgRecord.setStatus(body.getStatus());
-        reviewImgRecord.setResult(JSON.toJSONString(body));
-        reviewImgRecord.setReviewResult(body);
         this.save(reviewImgRecord);
+
+        threadPoolExecutor.execute(() -> {
+            ResponseEntity<ImgReviewResp> resp = vcrService.reviewImg(JSON.toJSONString(ImmutableMap.of("source", reviewImgRecord.getUrl())));
+            ImgReviewResp body = resp.getBody();
+
+            if (null == body){
+                log.error("图片审核失败 {}", resp.getStatusCode());
+                this.save(reviewImgRecord);
+                throw new BizException("图片审核失败,系统正在尝试重新提交,请稍后");
+            }
+            body.fill();
+            reviewImgRecord.setTaskId(body.getTaskId());
+
+            reviewImgRecord.setStatus(body.getStatus());
+            reviewImgRecord.setResult(JSON.toJSONString(body));
+            reviewImgRecord.setReviewResult(body);
+            updateById(reviewImgRecord);
+
+        });
+
         return reviewImgRecord;
     }
 
@@ -96,4 +107,14 @@ public class ReviewImgRecordServiceImpl extends ServiceImpl<ReviewImgRecordMappe
                         .like(!TextUtils.isEmpty(pageReqDTO.getTitle()), ReviewImgRecord::getTitle, pageReqDTO.getTitle())
         );
     }
+
+    public void delete(Long id) {
+        Optional<String> token = HttpContextUtil.getToken();
+        String uid = AESUtil.decryptStr(token.get());
+        ReviewImgRecord reviewImgRecord = this.getById(id);
+        if (!reviewImgRecord.getUid().equals(Long.valueOf(uid))){
+            throw new BizException("无权删除");
+        }
+        this.removeById(id);
+    }
 }

+ 11 - 1
src/main/java/com/sxtvs/open/api/review/service/impl/ReviewVideosRecordServiceImpl.java

@@ -86,7 +86,7 @@ public class ReviewVideosRecordServiceImpl extends ServiceImpl<ReviewVideosRecor
             // 图片本地化
             body.getResults().forEach(result -> result.getItems().forEach(item -> {
                 VideoReviewResp.ResultsDTO.ItemsDTO.EvidenceDTO evidence = item.getEvidence();
-                if (!TextUtils.isEmpty(evidence.getThumbnail())){
+                if (evidence != null && !TextUtils.isEmpty(evidence.getThumbnail())){
                     evidence.setThumbnail(ossService.vcr2local(evidence.getThumbnail(), reviewVideosRecord.getTaskId()));
                 }
             }));
@@ -110,4 +110,14 @@ public class ReviewVideosRecordServiceImpl extends ServiceImpl<ReviewVideosRecor
         return baseMapper.selectPage(page, wrapper.eq(ReviewVideosRecord::getUid, Long.valueOf(uid))
                 .like(!TextUtils.isEmpty(pageReqDTO.getTitle()), ReviewVideosRecord::getTitle, pageReqDTO.getTitle()));
     }
+
+    public void delete(Long id) {
+        Optional<String> token = HttpContextUtil.getToken();
+        String uid = AESUtil.decryptStr(token.get());
+        ReviewVideosRecord reviewVideosRecord = this.getById(id);
+        if (!reviewVideosRecord.getUid().equals(Long.valueOf(uid))){
+            throw new BizException("无权删除");
+        }
+        this.removeById(id);
+    }
 }

+ 30 - 0
src/main/java/com/sxtvs/open/core/conf/ThreadPoolFactory.java

@@ -0,0 +1,30 @@
+package com.sxtvs.open.core.conf;
+
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+@Configuration
+public class ThreadPoolFactory {
+
+    @Bean(name="threadPoolExecutor")
+    public ThreadPoolExecutor getThreadPool(){
+        // 给线程指定名称,方便查看线程编号
+        ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
+                .setNameFormat("conf-thread-pool-%d").build();
+
+        // 创建线程池
+
+        return new ThreadPoolExecutor(24,
+                128,
+                300,
+                TimeUnit.SECONDS,
+                new LinkedBlockingQueue<>(),
+                namedThreadFactory);
+    }
+}