Browse Source

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

SemiWarm 5 years ago
parent
commit
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.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 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)
 @FeignClient(name = "ioc-callback", url = "https://gateway.app.dandanpai.cn/services/audit-service", configuration = CallbackClient.CallbackConfig.class)
 public interface CallbackClient {
 public interface CallbackClient {
 
 
     @PostMapping(value = "/api/receive-result", consumes = MediaType.APPLICATION_JSON_VALUE)
     @PostMapping(value = "/api/receive-result", consumes = MediaType.APPLICATION_JSON_VALUE)
     String callback(@RequestBody String callbackDetails);
     String callback(@RequestBody String callbackDetails);
 
 
+    // @PostMapping(value = "/api/ai/callback", consumes = MediaType.APPLICATION_JSON_VALUE)
+    // String callback(@RequestBody String callbackDetails);
+
     class CallbackConfig {
     class CallbackConfig {
         @Bean
         @Bean
         public Logger.Level logger() {
         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_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 code;
     private String message;
     private String message;
     private OcrTripDto result;
     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.google.common.collect.Maps;
 import com.pavis.ai.kwp.ioc.model.OcrTrip;
 import com.pavis.ai.kwp.ioc.model.OcrTrip;
 import com.pavis.ai.kwp.ioc.model.OcrTripDet;
 import com.pavis.ai.kwp.ioc.model.OcrTripDet;
+import com.pavis.ai.kwp.ioc.model.OcrTripProb;
 import lombok.Data;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.CollectionUtils;
@@ -22,6 +23,21 @@ public class OcrTripDto {
     private List<OcrTripField> fields;
     private List<OcrTripField> fields;
     private List<OcrTripDetDto> details;
     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) {
     public OcrTrip adapteTrip(String id) {
         if (CollectionUtils.isNotEmpty(fields)) {
         if (CollectionUtils.isNotEmpty(fields)) {
             Map<String, String> map = Maps.newHashMap();
             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 = "";
     private String shopName = "";
 
 
+    /**
+     * O2O渠道名
+     */
+    private String o2oShopName = "";
+
     /**
     /**
      * 渠道名分店
      * 渠道名分店
      */
      */
@@ -64,6 +69,11 @@ public class TripRet {
      */
      */
     private String pay = "";
     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;
     private String shopName;
 
 
+    /**
+     * O2O渠道名
+     */
+    private String o2oShopName;
+
     /**
     /**
      * 渠道名分店
      * 渠道名分店
      */
      */
@@ -62,6 +67,11 @@ public class CbTrip {
      */
      */
     private String pay;
     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;
     private String shopName;
 
 
+    /**
+     * O2O渠道名称
+     */
+    private String o2oShopName;
+
     /**
     /**
      * 渠道名分店
      * 渠道名分店
      */
      */
@@ -63,6 +68,11 @@ public class OcrTrip {
      */
      */
     private String pay;
     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("code", cbLog.getCode());
         map.put("message", cbLog.getMessage());
         map.put("message", cbLog.getMessage());
         map.put("details", callbackAdapter.det(cbLog.getUploadId(),
         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;
         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.config.Constants;
 import com.pavis.ai.kwp.ioc.common.utils.DateTimeUtils;
 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.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.OcrTripDetMapper;
 import com.pavis.ai.kwp.ioc.mapper.OcrTripMapper;
 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.mapper.TripLogMapper;
 import com.pavis.ai.kwp.ioc.model.OcrTrip;
 import com.pavis.ai.kwp.ioc.model.OcrTrip;
 import com.pavis.ai.kwp.ioc.model.OcrTripDet;
 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.model.TripLog;
 import com.pavis.ai.kwp.ioc.service.OcrTripService;
 import com.pavis.ai.kwp.ioc.service.OcrTripService;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -29,31 +32,45 @@ public class OcrTripServiceImpl extends ServiceImpl<OcrTripMapper, OcrTrip> impl
     private TripLogMapper tripLogMapper;
     private TripLogMapper tripLogMapper;
     @Autowired
     @Autowired
     private OcrTripDetMapper ocrTripDetMapper;
     private OcrTripDetMapper ocrTripDetMapper;
+    @Autowired
+    private OcrTripProbMapper ocrTripProbMapper;
 
 
     @Override
     @Override
     public void saveOcrRet(OcrRetDto ret) {
     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) {
             if (ocrTrip != null) {
                 baseMapper.insert(ocrTrip);
                 baseMapper.insert(ocrTrip);
             }
             }
-            List<OcrTripDet> dets = ret.getResult().adapteDetails(ret.getUploadId());
+            List<OcrTripDet> dets = dto.adapteDetails(ret.getUploadId());
             if (CollectionUtils.isNotEmpty(dets)) {
             if (CollectionUtils.isNotEmpty(dets)) {
                 for (OcrTripDet det : dets) {
                 for (OcrTripDet det : dets) {
                     ocrTripDetMapper.insert(det);
                     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识别错误
             // 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.common.utils.DateTimeUtils;
 import com.pavis.ai.kwp.ioc.mapper.GoodsLogMapper;
 import com.pavis.ai.kwp.ioc.mapper.GoodsLogMapper;
 import com.pavis.ai.kwp.ioc.mapper.TripLogMapper;
 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.GoodsLog;
 import com.pavis.ai.kwp.ioc.model.TripLog;
 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 com.pavis.ai.kwp.ioc.service.SendService;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 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 GOODS_PREFIX = "G";
     public static final String CALLBACK_PREFIX = "C";
     public static final String CALLBACK_PREFIX = "C";
 
 
+    @Autowired
+    private UpMainMapper upMainMapper;
     @Autowired
     @Autowired
     private TripLogMapper tripLogMapper;
     private TripLogMapper tripLogMapper;
     @Autowired
     @Autowired
@@ -40,13 +44,13 @@ public class SendServiceImpl implements SendService {
 
 
     @Override
     @Override
     public void sendTripToOcr(String uploadId, String tripType, List<String> tripImgs) {
     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)) {
         if (CollectionUtils.isNotEmpty(tripImgs)) {
             Map<String, Object> map = Maps.newHashMap();
             Map<String, Object> map = Maps.newHashMap();
             map.put("uploadId", uploadId);
             map.put("uploadId", uploadId);
             map.put("tripType", tripType);
             map.put("tripType", tripType);
             map.put("tripImgs", tripImgs);
             map.put("tripImgs", tripImgs);
+            map.put("uploadTime", upMain.getUploadTime());
             CorrelationData correlationData = new CorrelationData(TRIP_PREFIX + uploadId);
             CorrelationData correlationData = new CorrelationData(TRIP_PREFIX + uploadId);
             rabbitTemplate.convertAndSend(
             rabbitTemplate.convertAndSend(
                     Constants.OCR_EXCHANGE_NAME,
                     Constants.OCR_EXCHANGE_NAME,
@@ -55,11 +59,13 @@ public class SendServiceImpl implements SendService {
                     correlationData);
                     correlationData);
             rabbitTemplate.setConfirmCallback(this);
             rabbitTemplate.setConfirmCallback(this);
         } else {
         } 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.setTTimeConsume(DateTimeUtils.calculateTimeConsume(tripLog.getTStartTime(), tripLog.getTFinishTime()));
             tripLog.setTDone(true);
             tripLog.setTDone(true);
+            tripLogMapper.updateById(tripLog);
         }
         }
-        tripLogMapper.updateById(tripLog);
     }
     }
 
 
     @Override
     @Override

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

@@ -2,8 +2,8 @@ ioc:
   config:
   config:
     sign: false
     sign: false
     send: 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:
 spring:
   datasource:
   datasource:
     #    url: jdbc:mysql://180.76.139.81:8066/ocr_prod
     #    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
     sign: true
     send: true
     send: true
     callback: 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:
 spring:
   datasource:
   datasource:
     url: jdbc:mysql://172.19.0.6:8066/ocr_test
     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 '主键',
     upload_id        varchar(32)  not null comment '主键',
     shop_name        varchar(32)  not null default '' 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 '渠道名分店',
     branch_shop_name varchar(32)  not null default '' comment '渠道名分店',
     purchase_date    varchar(32)  not null default '' comment '购买日期',
     purchase_date    varchar(32)  not null default '' comment '购买日期',
     total_spend      varchar(16)  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 '店铺地址',
     address          varchar(256) not null default '' comment '店铺地址',
     phone            varchar(64)  not null default '' comment '店铺电话',
     phone            varchar(64)  not null default '' comment '店铺电话',
     pay              varchar(16)  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 '优惠形式',
     offer            varchar(128) not null default '' comment '优惠形式',
     member           varchar(64)  not null default '' comment '会员信息',
     member           varchar(64)  not null default '' comment '会员信息',
     global_prob      varchar(16)  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 '主键',
     upload_id        varchar(32)  not null comment '主键',
     shop_name        varchar(32)  not null default '' 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 '渠道名分店',
     branch_shop_name varchar(32)  not null default '' comment '渠道名分店',
     purchase_date    varchar(32)  not null default '' comment '购买日期',
     purchase_date    varchar(32)  not null default '' comment '购买日期',
     total_spend      varchar(16)  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 '店铺地址',
     address          varchar(256) not null default '' comment '店铺地址',
     phone            varchar(64)  not null default '' comment '店铺电话',
     phone            varchar(64)  not null default '' comment '店铺电话',
     pay              varchar(16)  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 '优惠形式',
     offer            varchar(128) not null default '' comment '优惠形式',
     member           varchar(64)  not null default '' comment '会员信息',
     member           varchar(64)  not null default '' comment '会员信息',
     create_time      varchar(32)  not null default '' comment '创建时间',
     create_time      varchar(32)  not null default '' comment '创建时间',