码迷,mamicode.com
首页 > 其他好文 > 详细

巴枪操作关联车辆记录

时间:2017-06-18 22:44:19      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:var   开头   mod   参数   current   表数据   varchar2   存在   put   

表结构:
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

  

巴枪操作关联车辆记录

标签:var   开头   mod   参数   current   表数据   varchar2   存在   put   

原文地址:http://www.cnblogs.com/fubinhnust/p/7045604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!