Pārlūkot izejas kodu

1. 新增两个字段:o2o渠道名和特殊支付方式支付额
2. 新增错误代码102
3. 调整IR识别并发为2
4. 新增内部传输时间标识
5. 新增内部置信度存储

SemiWarm 5 gadi atpakaļ
vecāks
revīzija
015178f374

+ 4 - 2
src/main/java/com/pavis/ai/kwp/ioc/client/CallbackClient.java

@@ -7,14 +7,16 @@ import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
-// @FeignClient(name = "ioc-callback", url = "https://baidu-agency.app.dandanpai.cn", configuration = CallbackClient.CallbackConfig.class)
-// @FeignClient(name = "ioc-callback", url = "https://baidu-agency.ddp.demo.k8s.chilunyc.com", configuration = CallbackClient.CallbackConfig.class)
+// @FeignClient(name = "ioc-callback", url = "https://baidu-agency.ddp.demo.aks.chilunyc.com", configuration = CallbackClient.CallbackConfig.class)
 @FeignClient(name = "ioc-callback", url = "https://gateway.app.dandanpai.cn/services/audit-service", configuration = CallbackClient.CallbackConfig.class)
 public interface CallbackClient {
 
     @PostMapping(value = "/api/receive-result", consumes = MediaType.APPLICATION_JSON_VALUE)
     String callback(@RequestBody String callbackDetails);
 
+    // @PostMapping(value = "/api/ai/callback", consumes = MediaType.APPLICATION_JSON_VALUE)
+    // String callback(@RequestBody String callbackDetails);
+
     class CallbackConfig {
         @Bean
         public Logger.Level logger() {

+ 5 - 0
src/main/java/com/pavis/ai/kwp/ioc/common/config/Constants.java

@@ -117,6 +117,11 @@ public class Constants {
      */
     public static final String OP_CODE_OCR_SUCCESS = "101";
 
+    /**
+     * 小票类型不符
+     */
+    public static final String OP_CODE_TYPE_NOT_MATCH = "102";
+
     /**
      * 第一张可能不是小票,无法识别
      */

+ 2 - 0
src/main/java/com/pavis/ai/kwp/ioc/dto/meta/OcrRetDto.java

@@ -9,4 +9,6 @@ public class OcrRetDto {
     private String code;
     private String message;
     private OcrTripDto result;
+    private String start;
+    private String end;
 }

+ 16 - 0
src/main/java/com/pavis/ai/kwp/ioc/dto/meta/OcrTripDto.java

@@ -6,6 +6,7 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 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 lombok.Data;
 import lombok.NoArgsConstructor;
 import org.apache.commons.collections.CollectionUtils;
@@ -22,6 +23,21 @@ public class OcrTripDto {
     private List<OcrTripField> fields;
     private List<OcrTripDetDto> details;
 
+    public OcrTripProb adapteTripProb(String id) {
+        if (CollectionUtils.isNotEmpty(fields)) {
+            Map<String, String> map = Maps.newHashMap();
+            for (OcrTripField field : fields) {
+                map.put(field.getName(), field.getProb());
+            }
+            String jsonFields = JSON.toJSONString(map);
+            OcrTripProb result = JSONObject.parseObject(jsonFields, OcrTripProb.class);
+            result.setUploadId(id);
+            result.setGlobalProb(getTripGlobalProb());
+            return result;
+        }
+        return null;
+    }
+
     public OcrTrip adapteTrip(String id) {
         if (CollectionUtils.isNotEmpty(fields)) {
             Map<String, String> map = Maps.newHashMap();

+ 10 - 0
src/main/java/com/pavis/ai/kwp/ioc/dto/meta/TripRet.java

@@ -19,6 +19,11 @@ public class TripRet {
      */
     private String shopName = "";
 
+    /**
+     * O2O渠道名
+     */
+    private String o2oShopName = "";
+
     /**
      * 渠道名分店
      */
@@ -64,6 +69,11 @@ public class TripRet {
      */
     private String pay = "";
 
+    /**
+     * 特殊支付方式支付额
+     */
+    private String specPayValue = "";
+
     /**
      * 优惠形式
      */

+ 9 - 0
src/main/java/com/pavis/ai/kwp/ioc/mapper/OcrTripProbMapper.java

@@ -0,0 +1,9 @@
+package com.pavis.ai.kwp.ioc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.pavis.ai.kwp.ioc.model.OcrTripProb;
+import org.springframework.stereotype.Component;
+
+@Component
+public interface OcrTripProbMapper extends BaseMapper<OcrTripProb> {
+}

+ 10 - 0
src/main/java/com/pavis/ai/kwp/ioc/model/CbTrip.java

@@ -22,6 +22,11 @@ public class CbTrip {
      */
     private String shopName;
 
+    /**
+     * O2O渠道名
+     */
+    private String o2oShopName;
+
     /**
      * 渠道名分店
      */
@@ -62,6 +67,11 @@ public class CbTrip {
      */
     private String pay;
 
+    /**
+     * 特殊支付方式支付额
+     */
+    private String specPayValue;
+
     /**
      * 优惠形式
      */

+ 10 - 0
src/main/java/com/pavis/ai/kwp/ioc/model/OcrTrip.java

@@ -23,6 +23,11 @@ public class OcrTrip {
      */
     private String shopName;
 
+    /**
+     * O2O渠道名称
+     */
+    private String o2oShopName;
+
     /**
      * 渠道名分店
      */
@@ -63,6 +68,11 @@ public class OcrTrip {
      */
     private String pay;
 
+    /**
+     * 特殊支付方式支付额
+     */
+    private String specPayValue;
+
     /**
      * 优惠形式
      */

+ 90 - 0
src/main/java/com/pavis/ai/kwp/ioc/model/OcrTripProb.java

@@ -0,0 +1,90 @@
+package com.pavis.ai.kwp.ioc.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OcrTripProb {
+
+    /**
+     * 上传id
+     */
+    @TableId
+    private String uploadId;
+
+    /**
+     * 渠道名
+     */
+    private String shopName;
+
+    /**
+     * O2O渠道名称
+     */
+    private String o2oShopName;
+
+    /**
+     * 渠道名分店
+     */
+    private String branchShopName;
+
+    /**
+     * 购买日期
+     */
+    private String purchaseDate;
+
+    /**
+     * 总消费金额
+     */
+    private String totalSpend;
+
+    /**
+     * 购物篮大小
+     */
+    private String basket;
+
+    /**
+     * 条码
+     */
+    private String tripNumber;
+
+    /**
+     * 地址
+     */
+    private String address;
+
+    /**
+     * 电话
+     */
+    private String phone;
+
+    /**
+     * 支付方式
+     */
+    private String pay;
+
+    /**
+     * 特殊支付方式支付额
+     */
+    private String specPayValue;
+
+    /**
+     * 优惠形式
+     */
+    private String offer;
+
+    /**
+     * 会员信息
+     */
+    private String member;
+
+    /**
+     * 全局置信度
+     */
+    private String globalProb;
+}

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

@@ -81,7 +81,7 @@ public class CallbackServiceImpl implements CallbackService {
         map.put("code", cbLog.getCode());
         map.put("message", cbLog.getMessage());
         map.put("details", callbackAdapter.det(cbLog.getUploadId(),
-                StringUtils.equals(Constants.OP_CODE_OCR_SUCCESS, cbLog.getCode())));
+                StringUtils.equalsAny(cbLog.getCode(), Constants.OP_CODE_OCR_SUCCESS, Constants.OP_CODE_TYPE_NOT_MATCH)));
         return map;
     }
 }

+ 28 - 11
src/main/java/com/pavis/ai/kwp/ioc/service/impl/OcrTripServiceImpl.java

@@ -4,11 +4,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.pavis.ai.kwp.ioc.common.config.Constants;
 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.service.OcrTripService;
 import lombok.extern.slf4j.Slf4j;
@@ -29,31 +32,45 @@ public class OcrTripServiceImpl extends ServiceImpl<OcrTripMapper, OcrTrip> impl
     private TripLogMapper tripLogMapper;
     @Autowired
     private OcrTripDetMapper ocrTripDetMapper;
+    @Autowired
+    private OcrTripProbMapper ocrTripProbMapper;
 
     @Override
     public void saveOcrRet(OcrRetDto ret) {
-        TripLog tripLog = tripLogMapper.selectById(ret.getUploadId());
-        // OCR识别成功
-        if (StringUtils.equals(Constants.OP_CODE_OCR_SUCCESS, ret.getCode())) {
+        // 获取OCR结果
+        OcrTripDto dto = ret.getResult();
+        if (dto != null) {
             // 存储识别结果
-            OcrTrip ocrTrip = ret.getResult().adapteTrip(ret.getUploadId());
+            OcrTrip ocrTrip = dto.adapteTrip(ret.getUploadId());
             if (ocrTrip != null) {
                 baseMapper.insert(ocrTrip);
             }
-            List<OcrTripDet> dets = ret.getResult().adapteDetails(ret.getUploadId());
+            List<OcrTripDet> dets = dto.adapteDetails(ret.getUploadId());
             if (CollectionUtils.isNotEmpty(dets)) {
                 for (OcrTripDet det : dets) {
                     ocrTripDetMapper.insert(det);
                 }
             }
-        } else {
+            // 存储置信度
+            OcrTripProb ocrTripProb = dto.adapteTripProb(ret.getUploadId());
+            if (ocrTripProb != null) {
+                ocrTripProbMapper.insert(ocrTripProb);
+            }
+        }
+        TripLog tripLog = tripLogMapper.selectById(ret.getUploadId());
+        if (!StringUtils.equals(Constants.OP_CODE_OCR_SUCCESS, ret.getCode())) {
             // OCR识别错误
-            tripLog.setTError(ret.getCode() + ":" + ret.getMessage());
+            if (tripLog != null) {
+                tripLog.setTError(ret.getCode() + ":" + ret.getMessage());
+            }
+        }
+        if (tripLog != null) {
+            tripLog.setTStartTime(ret.getStart());
+            tripLog.setTFinishTime(ret.getEnd());
+            tripLog.setTTimeConsume(DateTimeUtils.calculateTimeConsume(tripLog.getTStartTime(), tripLog.getTFinishTime()));
+            tripLog.setTDone(true);
+            tripLogMapper.updateById(tripLog);
         }
-        tripLog.setTFinishTime(DateTimeUtils.dateTimeNow());
-        tripLog.setTTimeConsume(DateTimeUtils.calculateTimeConsume(tripLog.getTStartTime(), tripLog.getTFinishTime()));
-        tripLog.setTDone(true);
-        tripLogMapper.updateById(tripLog);
     }
 
 }

+ 10 - 4
src/main/java/com/pavis/ai/kwp/ioc/service/impl/SendServiceImpl.java

@@ -7,8 +7,10 @@ import com.pavis.ai.kwp.ioc.common.exception.ParamsException;
 import com.pavis.ai.kwp.ioc.common.utils.DateTimeUtils;
 import com.pavis.ai.kwp.ioc.mapper.GoodsLogMapper;
 import com.pavis.ai.kwp.ioc.mapper.TripLogMapper;
+import com.pavis.ai.kwp.ioc.mapper.UpMainMapper;
 import com.pavis.ai.kwp.ioc.model.GoodsLog;
 import com.pavis.ai.kwp.ioc.model.TripLog;
+import com.pavis.ai.kwp.ioc.model.UpMain;
 import com.pavis.ai.kwp.ioc.service.SendService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
@@ -31,6 +33,8 @@ public class SendServiceImpl implements SendService {
     public static final String GOODS_PREFIX = "G";
     public static final String CALLBACK_PREFIX = "C";
 
+    @Autowired
+    private UpMainMapper upMainMapper;
     @Autowired
     private TripLogMapper tripLogMapper;
     @Autowired
@@ -40,13 +44,13 @@ public class SendServiceImpl implements SendService {
 
     @Override
     public void sendTripToOcr(String uploadId, String tripType, List<String> tripImgs) {
-        TripLog tripLog = tripLogMapper.selectById(uploadId);
-        tripLog.setTStartTime(DateTimeUtils.dateTimeNow());
+        UpMain upMain = upMainMapper.selectById(uploadId);
         if (CollectionUtils.isNotEmpty(tripImgs)) {
             Map<String, Object> map = Maps.newHashMap();
             map.put("uploadId", uploadId);
             map.put("tripType", tripType);
             map.put("tripImgs", tripImgs);
+            map.put("uploadTime", upMain.getUploadTime());
             CorrelationData correlationData = new CorrelationData(TRIP_PREFIX + uploadId);
             rabbitTemplate.convertAndSend(
                     Constants.OCR_EXCHANGE_NAME,
@@ -55,11 +59,13 @@ public class SendServiceImpl implements SendService {
                     correlationData);
             rabbitTemplate.setConfirmCallback(this);
         } else {
-            tripLog.setTFinishTime(DateTimeUtils.dateTimeNow());
+            TripLog tripLog = tripLogMapper.selectById(uploadId);
+            tripLog.setTStartTime(DateTimeUtils.dateTimeNow());
+            tripLog.setTFinishTime(tripLog.getTStartTime());
             tripLog.setTTimeConsume(DateTimeUtils.calculateTimeConsume(tripLog.getTStartTime(), tripLog.getTFinishTime()));
             tripLog.setTDone(true);
+            tripLogMapper.updateById(tripLog);
         }
-        tripLogMapper.updateById(tripLog);
     }
 
     @Override

+ 2 - 2
src/main/resources/application-dev.yml

@@ -2,8 +2,8 @@ ioc:
   config:
     sign: false
     send: false
-    callback: false
-    callback-url: https://baidu-agency.ddp.demo.k8s.chilunyc.com/api/ai/callback
+    callback: true
+    callback-url: https://baidu-agency.ddp.demo.aks.chilunyc.com/api/ai/callback
 spring:
   datasource:
     #    url: jdbc:mysql://180.76.139.81:8066/ocr_prod

+ 32 - 0
src/main/resources/application-itest.yml

@@ -0,0 +1,32 @@
+ioc:
+  config:
+    sign: false
+    send: false
+    callback: true
+    callback-url: https://baidu-agency.ddp.demo.aks.chilunyc.com/api/ai/callback
+spring:
+  datasource:
+    url: jdbc:mysql://106.12.166.85:3306/ocr_test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
+    driver-class-name: com.mysql.jdbc.Driver
+    username: root
+    password: Semi.1001
+  rabbitmq:
+    host: 106.12.166.85
+    port: 5673
+    username: ocr
+    password: kwp@2019
+    virtual-host: /
+    publisher-confirms: true
+    publisher-returns: true
+feign:
+  client:
+    config:
+      default:
+        readTimeout: 30000
+        connectTimeout: 10000
+logging:
+  file: logs/test.log
+  level:
+    org.springframework.cloud: error
+    org.springframework.boot: error
+    com.pavis.ai.kwp.ioc.mapper: error

+ 1 - 1
src/main/resources/application-test.yml

@@ -3,7 +3,7 @@ ioc:
     sign: true
     send: true
     callback: true
-    callback-url: https://baidu-agency.ddp.demo.k8s.chilunyc.com/api/ai/callback
+    callback-url: https://baidu-agency.ddp.demo.aks.chilunyc.com/api/ai/callback
 spring:
   datasource:
     url: jdbc:mysql://172.19.0.6:8066/ocr_test

+ 28 - 0
src/main/resources/static/ioc_test.sql

@@ -43,6 +43,7 @@ create table ocr_trip
 (
     upload_id        varchar(32)  not null comment '主键',
     shop_name        varchar(32)  not null default '' comment '渠道名',
+    o2o_shop_name    varchar(32)  not null default '' comment 'O2O渠道名称',
     branch_shop_name varchar(32)  not null default '' comment '渠道名分店',
     purchase_date    varchar(32)  not null default '' comment '购买日期',
     total_spend      varchar(16)  not null default '' comment '消费金额',
@@ -51,6 +52,31 @@ create table ocr_trip
     address          varchar(256) not null default '' comment '店铺地址',
     phone            varchar(64)  not null default '' comment '店铺电话',
     pay              varchar(16)  not null default '' comment '支付方式',
+    spec_pay_value   varchar(16)  not null default '' comment '特殊支付方式支付额',
+    offer            varchar(128) not null default '' comment '优惠形式',
+    member           varchar(64)  not null default '' comment '会员信息',
+    global_prob      varchar(16)  not null default '' comment '全局置信度',
+    primary key (upload_id)
+)
+    engine = InnoDB,
+    default charset = utf8;
+
+# 小票识别结果置信度
+drop table if exists ocr_trip_prob;
+create table ocr_trip_prob
+(
+    upload_id        varchar(32)  not null comment '主键',
+    shop_name        varchar(32)  not null default '' comment '渠道名',
+    o2o_shop_name    varchar(32)  not null default '' comment 'O2O渠道名称',
+    branch_shop_name varchar(32)  not null default '' comment '渠道名分店',
+    purchase_date    varchar(32)  not null default '' comment '购买日期',
+    total_spend      varchar(16)  not null default '' comment '消费金额',
+    basket           varchar(16)  not null default '' comment '购物篮大小',
+    trip_number      varchar(32)  not null default '' comment '小票条码',
+    address          varchar(256) not null default '' comment '店铺地址',
+    phone            varchar(64)  not null default '' comment '店铺电话',
+    pay              varchar(16)  not null default '' comment '支付方式',
+    spec_pay_value   varchar(16)  not null default '' comment '特殊支付方式支付额',
     offer            varchar(128) not null default '' comment '优惠形式',
     member           varchar(64)  not null default '' comment '会员信息',
     global_prob      varchar(16)  not null default '' comment '全局置信度',
@@ -191,6 +217,7 @@ create table cb_trip
 (
     upload_id        varchar(32)  not null comment '主键',
     shop_name        varchar(32)  not null default '' comment '渠道名',
+    o2o_shop_name    varchar(32)  not null default '' comment 'O2O渠道名称',
     branch_shop_name varchar(32)  not null default '' comment '渠道名分店',
     purchase_date    varchar(32)  not null default '' comment '购买日期',
     total_spend      varchar(16)  not null default '' comment '消费金额',
@@ -199,6 +226,7 @@ create table cb_trip
     address          varchar(256) not null default '' comment '店铺地址',
     phone            varchar(64)  not null default '' comment '店铺电话',
     pay              varchar(16)  not null default '' comment '支付方式',
+    spec_pay_value   varchar(16)  not null default '' comment '特殊支付方式支付额',
     offer            varchar(128) not null default '' comment '优惠形式',
     member           varchar(64)  not null default '' comment '会员信息',
     create_time      varchar(32)  not null default '' comment '创建时间',