Procházet zdrojové kódy

1. 强制让读操作走写数据库,解决主从同步延迟问题
2. 更改无切图时立即返回

SemiWarm před 5 roky
rodič
revize
cfc9e9d1c4

+ 3 - 0
src/main/java/com/pavis/ai/kwp/ioc/mapper/GoodsLogMapper.java

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

+ 5 - 0
src/main/java/com/pavis/ai/kwp/ioc/mapper/UpGoodsMapper.java

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

+ 32 - 36
src/main/java/com/pavis/ai/kwp/ioc/service/impl/OcrGoodsServiceImpl.java

@@ -47,26 +47,16 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
     @Override
     public void recAndSave(OcrGoods ocrGoods) {
         log.info("start rec and save");
-        QueryWrapper<UpGoods> ugw = new QueryWrapper<>();
-        ugw.lambda().eq(UpGoods::getUploadId, ocrGoods.getUploadId());
-        List<UpGoods> upGoods = upGoodsMapper.selectList(ugw);
-        GoodsLog goodsLog = goodsLogMapper.selectById(ocrGoods.getUploadId());
+        List<UpGoods> upGoods = upGoodsMapper.selectByUploadId(ocrGoods.getUploadId());
+        GoodsLog goodsLog = goodsLogMapper.selectByUploadId(ocrGoods.getUploadId());
         if (goodsLog != null && CollectionUtils.isNotEmpty(upGoods)) {
             goodsLog.setGStartTime(DateTimeUtils.dateTimeNow());
             for (UpGoods ug : upGoods) {
                 log.info("start ir,upload_id:{},goods_id:{}", ug.getUploadId(), ug.getId());
-                startOcr(ocrGoods.getUploadId(), ug);
+                startOcr(ocrGoods.getUploadId(), ug, goodsLog);
                 log.info("finish ir,upload_id:{},goods_id:{}", ug.getUploadId(), ug.getId());
             }
-            QueryWrapper<ErrGoods> egw = new QueryWrapper<>();
-            egw.lambda().eq(ErrGoods::getUploadId, ocrGoods.getUploadId());
-            List<ErrGoods> errs = errGoodsMapper.selectList(egw);
-            if (CollectionUtils.isNotEmpty(errs)) {
-                goodsLog.setGError(true);
-                goodsLog.setGDone(false);
-            } else {
-                goodsLog.setGError(false);
-                goodsLog.setGDone(true);
+            if (goodsLog.getGDone()) {
                 // 通知监听器
                 applicationEventPublisher.publishEvent(new OcrEvent(this, "G", ocrGoods.getUploadId()));
             }
@@ -89,7 +79,7 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
     }
 
     public void reOcr(GoodsLog goodsLog) {
-        if (goodsLog.getTimes() < 3) {
+        if (goodsLog.getTimes() < 2) {
             Map<String, Object> map = Maps.newHashMap();
             map.put("upload_id", goodsLog.getUploadId());
             List<UpGoods> upGoods = upGoodsMapper.selectByMap(map);
@@ -99,25 +89,18 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
                 // 重新设置开始时间
                 goodsLog.setGStartTime(DateTimeUtils.dateTimeNow());
                 for (UpGoods ug : upGoods) {
-                    startOcr(goodsLog.getUploadId(), ug);
+                    startOcr(goodsLog.getUploadId(), ug, goodsLog);
                 }
                 // 设置结束时间
                 goodsLog.setGFinishTime(DateTimeUtils.dateTimeNow());
                 goodsLog.setGTimeConsume(DateTimeUtils.calculateTimeConsume(goodsLog.getGStartTime(), goodsLog.getGFinishTime()));
             }
-            List<ErrGoods> errs = errGoodsMapper.selectByMap(map);
-            if (CollectionUtils.isNotEmpty(errs)) {
-                goodsLog.setGError(true);
-                goodsLog.setGDone(false);
-            } else {
-                goodsLog.setGError(false);
-                goodsLog.setGDone(true);
+            if (goodsLog.getGDone()) {
                 // 通知监听器
                 applicationEventPublisher.publishEvent(new OcrEvent(this, "G", goodsLog.getUploadId()));
             }
             goodsLog.setTimes(goodsLog.getTimes() + 1);
         } else {
-            goodsLog.setGError(true);
             goodsLog.setGDone(true);
             // 通知监听器
             applicationEventPublisher.publishEvent(new OcrEvent(this, "G", goodsLog.getUploadId()));
@@ -125,7 +108,7 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
         goodsLogMapper.updateById(goodsLog);
     }
 
-    public void startOcr(String uploadId, UpGoods ug) {
+    public void startOcr(String uploadId, UpGoods ug, GoodsLog goodsLog) {
         QueryWrapper<SubImg> wrapper = new QueryWrapper<>();
         wrapper.lambda().eq(SubImg::getGoodsId, ug.getId());
         // 检查是否已有识别结果
@@ -135,6 +118,8 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
             try {
                 res = ctrService.startRequest(uploadId, ug.getGoodsImg());
             } catch (Exception e) {
+                goodsLog.setGDone(false);
+                goodsLog.setGError(true);
                 ErrGoods err = ErrGoods.builder()
                         .uploadId(uploadId)
                         .goodsImg(ug.getGoodsImg())
@@ -146,9 +131,26 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
             }
             if (res != null) {
                 if (StringUtils.isBlank(res.getErrorCode())) {
-                    res.setGoodsId(ug.getId());
-                    saveOcrResult(ug, res);
+                    IrRet result = res.getResult();
+                    if (result.getSubnumber() > 0) {
+                        goodsLog.setGError(false);
+                        goodsLog.setGDone(true);
+                        res.setGoodsId(ug.getId());
+                        saveOcrResult(res);
+                    } else {
+                        goodsLog.setGError(true);
+                        goodsLog.setGDone(true);
+                        ErrGoods err = ErrGoods.builder()
+                                .uploadId(ug.getUploadId())
+                                .goodsImg(ug.getGoodsImg())
+                                .error(String.format("subnumber:0,goodsId:%s", ug.getId()))
+                                .createTime(DateTimeUtils.dateTimeNow())
+                                .build();
+                        errGoodsMapper.insert(err);
+                    }
                 } else {
+                    goodsLog.setGDone(false);
+                    goodsLog.setGError(true);
                     ErrGoods err = ErrGoods.builder()
                             .uploadId(uploadId)
                             .goodsImg(ug.getGoodsImg())
@@ -158,6 +160,8 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
                     errGoodsMapper.insert(err);
                 }
             } else {
+                goodsLog.setGDone(false);
+                goodsLog.setGError(true);
                 ErrGoods err = ErrGoods.builder()
                         .uploadId(uploadId)
                         .goodsImg(ug.getGoodsImg())
@@ -169,7 +173,7 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
         }
     }
 
-    public void saveOcrResult(UpGoods ug, IrRes res) {
+    public void saveOcrResult(IrRes res) {
         IrRet result = res.getResult();
         if (result.getSubnumber() > 0) {
             Map<String, SubGoods> subGoodsList = result.getSubGoodsList();
@@ -190,14 +194,6 @@ public class OcrGoodsServiceImpl implements OcrGoodsService {
                     }
                 }
             }
-        } else {
-            ErrGoods err = ErrGoods.builder()
-                    .uploadId(ug.getUploadId())
-                    .goodsImg(ug.getGoodsImg())
-                    .error(String.format("subnumber:0,goodsId:%s", ug.getId()))
-                    .createTime(DateTimeUtils.dateTimeNow())
-                    .build();
-            errGoodsMapper.insert(err);
         }
     }
 

+ 9 - 0
src/main/resources/mapper/GoodsLogMapper.xml

@@ -0,0 +1,9 @@
+<?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.GoodsLogMapper">
+    <select id="selectByUploadId" resultType="GoodsLog">
+        /*#mycat:db_type=master*/ select *
+                                  from goods_log
+                                  where upload_id = #{uploadId}
+    </select>
+</mapper>

+ 9 - 0
src/main/resources/mapper/UpGoodsMapper.xml

@@ -0,0 +1,9 @@
+<?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.UpGoodsMapper">
+    <select id="selectByUploadId" resultType="UpGoods">
+        /*#mycat:db_type=master*/ select *
+                                  from up_goods
+                                  where upload_id = #{uploadId}
+    </select>
+</mapper>