Quellcode durchsuchen

1. 新增小票出错重试机制

semi vor 4 Jahren
Ursprung
Commit
0ccc050ca2

+ 4 - 0
src/main/java/com/pavis/ai/kwp/ioc/common/jobs/ReRecJob.java

@@ -1,6 +1,7 @@
 package com.pavis.ai.kwp.ioc.common.jobs;
 
 import com.pavis.ai.kwp.ioc.service.OcrGoodsService;
+import com.pavis.ai.kwp.ioc.service.OcrTripService;
 import lombok.extern.slf4j.Slf4j;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
@@ -14,11 +15,14 @@ public class ReRecJob extends QuartzJobBean {
 
     @Autowired
     private OcrGoodsService ocrGoodsService;
+    @Autowired
+    private OcrTripService ocrTripService;
 
     @Override
     @SuppressWarnings("NullableProblems")
     protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
         log.info("restart ocr");
         ocrGoodsService.reStartRec();
+        ocrTripService.reStartRec();
     }
 }

+ 2 - 2
src/main/java/com/pavis/ai/kwp/ioc/common/jobs/ReRecJobConfig.java

@@ -22,8 +22,8 @@ public class ReRecJobConfig {
                 .newTrigger()
                 .forJob(reRecJobDetail())
                 .withIdentity("reRecJobTrigger")
-                // 每1分钟执行一次 0 */1 * * * ? 每天凌晨3点执行 0 0 3 * * ?
-                .withSchedule(CronScheduleBuilder.cronSchedule("0 */5 * * * ?"))
+                // 每1分钟执行一次 0 */1 * * * ? 每天2小时执行一次 0 0 */2 * * ?
+                .withSchedule(CronScheduleBuilder.cronSchedule("0 0 */2 * * ?"))
                 .build();
     }
 }

+ 4 - 0
src/main/java/com/pavis/ai/kwp/ioc/mapper/UpTripMapper.java

@@ -2,8 +2,12 @@ package com.pavis.ai.kwp.ioc.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.pavis.ai.kwp.ioc.model.UpTrip;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+
 @Component
 public interface UpTripMapper extends BaseMapper<UpTrip> {
+    List<UpTrip> selectByUploadId(@Param("uploadId") String uploadId);
 }

+ 2 - 0
src/main/java/com/pavis/ai/kwp/ioc/service/OcrTripService.java

@@ -9,4 +9,6 @@ public interface OcrTripService extends IService<OcrTrip>, ApplicationEventPubli
 
     void saveOcrRet(OcrRetDto ret);
 
+    void reStartRec();
+
 }

+ 2 - 1
src/main/java/com/pavis/ai/kwp/ioc/service/impl/OcrGoodsServiceImpl.java

@@ -78,7 +78,7 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
     @Override
     public void reStartRec() {
         QueryWrapper<GoodsLog> wrapper = new QueryWrapper<>();
-        wrapper.lambda().eq(GoodsLog::getGError, true).eq(GoodsLog::getGDone, false);
+        wrapper.lambda().eq(GoodsLog::getGError, true).eq(GoodsLog::getGDone, false).orderByAsc(GoodsLog::getCreateTime).last("limit 100");
         List<GoodsLog> goodsLogList = goodsLogMapper.selectList(wrapper);
         if (CollectionUtils.isNotEmpty(goodsLogList)) {
             for (GoodsLog goodsLog : goodsLogList) {
@@ -140,6 +140,7 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
                         saveOcrResult(res);
                     } else {
                         goodsLog.setGError(true);
+                        goodsLog.setGDone(true);
                         ErrGoods err = ErrGoods.builder()
                                 .uploadId(ug.getUploadId())
                                 .goodsImg(ug.getGoodsImg())

+ 52 - 10
src/main/java/com/pavis/ai/kwp/ioc/service/impl/OcrTripServiceImpl.java

@@ -1,20 +1,16 @@
 package com.pavis.ai.kwp.ioc.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.pavis.ai.kwp.ioc.common.config.Constants;
 import com.pavis.ai.kwp.ioc.common.event.OcrEvent;
 import com.pavis.ai.kwp.ioc.common.utils.DateTimeUtils;
 import com.pavis.ai.kwp.ioc.dto.meta.OcrRetDto;
 import com.pavis.ai.kwp.ioc.dto.meta.OcrTripDto;
-import com.pavis.ai.kwp.ioc.mapper.OcrTripDetMapper;
-import com.pavis.ai.kwp.ioc.mapper.OcrTripMapper;
-import com.pavis.ai.kwp.ioc.mapper.OcrTripProbMapper;
-import com.pavis.ai.kwp.ioc.mapper.TripLogMapper;
-import com.pavis.ai.kwp.ioc.model.OcrTrip;
-import com.pavis.ai.kwp.ioc.model.OcrTripDet;
-import com.pavis.ai.kwp.ioc.model.OcrTripProb;
-import com.pavis.ai.kwp.ioc.model.TripLog;
+import com.pavis.ai.kwp.ioc.mapper.*;
+import com.pavis.ai.kwp.ioc.model.*;
 import com.pavis.ai.kwp.ioc.service.OcrTripService;
+import com.pavis.ai.kwp.ioc.service.SendService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -25,6 +21,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -39,8 +36,12 @@ public class OcrTripServiceImpl extends ServiceImpl<OcrTripMapper, OcrTrip> impl
     private OcrTripDetMapper ocrTripDetMapper;
     @Autowired
     private OcrTripProbMapper ocrTripProbMapper;
-    // @Autowired
-    // private UpMainMapper upMainMapper;
+    @Autowired
+    private UpTripMapper upTripMapper;
+    @Autowired
+    private UpMainMapper upMainMapper;
+    @Autowired
+    private SendService sendService;
 
     @Async("ocrSave")
     @Override
@@ -96,6 +97,47 @@ public class OcrTripServiceImpl extends ServiceImpl<OcrTripMapper, OcrTrip> impl
         applicationEventPublisher.publishEvent(new OcrEvent(this, "T", ret.getUploadId()));
     }
 
+    @Override
+    public void reStartRec() {
+        QueryWrapper<TripLog> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(TripLog::getTError, "1").eq(TripLog::getTDone, false).orderByAsc(TripLog::getCreateTime).last("limit 100");
+        List<TripLog> tripLogList = tripLogMapper.selectList(wrapper);
+        if (CollectionUtils.isNotEmpty(tripLogList)) {
+            log.info("restart ocr trip count:{}", tripLogList.size());
+            for (TripLog tripLog : tripLogList) {
+                log.info("starting ocr trip upload_id:{}", tripLog.getUploadId());
+                reOcr(tripLog);
+            }
+        }
+    }
+
+    public void reOcr(TripLog tripLog) {
+        log.info("restart trip rec:{}", tripLog.getUploadId());
+        UpMain upMain = upMainMapper.selectById(tripLog.getUploadId());
+        if (upMain.getTripType().equals(Constants.TRIP_TYPE_NT)) {
+            tripLog.setTStartTime(DateTimeUtils.dateTimeNow());
+            tripLog.setTFinishTime(tripLog.getTStartTime());
+            tripLog.setTTimeConsume("0");
+            tripLog.setTDone(true);
+        } else {
+            List<UpTrip> upTrips = upTripMapper.selectByUploadId(tripLog.getUploadId());
+            if (CollectionUtils.isNotEmpty(upTrips)) {
+                // 发送到队列
+                sendService.sendTripToOcr(tripLog.getUploadId(), upMain.getTripType(), upTrips.stream().map(UpTrip::getTripImg).collect(Collectors.toList()));
+            } else {
+                tripLog.setTStartTime(DateTimeUtils.dateTimeNow());
+                tripLog.setTFinishTime(tripLog.getTStartTime());
+                tripLog.setTTimeConsume("0");
+                tripLog.setTDone(true);
+            }
+        }
+        tripLogMapper.updateById(tripLog);
+        if (tripLog.getTDone()) {
+            // 通知监听器
+            applicationEventPublisher.publishEvent(new OcrEvent(this, "T", tripLog.getUploadId()));
+        }
+    }
+
     @Override
     public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
         this.applicationEventPublisher = applicationEventPublisher;

+ 10 - 0
src/main/resources/mapper/UpTripMapper.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pavis.ai.kwp.ioc.mapper.UpTripMapper">
+    <select id="selectByUploadId" resultType="UpTrip">
+        select id, upload_id, trip_img
+        from up_trip
+        where upload_id = #{uploadId}
+        order by id
+    </select>
+</mapper>