巴枪操作关联车辆记录

表结构:
1、deal_countdeal_ip默认为0,取消非空限制
2、表中新增delive_code字段;

代码
3、conf中新增trmsCarTaskSwitch开关
#4、conf中新增kafka开关
5、新增mapp.xml配置;

select * from a;

-- 分中心数据下发接收表

drop table tt_trms_car_task;
CREATE TABLE tt_trms_car_task(
  id NUMBER(18) PRIMARY KEY ,
  original_id  NUMBER(18) not null, -- 版本号id
  send_car_tm DATE  ,
  require_id VARCHAR(50),
  task_id VARCHAR(100) , -- 任务id
  position_no VARCHAR(10) ,
  line_code VARCHAR(200) ,
  batch_code VARCHAR(50) , -- 卡口编码
  plan_start_tm DATE ,
  zone_code VARCHAR(50) , -- 中转场代码(网点)
  plate_num VARCHAR(50) ,
  del_flag VARCHAR(1) ,
  send_tm DATE,
  deal_tm DATE  , -- 处理时间
  deal_flg number(2) default 0, -- 处理标记
  deal_ip varchar2(30)  ,
  deal_count number(2)  ,
  insert_tm timestamp(6) default SYSDATE, --入库时间
  delive_code VARCHAR2(50) -- 分中心代码
);

-- 序列
CREATE SEQUENCE SEQ_TT_TRMS_CAR_TASK
START WITH 1
INCREMENT BY 1
NOMAXVALUE
MINVALUE 1
NOCYCLE
NOCACHE

-- 中间表

drop table tt_trms_car_task_mid;
CREATE TABLE tt_trms_car_task_mid(
  id NUMBER(18) PRIMARY KEY ,
  original_id  NUMBER(18) not null, -- 版本号id
  send_car_tm DATE  ,
  require_id VARCHAR(50),
  task_id VARCHAR(100) , -- 任务id
  position_no VARCHAR(10) ,
  line_code VARCHAR(200) ,
  batch_code VARCHAR(50) , -- 卡口编码
  plan_start_tm DATE ,
  zone_code VARCHAR(50) , -- 中转场代码(网点)
  plate_num VARCHAR(50) ,
  del_flag VARCHAR(1) ,
  send_tm DATE,
  deal_tm DATE  , -- 处理时间
  deal_flg number(2) default 0, -- 处理标记
  deal_ip varchar2(30)  ,
  deal_count number(2)  ,
  insert_tm timestamp(6) default SYSDATE, --入库时间
  delive_code VARCHAR2(50) -- 分中心代码
);

CREATE SEQUENCE SEQ_TT_TRMS_CAR_TASK_MID
START WITH 1
INCREMENT BY 1
NOMAXVALUE
MINVALUE 1
NOCYCLE
NOCACHE

-- 下发表

drop table tt_trms_car_task_dist;
CREATE TABLE tt_trms_car_task_dist(
  id NUMBER(18) PRIMARY KEY ,
  original_id  NUMBER(18) not null, -- 版本号id
  send_car_tm DATE  ,
  require_id VARCHAR(50),
  task_id VARCHAR(100) , -- 任务id
  position_no VARCHAR(10) ,
  line_code VARCHAR(200) ,
  batch_code VARCHAR(50) , -- 卡口编码
  plan_start_tm DATE ,
  zone_code VARCHAR(50) , -- 中转场代码(网点)
  plate_num VARCHAR(50) ,
  del_flag VARCHAR(1) ,
  send_tm DATE,
  deal_tm DATE  , -- 处理时间
  deal_flg number(2) default 0, -- 处理标记
  deal_ip varchar2(30)  ,
  deal_count number(2)  ,
  insert_tm timestamp(6) default SYSDATE, --入库时间
  delive_code VARCHAR2(50) -- 分中心代码
);

CREATE SEQUENCE SEQ_TT_TRMS_CAR_TASK_DIST
START WITH 1
INCREMENT BY 1
NOMAXVALUE
MINVALUE 1
NOCYCLE
NOCACHE

INSERT INTO tt_trms_car_task_mid SELECT * FROM  tt_trms_car_task;

SELECT M.* ,ROWID AS rid FROM tt_trms_car_task_mid M WHERE  ROWNUM=1

SELECT t.*,ROWID FROM tt_trms_car_task t

逻辑:
根据“任务ID+网点+卡口编码”为主键判断,如果该记录不存在,则新增该记录;
根据“任务ID+网点+卡口编码”为主键判断,如果该记录存在,则判断“版本号ID”是否比现有的版本号
ID大,如果大则根据“任务ID+网点+卡口编码”覆盖,否则该数据抛弃。

CREATE OR REPLACE PROCEDURE PROC_TT_AS_OUT_IDENT_MID
(
    P_HASH_NUM      IN  NUMBER,                 --hash并发数量
    P_HASH_VALUE    IN  NUMBER,                 --hash并发值
    P_BATCH_NUM     IN  NUMBER  DEFAULT 5000,   --处理数据量
    P_COMMIT_NUM    IN  NUMBER  DEFAULT 500     --批次提交数据量
) AS
V_COUNT         INT DEFAULT 0;  --定义参数以"V_"开头定义

    V_BATCH         INT DEFAULT 0;  --是否需要跟新:0->新增,1->跟新BA,生产出港,99->抛弃
    V_BA_RID        VARCHAR2(500);
    V_S_ID          NUMBER;
    V_BATCH_OUT     INT DEFAULT -1;  --99->抛弃,0—>新增
    V_AS_OUT_ID     NUMBER;
    V_SQL_NUM       NUMBER;

/*
    CREATE DATE:2016-10-20
    CREATE BY:674051
    DESC  :TT_AS_OUT_IDENT_MID中间表数据关联tm_zno_transit表数据生产出港数据

            业务逻辑:首先同TT_AS_OUT_IDENT_BA表进行比较,
              i :MID中数据比ba表中数据级别高,生产新下发数据
              II:MID和BA中级别一致,但是mid中数据较新且weight+des_zno+product不一致,生产新下发数据
              III:其他状态数据:抛弃

    REMARK:记录修改日志(修改人 修改版本号 修改时间,修改内容)
*/

BEGIN
    FOR RX IN (
        SELECT
            T.*,ROWID  as rid
        FROM
            TT_AS_OUT_IDENT_MID T
        WHERE
            T.DEAL_FLG = 0
            AND DBMS_UTILITY.GET_HASH_VALUE(T.WAYBILL_NO,0,P_HASH_NUM)=P_HASH_VALUE
            AND ROWNUM <= P_BATCH_NUM
    )  LOOP

        V_BATCH:=0 ; --默认新增ba数据
        V_BATCH_OUT :=0; --默认新生成出港数据
        --从BA表中抓取基准数据

        FOR R0 IN (
            SELECT
                T.ROWID AS RID ,T.*
            FROM
                TT_AS_OUT_IDENT_BA T
            WHERE
                T.WAYBILL_NO = RX.WAYBILL_NO
        )  LOOP

            V_BA_RID:=R0.RID;

            IF(RX.SRC=R0.SRC  AND RX.INPUT_TM> R0.INPUT_TM
                AND (RX.DES_ZNO||RX.PRODUCT_TYPE<>R0.DES_ZNO||R0.PRODUCT_TYPE
                    OR RX.WEIGHT<>R0.WEIGHT)
                ) THEN
                --BA与MID均且清单数据,且mid数据有变更且比ba中数据要新,更新BA数据,需生成出港数据

                    V_BATCH:=1;
                    V_BATCH_OUT:=0;

            ELSIF(RX.SRC<>R0.SRC AND RX.SRC=‘D-‘
                AND (RX.DES_ZNO||RX.PRODUCT_TYPE<>R0.DES_ZNO||R0.PRODUCT_TYPE
                    OR RX.WEIGHT<>R0.WEIGHT)
                ) THEN
                --BA为hht,MID为清单,且MID与BA表数据不一致,更新BA数据,需生成出港数据

                    V_BATCH:=1;
                    V_BATCH_OUT:=0;
            ELSIF(RX.SRC<>R0.SRC AND RX.SRC=‘D-‘
                AND (RX.DES_ZNO||RX.PRODUCT_TYPE=R0.DES_ZNO||R0.PRODUCT_TYPE
                    OR RX.WEIGHT=R0.WEIGHT)
                ) THEN
                --BA为hht,MID为清单,但是MID与BA表数据不一致,更新BA数据,不生成出港数据

                    V_BATCH:=1;
                    V_BATCH_OUT:=99;
            ELSE
                V_BATCH:=99;
                V_BATCH_OUT:=99;
            END IF;

        END LOOP;

     --生产BA数据数据
        IF(V_BATCH=0) THEN

            INSERT INTO TT_AS_OUT_IDENT_BA(
                ID              ,
                S_ID            ,
                WAYBILL_NO      ,
                SRC_ZNO         ,
                DES_ZNO         ,
                INSERT_TM       ,
                OTHER_NODE_FLG  ,
                SRC             ,
                INPUT_TM        ,
                PRODUCT_TYPE    ,
                WEIGHT          ,
                SRC_CITY        ,
                DES_CITY        ,
                BATCH_TM
            )VALUES(
                SEQ_TT_AS_OUT_IDENT_BA.NEXTVAL,
                RX.ID           ,
                RX.WAYBILL_NO   ,
                RX.SRC_ZNO      ,
                RX.DES_ZNO      ,
                CURRENT_TIMESTAMP       ,
                RX.OTHER_NODE_FLG  ,
                RX.SRC             ,
                RX.INPUT_TM        ,
                RX.PRODUCT_TYPE    ,
                RX.WEIGHT          ,
                RX.SRC_CITY        ,
                RX.DES_CITY        ,
                CURRENT_TIMESTAMP
            );
        ELSIF(V_BATCH=1)THEN

            UPDATE
                TT_AS_OUT_IDENT_BA T
            SET
                T.S_ID           = RX.ID
                ,T.WAYBILL_NO     = RX.WAYBILL_NO
                ,T.SRC_ZNO        = RX.SRC_ZNO
                ,T.DES_ZNO        = RX.DES_ZNO
                ,T.BATCH_TM      = CURRENT_TIMESTAMP
                ,T.OTHER_NODE_FLG = RX.OTHER_NODE_FLG
                ,T.SRC            = RX.SRC
                ,T.INPUT_TM       = RX.INPUT_TM
                ,T.PRODUCT_TYPE   = RX.PRODUCT_TYPE
                ,T.WEIGHT         = RX.WEIGHT
                ,T.SRC_CITY       = RX.SRC_CITY
                ,T.DES_CITY       = RX.DES_CITY
            WHERE
                T.ROWID = V_BA_RID;
        END IF;

        V_AS_OUT_ID:=seq_tt_as_out_ident.nextval;

        --生产出港数据
        IF(V_BATCH_OUT=0) THEN
            V_AS_OUT_ID:=seq_tt_as_out_ident.nextval;
            insert into tt_as_out_ident(
                id,
                waybill_no,
                src_zno,
                des_zno,
                insert_tm,
                deal_flg,
                transit_zno,
                other_node_flg,
                src,
                scan_tm,
                PRODUCT_TYPE,
                weight,
                SRC_CITY,
                DES_CITY,
                THREAD_ID
            )select
                seq_tt_as_out_ident.nextval,
                rx.waybill_no,
                rx.src_zno,
                rx.des_zno,
                current_timestamp,
                0,
                t.transit_code,
                rx.other_node_flg,
                rx.src,
                rx.input_tm ,
                rx.PRODUCT_TYPE,
                rx.weight,
                rx.SRC_CITY,
                rx.DES_CITY,
                V_AS_OUT_ID
            from
                tm_zno_transit t
            WHERE
               instr(‘,‘||t.out_znos||‘,‘,‘,‘||rx.SRC_CITY||‘,‘)>0
               and instr(‘,‘||t.in_znos||‘,‘,‘,‘||rx.DES_CITY||‘,‘)=0;
            V_SQL_NUM :=sql%rowcount ;
        END IF;

        --UPDATE 状态
        UPDATE
            TT_AS_OUT_IDENT_MID T
        SET
            T.DEAL_FLG = 2
            ,T.REMARK= DECODE(
                            V_BATCH_OUT,
                            0,
                            DECODE(V_SQL_NUM,0,‘NO TRANSIT CONFIG OUTS_ZNOS‘,‘INSERT INTO TT_AS_OUT_IDENT SUCCESCCD ,ID=‘||V_AS_OUT_ID),
                            ‘discard‘)
            ,T.DEAL_TM = CURRENT_TIMESTAMP
        WHERE
            T.ROWID = RX.RID;

        --批次提交控制
        V_COUNT:=V_COUNT+1 ;
        IF(MOD(V_COUNT,P_COMMIT_NUM)=0)THEN
            COMMIT;
        END IF;
    END LOOP;

    COMMIT;

EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        PKG_SYS_LOG.ERROR_LOG(NULL,
            ‘PROC_TT_AS_OUT_IDENT_MID‘,
            SYSDATE,
            SQLCODE,
            SQLERRM,
            DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,NULL
        );
END PROC_TT_AS_OUT_IDENT_MID;

-- 建序列

SEQ_TT_TRMS_CAR_TASK

  

时间: 2024-12-27 23:44:40

巴枪操作关联车辆记录的相关文章

物流快递业使用巴枪的意义

条码技术为快速准确的数据采集.数据录入提供了有效.可靠的手段,巴枪作为数据采集设备对物流信息进行条码采集,与计算机.网络通讯等一起构成了现代商业自动化的基础,利用条码技术,对企业的物流信息进行采集跟踪管理,可满足物流企业在车线.转运站.站点.收派件.仓储管理等方面的应用.1.车线:班车.车线.干线操作更加简单.车辆货物运转轻松录入,班车数据对比, 异常问题运单处理数据上报,极大的提升了管理效率及客户满意度.2.转运站:一键式读取运单条码信息, 快件出入省时省力,轻松提高运转效率.联网信息实时录入

Eclipse 导入项目与 svn 插件关联全过程记录

文章摘自:http://www.cnblogs.com/xmmcn/archive/2013/03/01/2938365.html 感谢博友分享! Eclipse 导入项目与 svn 插件关联全过程记录 今天想整理一下相关项目的前端代码以及目录结构,故利用svn客户端(TortoiseSVN 1.7.2)从trunk上新建了一个branches,然后checkout到本地. 打开Eclipse,点击 File -> Import -> General -> Existing Projec

将插座变量(IBOutlet)关联到*.xib文件中对象 + 将对*.xib对象的操作关联到动作方法(IBAction)

将插座变量(IBOutlet)关联到*.xib文件中对象 以BNRDetailViewController.m和BNRDetailViewController.xib为例(<iOS编程>第10章例子) 1.打开BNRDetailViewController.xib,添加一个UITextField对象: 2.在辅助编辑器中打开BNRDetailViewController.m,方法是:按住Option键并点击项目导航面板中的BNRDetailViewController.m: 3.按住Contr

mysql关联删除记录

在项目开发过程中,要删除表中的记录数据,但是给的字段值不是本表中的字段值,试了很多方法都没有成功,最后看到这个方法挺好用的: DELETE g FROM ws_group_users g, yf_user u WHERE g.userid=u.id and u.phone=? mysql关联删除记录,布布扣,bubuko.com

linux系统初始化--&#8203;关闭Ctrl+Alt+Del自动重启的操作关联

关闭Ctrl+Alt+Del自动重启的操作关联 这个操作必须要做,要不出现了意外真的是连哭都不用了,linux这点真心坑爹呀,不用登陆,直接按下ctrl+alt+del就可以重新启动服务器?重要的是生产环境下windows很多时候需要ctrl+alt+del唤醒,如果不小心按下了,哈哈哈哈哈啊哈!恭喜~ 熟悉linux启动流程的各位应该都知道,我们可以去/etc/inittab中去查找ctrl+alt+del的控制文件. 使用如下命令修改配置文件 RHEL6 命令 Shell># vi  /et

LoadRunner关联函数的脚本实例--如何操作关联参数

LoadRunner关联函数的脚本实例--如何操作关联参数 这几天一直在学习LoadRunner的VuGen编程,今天想对关联函数web_reg_save_param做详细的试验和研究: ~f6p q+Z  RM0 a6_%_+vF9Ws\w&S0 问题提出:如何对关联的数据进行字符串操作.下面使用了LoadRunner自带的订票例子为例,进行了这方面的试验.假设我要关联的数据是由几个字符串组成的.如何使这些字符串组成一个参数,供我后面的函数使用?51Testing软件测试网.VZR(`D&quo

JavaScript操作XML工作记录

JavaScript操作XML (一) JavaScript操作XML是通过XML DOM来完成的.那么什么是XML DOM呢?XML DOM 是: 用于 XML 的标准对象模型 用于 XML 的标准编程接口 中立于平台和语言 W3C 的标准 XML DOM 定义了所有XML 元素的对象和属性,以及访问它们的方法(接口).也就是说:XML DOM 是用于查询.添加.修改.删除XML 元素的标准. 在继续之前,我们先来了解一下XML的定义.请看下面的 XML 文件 (books.xml):<?xm

IBatisNet:让insert操作返回新增记录的主键值

项目引用ibatis包: IBatisNet.Common.dll --文件版本1.6.2.0 IBatisNet.DataAccess.dll IBatisNet.DataMapper.dll 项目目录结构: 项目中使用ibatis做数据访问层已经有好长时间了.开发小组成员反映ibatis的insert操作返回的结果是null,这一点很是不爽. 其实,大家都是希望能够把新增记录的主键值返回出来. 上上周,大家有反编译ibatis的包,查看其实现原理,后来,又尝试其他方法,都没能给实现这个功能.

关于一个需求引发的事务操作和锁-记录解决过程和思路

参考资料: http://openwares.net/java/spring_mybatis_transaction.htmlspring,mybatis事务管理配置与@Transactional注解使用 http://www.cnblogs.com/mingxuan/archive/2011/10/11/2207560.html锁行还是锁表的实践验证 http://blog.csdn.net/hushanfeng110/article/details/50174787使用mybatis 实现乐