CREATE OR REPLACE PACKAGE NIE03_SERVEAS IS -- Author : SUNJIAWANG -- Created : 2009-7-24 14:40:55 -- Purpose : 指定充当 PROCEDURE REP_MAIN ( P_MAT_NO IN VARCHAR ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE ,SIGN_STL IN VARCHAR := 'Y' ,SIGN_CHEN_FEN IN VARCHAR := 'Y' ,SING_CAIZHI IN VARCHAR := 'Y' ,SIGN_QIANGZHI IN VARCHAR := 'N' ,P_REG_ID IN VARCHAR := 'NO_USER' ,P_RTN_MSG OUT VARCHAR ) ; PROCEDURE SERVEABLE ( P_MAT_NO IN VARCHAR ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE ,SIGN_STL IN VARCHAR := 'Y' ,SIGN_CHEN_FEN IN VARCHAR := 'Y' ,SING_CAIZHI IN VARCHAR := 'Y' ,SIGN_QIANGZHI IN VARCHAR := 'N' -- ,P_RTN_MSG OUT VARCHAR ); PROCEDURE CHK_IS_SYN; PROCEDURE INIT_MAT_TYPE (P_MAT_NO IN VARCHAR); PROCEDURE SERVE_HIS ( P_MAT_TYPE IN VARCHAR ,P_MAT_NO IN VARCHAR ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE ,P_REG_ID IN VARCHAR ); PROCEDURE SLAB_SERVE ( P_MAT_NO IN VARCHAR ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE ,P_REG_ID IN VARCHAR ); PROCEDURE COIL_SERVE ( P_MAT_NO IN VARCHAR ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE ,P_REG_ID IN VARCHAR ); PROCEDURE MAT_CHK( P_MAT1 VARCHAR ,P_MAT2 VARCHAR); PROCEDURE MAT_REP_EACH_OTHER( P_MAT1 VARCHAR ,P_MAT2 VARCHAR ,SIGN_STL IN VARCHAR := 'Y' ,SIGN_CHEN_FEN IN VARCHAR := 'Y' ,SING_CAIZHI IN VARCHAR := 'Y' ,SIGN_QIANGZHI IN VARCHAR := 'N' ,P_REG_ID IN VARCHAR := 'NO_USER' ,P_RTN_MSG OUT VARCHAR ) ; END NIE03_SERVEAS; / CREATE OR REPLACE PACKAGE BODY NIE03_SERVEAS IS GV_MAT_TYPE VARCHAR(2) := ''; PROCEDURE REP_MAIN ( P_MAT_NO IN VARCHAR --物料号 ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE --订单号 ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE --订单行 ,SIGN_STL IN VARCHAR := 'Y' --是否同牌号 ,SIGN_CHEN_FEN IN VARCHAR := 'Y' --是否同成分 ,SING_CAIZHI IN VARCHAR := 'Y' --是否同材质 ,SIGN_QIANGZHI IN VARCHAR := 'N' --是否强制充当 ,P_REG_ID IN VARCHAR := 'NO_USER' --登陆Id ,P_RTN_MSG OUT VARCHAR --返回信息 ) IS BEGIN COMM.INIT_RTN_MSG; CHK_IS_SYN; COMM.INIT_USER(P_REG_ID); INIT_MAT_TYPE(P_MAT_NO); SERVEABLE(P_MAT_NO,P_ORD_NO,P_ORD_SEQ,SIGN_STL,SIGN_CHEN_FEN,SING_CAIZHI,SIGN_QIANGZHI); SERVE_HIS(GV_MAT_TYPE,P_MAT_NO,P_ORD_NO,P_ORD_SEQ,P_REG_ID); IF GV_MAT_TYPE = 'TM' THEN SLAB_SERVE(P_MAT_NO,P_ORD_NO,P_ORD_SEQ,P_REG_ID); ELSIF GV_MAT_TYPE = 'AR' THEN COIL_SERVE(P_MAT_NO,P_ORD_NO,P_ORD_SEQ,P_REG_ID); END IF; EXCEPTION WHEN COMM.PE THEN P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG; WHEN OTHERS THEN COMM.CALL_OTHER_EXCEPTION_DO(P_RTN_MSG); END; PROCEDURE INIT_MAT_TYPE (P_MAT_NO IN VARCHAR) IS VE EXCEPTION; BEGIN IF SUBSTR(P_MAT_NO, 1, 1) = 'J' THEN GV_MAT_TYPE := 'TM'; ELSIF SUBSTR(P_MAT_NO, 1, 1) = 'R' THEN GV_MAT_TYPE := 'AR' ; ELSE RAISE VE; END IF; EXCEPTION WHEN VE THEN COMM.REC_ERR.P_ERR_PARAM1 := 'P_MAT_NO' ; COMM.REC_ERR.P_ERR_MSG := P_MAT_NO || '该物料不存在,请核查'; COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); END; PROCEDURE SERVEABLE ( P_MAT_NO IN VARCHAR ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE ,SIGN_STL IN VARCHAR := 'Y' ,SIGN_CHEN_FEN IN VARCHAR := 'Y' ,SING_CAIZHI IN VARCHAR := 'Y' ,SIGN_QIANGZHI IN VARCHAR := 'N' -- ,P_RTN_MSG OUT VARCHAR ) IS VE EXCEPTION; VE_ORD_NO_NULL EXCEPTION; VE_ORD_SEQ_NULL EXCEPTION; VE_STAT EXCEPTION; VE_ORD_FL EXCEPTION; VE_STL EXCEPTION; VE_SIZE EXCEPTION; VE_WGT EXCEPTION; VE_CHEN_FEN EXCEPTION; VE_CAI_ZHI EXCEPTION; VE_PROG_CD EXCEPTION; VE_DLIV EXCEPTION; CURSOR CUR_MAT_SLAB IS SELECT A.SLAB_NO DSP_NO, A.SLAB_NO MAT_NO, -- 板坯号 A.STL_GRD ORD_STL_GRD, -- 钢号 B.STL_GRD COM_STL_GRD, A.SLAB_WTH MAT_WTH, -- 板坯宽度 A.SLAB_WGT MAT_WGT, -- 板坯重量 B.ORD_UNIT_WGT_MIN, B.ORD_UNIT_WGT_MAX, A.CUR_PROG_CD, (A.SLAB_WGT * C.PROC_RATE / 100) MAT_REP_WGT, CASE WHEN (A.SLAB_STAT = '2') THEN 'YY' ELSE 'XX' END SLAB_STAT_ABLE, CASE WHEN (A.ORD_FL = '2') THEN 'YY' ELSE 'XX' END ORD_FL_ABLE, CASE WHEN (A.CUR_PROG_CD IN ('RRC','RBA')) THEN 'YY' ELSE 'XX' END CUR_PROG_CD_ABLE, CASE WHEN ('Y' <> NVL(SIGN_STL, 'N') OR A.STL_GRD = B.STL_GRD) THEN 'YY' ELSE 'XX' END STL_ABLE, CASE WHEN (A.SLAB_WTH BETWEEN B.ORD_WTH AND B.ORD_WTH + 100) THEN 'YY' ELSE 'XX' END SIZE_ABLE, CASE WHEN (A.SLAB_WGT * C.PROC_RATE / 100) BETWEEN B.ORD_UNIT_WGT_MIN AND B.ORD_UNIT_WGT_MAX THEN 'YY' ELSE 'XX' END WGT_ABLE, CASE WHEN ('Y' <> NVL(SIGN_CHEN_FEN, 'N') OR GF_NIB028720(A.SLAB_NO, B.ORD_NO, B.ORD_SEQ) = 'YY') THEN 'YY' ELSE 'XX' END CHEN_FEN_ABLE FROM TBG02_SLAB_COMM A, TBE02_ORD_PRC B, (SELECT PROC_RATE FROM TBE01_PROC_RATE WHERE PROC_CD = 'R') C WHERE B.ORD_NO = P_ORD_NO -- 合同号 AND B.ORD_SEQ = P_ORD_SEQ -- 订单号 AND A.SLAB_NO = P_MAT_NO AND ROWNUM = 1; REC_MAT_SLAB CUR_MAT_SLAB%ROWTYPE; CURSOR CUR_MAT_COIL IS SELECT A.OLD_SAMPL_NO DSP_NO, A.COIL_NO MAT_NO, -- 钢卷号 A.STL_GRD ORD_STL_GRD, -- 钢号 A.CUR_PROG_CD, A.DLIV_DIRNO, B.STL_GRD COM_STL_GRD, A.COIL_THK MAT_THK, -- 钢卷厚度 B.ORD_THK_MIN, B.ORD_THK_MAX, A.COIL_WTH MAT_WTH, -- 钢卷宽度 B.ORD_WTH_MIN, B.ORD_WTH_MAX, B.ORD_UNIT_WGT_MIN, B.ORD_UNIT_WGT_MAX, A.ACT_WGT MAT_WGT, -- 钢卷重量 A.ACT_WGT MAT_REP_WGT, CASE WHEN (A.COIL_STAT IN ('2','4')) THEN 'YY' ELSE 'XX' END COIL_STAT_ABLE, CASE WHEN ('Y' <> NVL(SIGN_STL, 'N') OR A.STL_GRD = B.STL_GRD) THEN 'YY' ELSE 'XX' END STL_ABLE, CASE WHEN (GF_NIB028780(A.COIL_NO, B.ORD_NO, B.ORD_SEQ) = 'YY') THEN 'YY' ELSE 'XX' END SIZE_ABLE, CASE WHEN (A.ACT_WGT BETWEEN B.ORD_UNIT_WGT_MIN AND B.ORD_UNIT_WGT_MAX) THEN 'YY' ELSE 'XX' END WGT_ABLE, CASE WHEN ('Y' <> NVL(SIGN_CHEN_FEN, 'N') OR GF_NIB028720(A.SLAB_NO, B.ORD_NO, B.ORD_SEQ) = 'YY') THEN 'YY' ELSE 'XX' END CHEN_FEN_ABLE, CASE WHEN ('Y' <> NVL(SING_CAIZHI, 'N') OR GF_NIB028750(A.COIL_NO, B.ORD_NO, B.ORD_SEQ) = 'YY') THEN 'YY' ELSE 'XX' END CAI_ZHI_ABLE, CASE WHEN (A.CUR_PROG_CD IN ('SRC','SFA')) THEN 'YY' ELSE 'XX' END PROG_CD_ABLE, CASE WHEN (A.DLIV_DIRNO IS NULL) THEN 'YY' ELSE 'XX' END DLIV_ABLE FROM TBH02_COIL_COMM A, TBE02_ORD_PRC B WHERE B.ORD_NO = P_ORD_NO -- 合同号 AND B.ORD_SEQ = P_ORD_SEQ -- 订单号 AND A.OLD_SAMPL_NO = P_MAT_NO AND ROWNUM = 1; REC_MAT_COIL CUR_MAT_COIL%ROWTYPE; BEGIN IF NVL(P_ORD_NO,' ') = ' ' THEN RAISE VE_ORD_NO_NULL; END IF; IF NVL(P_ORD_SEQ,' ') = ' ' THEN RAISE VE_ORD_SEQ_NULL; END IF; IF GV_MAT_TYPE = 'TM' THEN OPEN CUR_MAT_SLAB; LOOP FETCH CUR_MAT_SLAB INTO REC_MAT_SLAB; IF CUR_MAT_SLAB%ROWCOUNT = 0 THEN RAISE VE; END IF; EXIT WHEN CUR_MAT_SLAB %NOTFOUND; IF (REC_MAT_SLAB.SLAB_STAT_ABLE <> 'YY') THEN COMM.REC_ERR.P_ERR_PARAM1 := 'SLAB_STAT'; COMM.REC_ERR.P_ERR_MSG := P_MAT_NO || '该物料不存在,请核查'; RAISE VE_STAT; ELSIF (REC_MAT_SLAB.ORD_FL_ABLE <> 'YY') THEN COMM.REC_ERR.P_ERR_PARAM1 := 'ORD_FL'; COMM.REC_ERR.P_ERR_MSG := P_MAT_NO || '该物料已为订单材'; RAISE VE_ORD_FL; ELSIF (REC_MAT_SLAB.STL_ABLE <> 'YY' AND NVL(SIGN_QIANGZHI,'N') <> 'Y' ) THEN COMM.REC_ERR.P_ERR_MSG := '牌号不一致: ' || P_MAT_NO || '的牌号为 ' || REC_MAT_SLAB.COM_STL_GRD || ' ' || P_ORD_NO || P_ORD_SEQ || '的牌号为 ' || REC_MAT_SLAB.ORD_STL_GRD; RAISE VE_STL; ELSIF (REC_MAT_SLAB.SIZE_ABLE <> 'YY' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN COMM.REC_ERR.P_ERR_MSG := '尺寸不在订单公差范围: ' || P_MAT_NO || '宽度 ' || REC_MAT_SLAB.MAT_WTH || ' ; ' || P_ORD_NO || P_ORD_SEQ || '的宽度公差 ' || TO_NUMBER(REC_MAT_SLAB.MAT_WTH - 100) || '~' || REC_MAT_SLAB.MAT_WTH; RAISE VE_SIZE; ELSIF (REC_MAT_SLAB.WGT_ABLE <> 'YY' AND NVL(SIGN_QIANGZHI,'N') <> 'Y' ) THEN COMM.REC_ERR.P_ERR_MSG := '单重不在订单公差范围: ' || P_MAT_NO || '重量 ' || REC_MAT_SLAB.MAT_WGT || ' ' || P_ORD_NO || P_ORD_SEQ || '的单重公差 ' || REC_MAT_SLAB.ORD_UNIT_WGT_MIN || '~' || REC_MAT_SLAB.ORD_UNIT_WGT_MAX; RAISE VE_WGT; ELSIF (REC_MAT_SLAB.CHEN_FEN_ABLE <> 'YY' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN RAISE VE_CHEN_FEN; ELSIF (REC_MAT_SLAB.CUR_PROG_CD_ABLE <> 'YY') THEN COMM.REC_ERR.P_ERR_PARAM1 := 'CUR_PROG_CD'; COMM.REC_ERR.P_ERR_MSG := '当前进程状态不符合!当前进程状态为: '||REC_MAT_SLAB.CUR_PROG_CD; RAISE VE_PROG_CD; END IF; END LOOP; CLOSE CUR_MAT_SLAB; ELSIF GV_MAT_TYPE = 'AR' THEN --GV_MAT_TYPE := 'AR'; OPEN CUR_MAT_COIL; LOOP FETCH CUR_MAT_COIL INTO REC_MAT_COIL; IF CUR_MAT_COIL%ROWCOUNT = 0 THEN RAISE VE; END IF; EXIT WHEN CUR_MAT_COIL%NOTFOUND; IF (REC_MAT_COIL.COIL_STAT_ABLE <> 'YY') THEN COMM.REC_ERR.P_ERR_PARAM1 := 'COIL_STAT'; COMM.REC_ERR.P_ERR_MSG := P_MAT_NO || '该物料不存在,请核查'; RAISE VE_STAT; /* ELSIF (REC_MAT_COIL.ORD_FL_ABLE <> 'YY') THEN COMM.REC_ERR.P_ERR_PARAM1 := 'ORD_FL'; COMM.REC_ERR.P_ERR_MSG := '该物料已为订单材'; RAISE VE_ORD_FL;*/ ELSIF (REC_MAT_COIL.STL_ABLE = 'XX' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN COMM.REC_ERR.P_ERR_MSG := '牌号不一致: ' || P_MAT_NO || '的牌号为 ' || REC_MAT_COIL.COM_STL_GRD || ' ' || P_ORD_NO || P_ORD_SEQ || '的牌号为 ' || REC_MAT_COIL.ORD_STL_GRD; RAISE VE_STL; ELSIF (REC_MAT_COIL.SIZE_ABLE = 'XX' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN COMM.REC_ERR.P_ERR_MSG := '尺寸不在订单公差范围: ' || P_MAT_NO || '宽度 ' || REC_MAT_COIL.MAT_WTH || ' , 厚度: ' || REC_MAT_COIL.MAT_THK || '; ' || P_ORD_NO || P_ORD_SEQ || '的宽度公差 ' || REC_MAT_COIL.ORD_WTH_MIN || '~' || REC_MAT_COIL.ORD_WTH_MAX || '厚度公差 ' || REC_MAT_COIL.ORD_THK_MIN || '~' || REC_MAT_COIL.ORD_THK_MAX; RAISE VE_SIZE; ELSIF (REC_MAT_COIL.WGT_ABLE = 'XX' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN COMM.REC_ERR.P_ERR_MSG := '单重不在订单公差范围: ' || P_MAT_NO || '重量 ' || REC_MAT_SLAB.MAT_WGT || ' ' || P_ORD_NO || P_ORD_SEQ || '的单重公差 ' || REC_MAT_COIL.ORD_UNIT_WGT_MIN || '~' || REC_MAT_COIL.ORD_UNIT_WGT_MAX; RAISE VE_WGT; ELSIF (REC_MAT_COIL.CHEN_FEN_ABLE = 'XX' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN RAISE VE_CHEN_FEN; ELSIF (REC_MAT_COIL.CAI_ZHI_ABLE = 'XX' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN RAISE VE_CAI_ZHI; ELSIF (REC_MAT_COIL.PROG_CD_ABLE <> 'YY') THEN COMM.REC_ERR.P_ERR_PARAM1 := 'CUR_PROG_CD'; COMM.REC_ERR.P_ERR_MSG := '当前进程状态不符合!当前进程状态为: '||REC_MAT_COIL.CUR_PROG_CD; RAISE VE_PROG_CD; ELSIF (REC_MAT_COIL.DLIV_ABLE <> 'YY') THEN COMM.REC_ERR.P_ERR_PARAM1 := 'DLIV_NO'; COMM.REC_ERR.P_ERR_MSG := '该钢卷已发货,发货号为 '||REC_MAT_COIL.DLIV_DIRNO; RAISE VE_DLIV; END IF; END LOOP; CLOSE CUR_MAT_COIL; ELSE -- RAISE VE; NULL; END IF; COMM.REC_ERR.P_RTN_MSG:= '符合充当条件'; EXCEPTION WHEN VE THEN COMM.REC_ERR.P_ERR_PARAM1 := 'P_MAT_NO'; COMM.REC_ERR.P_ERR_MSG := P_MAT_NO || '该物料不存在,请核查'; COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); --COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE); --P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG; WHEN VE_ORD_NO_NULL THEN COMM.REC_ERR.P_ERR_PARAM1 := 'P_ORD_NO'; COMM.REC_ERR.P_ERR_MSG := '订单号为空'; COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); WHEN VE_ORD_SEQ_NULL THEN COMM.REC_ERR.P_ERR_PARAM1 := 'P_ORD_SEQ'; COMM.REC_ERR.P_ERR_MSG := '订单号为空'; COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); --COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE); --P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG; WHEN VE_STAT THEN COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); -- COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE); -- P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG; WHEN VE_ORD_FL THEN COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); -- COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE); -- P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG; WHEN VE_STL THEN COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); -- COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE); -- P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG; WHEN VE_SIZE THEN COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); WHEN VE_WGT THEN COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); --COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE); -- P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG; WHEN VE_CHEN_FEN THEN COMM.REC_ERR.P_ERR_MSG := '成分不合格'; COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); -- COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE); --P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG; WHEN VE_CAI_ZHI THEN COMM.REC_ERR.P_ERR_MSG := '材质不合格'; COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); -- COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE); -- P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG; /* WHEN COMM.PE THEN P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG; WHEN OTHERS THEN COMM.CALL_OTHER_EXCEPTION_DO(P_RTN_MSG);*/ WHEN VE_PROG_CD THEN COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); WHEN VE_DLIV THEN COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); END; PROCEDURE CHK_IS_SYN IS LV_PRC_STS VARCHAR(1) := 'C'; VE_SYN EXCEPTION; BEGIN SELECT PRC_STS INTO LV_PRC_STS -- 进程状态 FROM TBE05_JOB_DET WHERE PLT = 'R' -- 参数:工厂 AND MAIN_PGMID = 'NIE031000' -- 参数:主程序 ID AND SEQ = 3; IF LV_PRC_STS <> 'C' THEN RAISE VE_SYN; END IF; EXCEPTION WHEN VE_SYN THEN -- COMM.REC_ERR.P_ERR_PARAM1 := 'LV_PRC_STS'; COMM.REC_ERR.P_ERR_MSG := '手动充当进行中,如要更改为自动充当,请先关闭充当进程,这将会导致自动充当结果被放弃'; COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); END; PROCEDURE SERVE_HIS ( P_MAT_TYPE IN VARCHAR ,P_MAT_NO IN VARCHAR ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE ,P_REG_ID IN VARCHAR ) IS BEGIN COMM.INIT_USER(P_REG_ID); INSERT INTO TBE04_REP_HIS (REP_TYP, REP_KND, REG_ID, MOD_PGM_ID, REG_DTIME, UPD_AFT_ORD_NO, UPD_AFT_ORD_SEQ, UPD_AFT_CUST_CD, MAT_NO, MAT_TYPE, UPD_BEF_ORD_NO, UPD_BEF_ORD_SEQ, UPD_BEF_CUST_CD) -- (1) 充当代码, 充当方法, 录入者, 变更程序ID, 录入时间, -- (2) 变更前合同号, 变更前订单号, 变更前客户代码, 物料类型, -- (3) 物料号, 变更后合同号, 变更后订单号, 变更后客户代码 SELECT 'A', 'M', P_REG_ID, 'UIE031045', TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISS'), ORD_NO, ORD_SEQ, CUST_CD, P_MAT_NO, P_MAT_TYPE, '', '', '' FROM TBE02_ORD_PRC WHERE ORD_NO = P_ORD_NO AND ORD_SEQ = P_ORD_SEQ; END; PROCEDURE SLAB_SERVE ( P_MAT_NO IN VARCHAR ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE ,P_REG_ID IN VARCHAR )IS BEGIN UPDATE TBG02_SLAB_COMM A SET BEF_PROG_CD = CUR_PROG_CD, BEF_PROG_CD_PGM = CUR_PROG_CD_PGM, BEF_PROG_CD_DTIME = CUR_PROG_CD_DTIME, CUR_PROG_CD = 'RBA', CUR_PROG_CD_PGM = 'NIE03_SERVEAS', CUR_PROG_CD_DTIME = TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISS'), ORD_FL = '1', NONORD_CAUSE_CD = '', NONORD_OCR_DTIME = '', MOD_ID = P_REG_ID, MOD_DTIME = TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISS'), ORG_ORD_NO = DECODE(ORD_FL,'1',ORD_NO,''), ORG_ORD_SEQ = DECODE(ORD_FL,'1',ORD_SEQ,''), (ORD_NO, ORD_SEQ, CUST_CD, ORDCUST_CD, ORD_USE_CD, PRODNM_CD, SF_METHOD, SPEC_ABBSYM, DEVLMT_DTIME, INSTR_COIL_THK, INSTR_COIL_WTH, INSTR_COIL_INDIA, INSTR_COIL_WGT, INSTR_COIL_LEN, INSTR_COIL_OUTDIA, SLAB_INGR_DEC_GRD) = (SELECT ORD_NO, ORD_SEQ, CUST_CD, ORDCUST_CD, ORD_USEAGE_CD, PRODNM_CD, SCARPING_PROC_YN, SPEC_ABBSYM, DEL_TO_DATE, ORD_THK, ORD_WTH, ORD_INDIA, (A.SLAB_WGT * C.PROC_RATE / 100), (A.SLAB_WGT * C.PROC_RATE / 100) / (B.ORD_THK * B.ORD_WTH * 7.85) * 1000000, SQRT(4 * (A.SLAB_WGT * C.PROC_RATE / 100) / (B.ORD_WTH / 1000000 * 7.85 * 3.14 ) + (B.ORD_INDIA * B.ORD_INDIA)), DECODE(GF_NIB028720(A.SLAB_NO, ORD_NO, ORD_SEQ), 'YY', '1', '2') FROM TBE02_ORD_PRC B, ( SELECT PROC_RATE FROM TBE01_PROC_RATE WHERE PROC_CD = 'R') C WHERE ORD_NO = P_ORD_NO AND ORD_SEQ = P_ORD_SEQ) WHERE SLAB_NO = P_MAT_NO; DELETE TBG02_SLAB_COMM_D WHERE SLAB_NO = P_MAT_NO; INSERT INTO TBG02_SLAB_COMM_D ( SLAB_NO, SLAB_CUT_SEQ, SLAB_THK, SLAB_WTH, SLAB_LEN, ORD_THK, ORD_WTH, ORD_LEN, ORD_WGT, COIL_INDIA, COIL_OUTDIA, ORD_NO, ORD_SEQ, ORD_FL ) SELECT SLAB_NO, '01', SLAB_THK, SLAB_WTH, SLAB_LEN, INSTR_COIL_THK, INSTR_COIL_WTH, INSTR_COIL_LEN, INSTR_COIL_WGT, INSTR_COIL_INDIA, INSTR_COIL_OUTDIA, ORD_NO, ORD_SEQ, '1' FROM TBG02_SLAB_COMM WHERE SLAB_NO = P_MAT_NO; END; PROCEDURE COIL_SERVE ( P_MAT_NO IN VARCHAR ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE ,P_REG_ID IN VARCHAR )IS BEGIN UPDATE TBH02_COIL_COMM A SET BEF_PROG_CD = CUR_PROG_CD, BEF_PROG_CD_PGM = CUR_PROG_CD_PGM, BEF_PROG_CD_DTIME = CUR_PROG_CD_DTIME, CUR_PROG_CD = 'SFA', CUR_PROG_CD_PGM = 'NIE03_SERVEAS', CUR_PROG_CD_DTIME = TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISS'), ORD_FL = '1', TOT_DEC_GRD = '1', NONORD_CAUSE_CD = '', NONORD_OCR_DTIME = '', ORG_ORD_NO = DECODE(ORD_FL,'1',ORD_NO,''), ORG_ORD_SEQ = DECODE(ORD_FL,'1',ORD_SEQ,''), (ORD_NO, ORD_SEQ, CUST_CD, ORDCUST_CD, ORD_USE_CD, SPEC_ABBSYM, PRODNM_CD, SPM_YN, DEVLMT_DTIME, DEST_CD, INGR_DEC_GRD, MATLQLTY_DEC_GRD,INSTR_COIL_THK -- 订单厚度 ,INSTR_COIL_WTH -- 订单宽度 ,INSTR_COIL_LEN -- 订单长度 ,INSTR_COIL_INDIA -- 订单内径 ,INSTR_COIL_OUTDIA -- 订单外径 ,INSTR_COIL_WGT -- 订单重量 ) = (SELECT ORD_NO, ORD_SEQ, CUST_CD, ORDCUST_CD, ORD_USEAGE_CD, SPEC_ABBSYM, PRODNM_CD, SPM_PROC_YN, DEL_TO_DATE, DEST_CD, DECODE(GF_NIB028720(A.SLAB_NO, ORD_NO, ORD_SEQ), 'YY', '1', '2'), DECODE(GF_NIB028750(A.COIL_NO, ORD_NO, ORD_SEQ), 'YY', '1', '2'),ORD_THK -- 订单厚度 ,ORD_WTH -- 订单宽度 ,ORD_LEN -- 订单长度 ,ORD_INDIA -- 订单内径 ,ORD_OUTDIA -- 订单外径 ,ORD_WGT -- 订单重量 FROM TBE02_ORD_PRC WHERE ORD_NO = P_ORD_NO AND ORD_SEQ = P_ORD_SEQ) WHERE OLD_SAMPL_NO = P_MAT_NO; DELETE TBH02_COIL_COMM_D WHERE COIL_NO = (SELECT COIL_NO FROM TBH02_COIL_COMM WHERE OLD_SAMPL_NO = P_MAT_NO); INSERT INTO TBH02_COIL_COMM_D ( COIL_NO, CUT_SEQ, ORD_THK, ORD_WTH, ORD_LEN, ORD_WGT, ORD_WGT_MIN, ORD_WGT_MAX, ORD_INDIA, ORD_OUTDIA, ORD_NO, ORD_SEQ, ORD_FL ) SELECT A.COIL_NO, '01', A.COIL_THK, A.COIL_WTH, A.COIL_LEN, A.ACT_WGT, B.ORD_UNIT_WGT_MIN, B.ORD_UNIT_WGT_MAX, A.COIL_INDIA, A.COIL_OUTDIA, A.ORD_NO, A.ORD_SEQ, '1' FROM TBH02_COIL_COMM A, TBE02_ORD_PRC B WHERE A.ORD_NO = B.ORD_NO AND A.ORD_SEQ = B.ORD_SEQ AND A.OLD_SAMPL_NO = P_MAT_NO; NULL; END; PROCEDURE MAT_REP_EACH_OTHER( P_MAT1 VARCHAR --物料号1 ,P_MAT2 VARCHAR --物料号2 ,SIGN_STL IN VARCHAR := 'Y' ,SIGN_CHEN_FEN IN VARCHAR := 'Y' ,SING_CAIZHI IN VARCHAR := 'Y' ,SIGN_QIANGZHI IN VARCHAR := 'N' ,P_REG_ID IN VARCHAR := 'NO_USER' ,P_RTN_MSG OUT VARCHAR ) IS GV_ORD_NO1 TBE02_ORD_PRC.ORD_NO%TYPE :='' ; GV_ORD_SEQ1 TBE02_ORD_PRC.ORD_SEQ%TYPE :=''; GV_ORD_NO2 TBE02_ORD_PRC.ORD_NO%TYPE :=''; GV_ORD_SEQ2 TBE02_ORD_PRC.ORD_SEQ%TYPE :=''; BEGIN MAT_CHK(P_MAT1,P_MAT2); INIT_MAT_TYPE(P_MAT1); IF(GV_MAT_TYPE = 'AR') THEN SELECT DECODE(ORD_FL,'1',A.ORD_NO,'XX'),DECODE(ORD_FL,'1',A.ORD_SEQ ,'XX') INTO GV_ORD_NO1,GV_ORD_SEQ1 FROM TBH02_COIL_COMM A WHERE A.OLD_SAMPL_NO = P_MAT1 AND A.COIL_STAT IN ('2','4') -- AND A.ORD_FL = '1' AND A.DLIV_DIRNO IS NULL AND ROWNUM = 1; SELECT DECODE(ORD_FL,'1',A.ORD_NO,'XX'),DECODE(ORD_FL,'1',A.ORD_SEQ ,'XX') INTO GV_ORD_NO2,GV_ORD_SEQ2 FROM TBH02_COIL_COMM A WHERE A.OLD_SAMPL_NO = P_MAT2 -- AND A.ORD_FL = '1' AND A.DLIV_DIRNO IS NULL AND A.COIL_STAT IN ('2','4') AND ROWNUM = 1; ELSIF(GV_MAT_TYPE = 'TM') THEN SELECT DECODE(ORD_FL,'1',A.ORD_NO,'XX'),DECODE(ORD_FL,'1',A.ORD_SEQ ,'XX') INTO GV_ORD_NO1,GV_ORD_SEQ1 FROM TBG02_SLAB_COMM A WHERE A.SLAB_NO = P_MAT1 -- AND A.ORD_FL = '1' AND A.SLAB_STAT = '2' AND ROWNUM = 1; SELECT DECODE(ORD_FL,'1',A.ORD_NO,'XX'),DECODE(ORD_FL,'1',A.ORD_SEQ ,'XX') INTO GV_ORD_NO2,GV_ORD_SEQ2 FROM TBG02_SLAB_COMM A WHERE A.SLAB_NO = P_MAT2 AND A.SLAB_STAT = '2' -- AND A.ORD_FL = '1' AND ROWNUM = 1; END IF; IF(GV_ORD_NO2 <> 'XX' AND GV_ORD_SEQ2 <> 'XX' ) THEN REP_MAIN(P_MAT1,GV_ORD_NO2,GV_ORD_SEQ2,SIGN_STL,SIGN_CHEN_FEN,SING_CAIZHI,SIGN_QIANGZHI,P_REG_ID,P_RTN_MSG); END IF; IF (GV_ORD_NO1 <> 'XX' OR GV_ORD_SEQ1 <> 'XX' ) THEN REP_MAIN(P_MAT2,GV_ORD_NO1,GV_ORD_SEQ1,SIGN_STL,SIGN_CHEN_FEN,SING_CAIZHI,SIGN_QIANGZHI,P_REG_ID,P_RTN_MSG); END IF; EXCEPTION WHEN COMM.PE THEN P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG; WHEN OTHERS THEN COMM.CALL_OTHER_EXCEPTION_DO(P_RTN_MSG); END; PROCEDURE MAT_CHK( P_MAT1 VARCHAR ,P_MAT2 VARCHAR) IS VE_LEN_MAT EXCEPTION; BEGIN IF(LENGTH(P_MAT1) <> LENGTH(P_MAT2) AND LENGTH(P_MAT1) <> 13) THEN RAISE VE_LEN_MAT; END IF; EXCEPTION WHEN VE_LEN_MAT THEN COMM.REC_ERR.P_ERR_MSG := '请检查物料'; COMM.REC_ERR.P_ERR_PARAM1 := 'P_MAT1: ' || P_MAT1; COMM.REC_ERR.P_ERR_PARAM2 := 'P_MAT2: ' || P_MAT2; COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG); END; END NIE03_SERVEAS; /