d9a2b876980898481c6ee49df56009d1c7d32d9b.svn-base 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716
  1. CREATE OR REPLACE PACKAGE NIE03_SERVEAS IS
  2. -- Author : SUNJIAWANG
  3. -- Created : 2009-7-24 14:40:55
  4. -- Purpose : 指定充当
  5. PROCEDURE REP_MAIN
  6. (
  7. P_MAT_NO IN VARCHAR
  8. ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE
  9. ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE
  10. ,SIGN_STL IN VARCHAR := 'Y'
  11. ,SIGN_CHEN_FEN IN VARCHAR := 'Y'
  12. ,SING_CAIZHI IN VARCHAR := 'Y'
  13. ,SIGN_QIANGZHI IN VARCHAR := 'N'
  14. ,P_REG_ID IN VARCHAR := 'NO_USER'
  15. ,P_RTN_MSG OUT VARCHAR
  16. ) ;
  17. PROCEDURE SERVEABLE
  18. (
  19. P_MAT_NO IN VARCHAR
  20. ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE
  21. ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE
  22. ,SIGN_STL IN VARCHAR := 'Y'
  23. ,SIGN_CHEN_FEN IN VARCHAR := 'Y'
  24. ,SING_CAIZHI IN VARCHAR := 'Y'
  25. ,SIGN_QIANGZHI IN VARCHAR := 'N'
  26. -- ,P_RTN_MSG OUT VARCHAR
  27. );
  28. PROCEDURE CHK_IS_SYN;
  29. PROCEDURE INIT_MAT_TYPE (P_MAT_NO IN VARCHAR);
  30. PROCEDURE SERVE_HIS
  31. (
  32. P_MAT_TYPE IN VARCHAR
  33. ,P_MAT_NO IN VARCHAR
  34. ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE
  35. ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE
  36. ,P_REG_ID IN VARCHAR
  37. );
  38. PROCEDURE SLAB_SERVE (
  39. P_MAT_NO IN VARCHAR
  40. ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE
  41. ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE
  42. ,P_REG_ID IN VARCHAR
  43. );
  44. PROCEDURE COIL_SERVE (
  45. P_MAT_NO IN VARCHAR
  46. ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE
  47. ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE
  48. ,P_REG_ID IN VARCHAR
  49. );
  50. PROCEDURE MAT_CHK( P_MAT1 VARCHAR
  51. ,P_MAT2 VARCHAR);
  52. PROCEDURE MAT_REP_EACH_OTHER( P_MAT1 VARCHAR
  53. ,P_MAT2 VARCHAR
  54. ,SIGN_STL IN VARCHAR := 'Y'
  55. ,SIGN_CHEN_FEN IN VARCHAR := 'Y'
  56. ,SING_CAIZHI IN VARCHAR := 'Y'
  57. ,SIGN_QIANGZHI IN VARCHAR := 'N'
  58. ,P_REG_ID IN VARCHAR := 'NO_USER'
  59. ,P_RTN_MSG OUT VARCHAR
  60. ) ;
  61. END NIE03_SERVEAS;
  62. /
  63. CREATE OR REPLACE PACKAGE BODY NIE03_SERVEAS IS
  64. GV_MAT_TYPE VARCHAR(2) := '';
  65. PROCEDURE REP_MAIN
  66. (
  67. P_MAT_NO IN VARCHAR --物料号
  68. ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE --订单号
  69. ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE --订单行
  70. ,SIGN_STL IN VARCHAR := 'Y' --是否同牌号
  71. ,SIGN_CHEN_FEN IN VARCHAR := 'Y' --是否同成分
  72. ,SING_CAIZHI IN VARCHAR := 'Y' --是否同材质
  73. ,SIGN_QIANGZHI IN VARCHAR := 'N' --是否强制充当
  74. ,P_REG_ID IN VARCHAR := 'NO_USER' --登陆Id
  75. ,P_RTN_MSG OUT VARCHAR --返回信息
  76. ) IS
  77. BEGIN
  78. COMM.INIT_RTN_MSG;
  79. CHK_IS_SYN;
  80. COMM.INIT_USER(P_REG_ID);
  81. INIT_MAT_TYPE(P_MAT_NO);
  82. SERVEABLE(P_MAT_NO,P_ORD_NO,P_ORD_SEQ,SIGN_STL,SIGN_CHEN_FEN,SING_CAIZHI,SIGN_QIANGZHI);
  83. SERVE_HIS(GV_MAT_TYPE,P_MAT_NO,P_ORD_NO,P_ORD_SEQ,P_REG_ID);
  84. IF GV_MAT_TYPE = 'TM' THEN
  85. SLAB_SERVE(P_MAT_NO,P_ORD_NO,P_ORD_SEQ,P_REG_ID);
  86. ELSIF GV_MAT_TYPE = 'AR' THEN
  87. COIL_SERVE(P_MAT_NO,P_ORD_NO,P_ORD_SEQ,P_REG_ID);
  88. END IF;
  89. EXCEPTION
  90. WHEN COMM.PE THEN
  91. P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG;
  92. WHEN OTHERS THEN
  93. COMM.CALL_OTHER_EXCEPTION_DO(P_RTN_MSG);
  94. END;
  95. PROCEDURE INIT_MAT_TYPE (P_MAT_NO IN VARCHAR) IS
  96. VE EXCEPTION;
  97. BEGIN
  98. IF SUBSTR(P_MAT_NO, 1, 1) = 'J' THEN
  99. GV_MAT_TYPE := 'TM';
  100. ELSIF SUBSTR(P_MAT_NO, 1, 1) = 'R' THEN
  101. GV_MAT_TYPE := 'AR' ;
  102. ELSE
  103. RAISE VE;
  104. END IF;
  105. EXCEPTION
  106. WHEN VE THEN
  107. COMM.REC_ERR.P_ERR_PARAM1 := 'P_MAT_NO' ;
  108. COMM.REC_ERR.P_ERR_MSG := P_MAT_NO || '该物料不存在,请核查';
  109. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  110. END;
  111. PROCEDURE SERVEABLE
  112. (
  113. P_MAT_NO IN VARCHAR
  114. ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE
  115. ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE
  116. ,SIGN_STL IN VARCHAR := 'Y'
  117. ,SIGN_CHEN_FEN IN VARCHAR := 'Y'
  118. ,SING_CAIZHI IN VARCHAR := 'Y'
  119. ,SIGN_QIANGZHI IN VARCHAR := 'N'
  120. -- ,P_RTN_MSG OUT VARCHAR
  121. ) IS
  122. VE EXCEPTION;
  123. VE_ORD_NO_NULL EXCEPTION;
  124. VE_ORD_SEQ_NULL EXCEPTION;
  125. VE_STAT EXCEPTION;
  126. VE_ORD_FL EXCEPTION;
  127. VE_STL EXCEPTION;
  128. VE_SIZE EXCEPTION;
  129. VE_WGT EXCEPTION;
  130. VE_CHEN_FEN EXCEPTION;
  131. VE_CAI_ZHI EXCEPTION;
  132. VE_PROG_CD EXCEPTION;
  133. VE_DLIV EXCEPTION;
  134. CURSOR CUR_MAT_SLAB IS
  135. SELECT A.SLAB_NO DSP_NO,
  136. A.SLAB_NO MAT_NO, -- 板坯号
  137. A.STL_GRD ORD_STL_GRD, -- 钢号
  138. B.STL_GRD COM_STL_GRD,
  139. A.SLAB_WTH MAT_WTH, -- 板坯宽度
  140. A.SLAB_WGT MAT_WGT, -- 板坯重量
  141. B.ORD_UNIT_WGT_MIN,
  142. B.ORD_UNIT_WGT_MAX,
  143. A.CUR_PROG_CD,
  144. (A.SLAB_WGT * C.PROC_RATE / 100) MAT_REP_WGT,
  145. CASE
  146. WHEN (A.SLAB_STAT = '2') THEN
  147. 'YY'
  148. ELSE
  149. 'XX'
  150. END SLAB_STAT_ABLE,
  151. CASE
  152. WHEN (A.ORD_FL = '2') THEN
  153. 'YY'
  154. ELSE
  155. 'XX'
  156. END ORD_FL_ABLE,
  157. CASE
  158. WHEN (A.CUR_PROG_CD IN ('RRC','RBA')) THEN
  159. 'YY'
  160. ELSE
  161. 'XX'
  162. END CUR_PROG_CD_ABLE,
  163. CASE
  164. WHEN ('Y' <> NVL(SIGN_STL, 'N') OR A.STL_GRD = B.STL_GRD) THEN
  165. 'YY'
  166. ELSE
  167. 'XX'
  168. END STL_ABLE,
  169. CASE
  170. WHEN (A.SLAB_WTH BETWEEN B.ORD_WTH AND B.ORD_WTH + 100) THEN
  171. 'YY'
  172. ELSE
  173. 'XX'
  174. END SIZE_ABLE,
  175. CASE
  176. WHEN (A.SLAB_WGT * C.PROC_RATE / 100) BETWEEN B.ORD_UNIT_WGT_MIN AND
  177. B.ORD_UNIT_WGT_MAX THEN
  178. 'YY'
  179. ELSE
  180. 'XX'
  181. END WGT_ABLE,
  182. CASE
  183. WHEN ('Y' <> NVL(SIGN_CHEN_FEN, 'N') OR
  184. GF_NIB028720(A.SLAB_NO, B.ORD_NO, B.ORD_SEQ) = 'YY') THEN
  185. 'YY'
  186. ELSE
  187. 'XX'
  188. END CHEN_FEN_ABLE
  189. FROM TBG02_SLAB_COMM A,
  190. TBE02_ORD_PRC B,
  191. (SELECT PROC_RATE FROM TBE01_PROC_RATE WHERE PROC_CD = 'R') C
  192. WHERE B.ORD_NO = P_ORD_NO -- 合同号
  193. AND B.ORD_SEQ = P_ORD_SEQ -- 订单号
  194. AND A.SLAB_NO = P_MAT_NO
  195. AND ROWNUM = 1;
  196. REC_MAT_SLAB CUR_MAT_SLAB%ROWTYPE;
  197. CURSOR CUR_MAT_COIL IS
  198. SELECT A.OLD_SAMPL_NO DSP_NO,
  199. A.COIL_NO MAT_NO, -- 钢卷号
  200. A.STL_GRD ORD_STL_GRD, -- 钢号
  201. A.CUR_PROG_CD,
  202. A.DLIV_DIRNO,
  203. B.STL_GRD COM_STL_GRD,
  204. A.COIL_THK MAT_THK, -- 钢卷厚度
  205. B.ORD_THK_MIN,
  206. B.ORD_THK_MAX,
  207. A.COIL_WTH MAT_WTH, -- 钢卷宽度
  208. B.ORD_WTH_MIN,
  209. B.ORD_WTH_MAX,
  210. B.ORD_UNIT_WGT_MIN,
  211. B.ORD_UNIT_WGT_MAX,
  212. A.ACT_WGT MAT_WGT, -- 钢卷重量
  213. A.ACT_WGT MAT_REP_WGT,
  214. CASE
  215. WHEN (A.COIL_STAT IN ('2','4')) THEN
  216. 'YY'
  217. ELSE
  218. 'XX'
  219. END COIL_STAT_ABLE,
  220. CASE
  221. WHEN ('Y' <> NVL(SIGN_STL, 'N') OR A.STL_GRD = B.STL_GRD) THEN
  222. 'YY'
  223. ELSE
  224. 'XX'
  225. END STL_ABLE,
  226. CASE
  227. WHEN (GF_NIB028780(A.COIL_NO, B.ORD_NO, B.ORD_SEQ) = 'YY') THEN
  228. 'YY'
  229. ELSE
  230. 'XX'
  231. END SIZE_ABLE,
  232. CASE
  233. WHEN (A.ACT_WGT BETWEEN B.ORD_UNIT_WGT_MIN AND B.ORD_UNIT_WGT_MAX) THEN
  234. 'YY'
  235. ELSE
  236. 'XX'
  237. END WGT_ABLE,
  238. CASE
  239. WHEN ('Y' <> NVL(SIGN_CHEN_FEN, 'N') OR
  240. GF_NIB028720(A.SLAB_NO, B.ORD_NO, B.ORD_SEQ) = 'YY') THEN
  241. 'YY'
  242. ELSE
  243. 'XX'
  244. END CHEN_FEN_ABLE,
  245. CASE
  246. WHEN ('Y' <> NVL(SING_CAIZHI, 'N') OR
  247. GF_NIB028750(A.COIL_NO, B.ORD_NO, B.ORD_SEQ) = 'YY') THEN
  248. 'YY'
  249. ELSE
  250. 'XX'
  251. END CAI_ZHI_ABLE,
  252. CASE
  253. WHEN (A.CUR_PROG_CD IN ('SRC','SFA')) THEN
  254. 'YY'
  255. ELSE
  256. 'XX'
  257. END PROG_CD_ABLE,
  258. CASE
  259. WHEN (A.DLIV_DIRNO IS NULL) THEN
  260. 'YY'
  261. ELSE
  262. 'XX'
  263. END DLIV_ABLE
  264. FROM TBH02_COIL_COMM A, TBE02_ORD_PRC B
  265. WHERE B.ORD_NO = P_ORD_NO -- 合同号
  266. AND B.ORD_SEQ = P_ORD_SEQ -- 订单号
  267. AND A.OLD_SAMPL_NO = P_MAT_NO
  268. AND ROWNUM = 1;
  269. REC_MAT_COIL CUR_MAT_COIL%ROWTYPE;
  270. BEGIN
  271. IF NVL(P_ORD_NO,' ') = ' ' THEN
  272. RAISE VE_ORD_NO_NULL;
  273. END IF;
  274. IF NVL(P_ORD_SEQ,' ') = ' ' THEN
  275. RAISE VE_ORD_SEQ_NULL;
  276. END IF;
  277. IF GV_MAT_TYPE = 'TM' THEN
  278. OPEN CUR_MAT_SLAB;
  279. LOOP
  280. FETCH CUR_MAT_SLAB
  281. INTO REC_MAT_SLAB;
  282. IF CUR_MAT_SLAB%ROWCOUNT = 0 THEN
  283. RAISE VE;
  284. END IF;
  285. EXIT WHEN CUR_MAT_SLAB %NOTFOUND;
  286. IF (REC_MAT_SLAB.SLAB_STAT_ABLE <> 'YY') THEN
  287. COMM.REC_ERR.P_ERR_PARAM1 := 'SLAB_STAT';
  288. COMM.REC_ERR.P_ERR_MSG := P_MAT_NO || '该物料不存在,请核查';
  289. RAISE VE_STAT;
  290. ELSIF (REC_MAT_SLAB.ORD_FL_ABLE <> 'YY') THEN
  291. COMM.REC_ERR.P_ERR_PARAM1 := 'ORD_FL';
  292. COMM.REC_ERR.P_ERR_MSG := P_MAT_NO || '该物料已为订单材';
  293. RAISE VE_ORD_FL;
  294. ELSIF (REC_MAT_SLAB.STL_ABLE <> 'YY' AND NVL(SIGN_QIANGZHI,'N') <> 'Y' ) THEN
  295. COMM.REC_ERR.P_ERR_MSG := '牌号不一致: ' || P_MAT_NO || '的牌号为 ' || REC_MAT_SLAB.COM_STL_GRD || ' ' ||
  296. P_ORD_NO || P_ORD_SEQ || '的牌号为 ' || REC_MAT_SLAB.ORD_STL_GRD;
  297. RAISE VE_STL;
  298. ELSIF (REC_MAT_SLAB.SIZE_ABLE <> 'YY' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN
  299. COMM.REC_ERR.P_ERR_MSG := '尺寸不在订单公差范围: ' || P_MAT_NO || '宽度 ' || REC_MAT_SLAB.MAT_WTH || ' ; ' ||
  300. P_ORD_NO || P_ORD_SEQ || '的宽度公差 ' || TO_NUMBER(REC_MAT_SLAB.MAT_WTH - 100) || '~' ||
  301. REC_MAT_SLAB.MAT_WTH;
  302. RAISE VE_SIZE;
  303. ELSIF (REC_MAT_SLAB.WGT_ABLE <> 'YY' AND NVL(SIGN_QIANGZHI,'N') <> 'Y' ) THEN
  304. COMM.REC_ERR.P_ERR_MSG := '单重不在订单公差范围: ' || P_MAT_NO || '重量 ' || REC_MAT_SLAB.MAT_WGT || ' ' ||
  305. P_ORD_NO || P_ORD_SEQ || '的单重公差 ' ||
  306. REC_MAT_SLAB.ORD_UNIT_WGT_MIN || '~' ||
  307. REC_MAT_SLAB.ORD_UNIT_WGT_MAX;
  308. RAISE VE_WGT;
  309. ELSIF (REC_MAT_SLAB.CHEN_FEN_ABLE <> 'YY' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN
  310. RAISE VE_CHEN_FEN;
  311. ELSIF (REC_MAT_SLAB.CUR_PROG_CD_ABLE <> 'YY') THEN
  312. COMM.REC_ERR.P_ERR_PARAM1 := 'CUR_PROG_CD';
  313. COMM.REC_ERR.P_ERR_MSG := '当前进程状态不符合!当前进程状态为: '||REC_MAT_SLAB.CUR_PROG_CD;
  314. RAISE VE_PROG_CD;
  315. END IF;
  316. END LOOP;
  317. CLOSE CUR_MAT_SLAB;
  318. ELSIF GV_MAT_TYPE = 'AR' THEN
  319. --GV_MAT_TYPE := 'AR';
  320. OPEN CUR_MAT_COIL;
  321. LOOP
  322. FETCH CUR_MAT_COIL
  323. INTO REC_MAT_COIL;
  324. IF CUR_MAT_COIL%ROWCOUNT = 0 THEN
  325. RAISE VE;
  326. END IF;
  327. EXIT WHEN CUR_MAT_COIL%NOTFOUND;
  328. IF (REC_MAT_COIL.COIL_STAT_ABLE <> 'YY') THEN
  329. COMM.REC_ERR.P_ERR_PARAM1 := 'COIL_STAT';
  330. COMM.REC_ERR.P_ERR_MSG := P_MAT_NO || '该物料不存在,请核查';
  331. RAISE VE_STAT;
  332. /* ELSIF (REC_MAT_COIL.ORD_FL_ABLE <> 'YY') THEN
  333. COMM.REC_ERR.P_ERR_PARAM1 := 'ORD_FL';
  334. COMM.REC_ERR.P_ERR_MSG := '该物料已为订单材';
  335. RAISE VE_ORD_FL;*/
  336. ELSIF (REC_MAT_COIL.STL_ABLE = 'XX' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN
  337. COMM.REC_ERR.P_ERR_MSG := '牌号不一致: ' || P_MAT_NO || '的牌号为 ' || REC_MAT_COIL.COM_STL_GRD || ' ' ||
  338. P_ORD_NO || P_ORD_SEQ || '的牌号为 ' || REC_MAT_COIL.ORD_STL_GRD;
  339. RAISE VE_STL;
  340. ELSIF (REC_MAT_COIL.SIZE_ABLE = 'XX' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN
  341. COMM.REC_ERR.P_ERR_MSG := '尺寸不在订单公差范围: ' || P_MAT_NO || '宽度 ' || REC_MAT_COIL.MAT_WTH || ' , 厚度: ' || REC_MAT_COIL.MAT_THK || '; '
  342. || P_ORD_NO || P_ORD_SEQ || '的宽度公差 ' || REC_MAT_COIL.ORD_WTH_MIN || '~' || REC_MAT_COIL.ORD_WTH_MAX ||
  343. '厚度公差 ' || REC_MAT_COIL.ORD_THK_MIN || '~' ||
  344. REC_MAT_COIL.ORD_THK_MAX;
  345. RAISE VE_SIZE;
  346. ELSIF (REC_MAT_COIL.WGT_ABLE = 'XX' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN
  347. COMM.REC_ERR.P_ERR_MSG := '单重不在订单公差范围: ' || P_MAT_NO || '重量 ' || REC_MAT_SLAB.MAT_WGT || ' ' ||
  348. P_ORD_NO || P_ORD_SEQ || '的单重公差 ' ||
  349. REC_MAT_COIL.ORD_UNIT_WGT_MIN || '~' ||
  350. REC_MAT_COIL.ORD_UNIT_WGT_MAX;
  351. RAISE VE_WGT;
  352. ELSIF (REC_MAT_COIL.CHEN_FEN_ABLE = 'XX' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN
  353. RAISE VE_CHEN_FEN;
  354. ELSIF (REC_MAT_COIL.CAI_ZHI_ABLE = 'XX' AND NVL(SIGN_QIANGZHI,'N') <> 'Y') THEN
  355. RAISE VE_CAI_ZHI;
  356. ELSIF (REC_MAT_COIL.PROG_CD_ABLE <> 'YY') THEN
  357. COMM.REC_ERR.P_ERR_PARAM1 := 'CUR_PROG_CD';
  358. COMM.REC_ERR.P_ERR_MSG := '当前进程状态不符合!当前进程状态为: '||REC_MAT_COIL.CUR_PROG_CD;
  359. RAISE VE_PROG_CD;
  360. ELSIF (REC_MAT_COIL.DLIV_ABLE <> 'YY') THEN
  361. COMM.REC_ERR.P_ERR_PARAM1 := 'DLIV_NO';
  362. COMM.REC_ERR.P_ERR_MSG := '该钢卷已发货,发货号为 '||REC_MAT_COIL.DLIV_DIRNO;
  363. RAISE VE_DLIV;
  364. END IF;
  365. END LOOP;
  366. CLOSE CUR_MAT_COIL;
  367. ELSE
  368. -- RAISE VE;
  369. NULL;
  370. END IF;
  371. COMM.REC_ERR.P_RTN_MSG:= '符合充当条件';
  372. EXCEPTION
  373. WHEN VE THEN
  374. COMM.REC_ERR.P_ERR_PARAM1 := 'P_MAT_NO';
  375. COMM.REC_ERR.P_ERR_MSG := P_MAT_NO || '该物料不存在,请核查';
  376. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  377. --COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE);
  378. --P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG;
  379. WHEN VE_ORD_NO_NULL THEN
  380. COMM.REC_ERR.P_ERR_PARAM1 := 'P_ORD_NO';
  381. COMM.REC_ERR.P_ERR_MSG := '订单号为空';
  382. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  383. WHEN VE_ORD_SEQ_NULL THEN
  384. COMM.REC_ERR.P_ERR_PARAM1 := 'P_ORD_SEQ';
  385. COMM.REC_ERR.P_ERR_MSG := '订单号为空';
  386. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  387. --COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE);
  388. --P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG;
  389. WHEN VE_STAT THEN
  390. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  391. -- COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE);
  392. -- P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG;
  393. WHEN VE_ORD_FL THEN
  394. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  395. -- COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE);
  396. -- P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG;
  397. WHEN VE_STL THEN
  398. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  399. -- COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE);
  400. -- P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG;
  401. WHEN VE_SIZE THEN
  402. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  403. WHEN VE_WGT THEN
  404. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  405. --COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE);
  406. -- P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG;
  407. WHEN VE_CHEN_FEN THEN
  408. COMM.REC_ERR.P_ERR_MSG := '成分不合格';
  409. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  410. -- COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE);
  411. --P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG;
  412. WHEN VE_CAI_ZHI THEN
  413. COMM.REC_ERR.P_ERR_MSG := '材质不合格';
  414. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  415. -- COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG, FALSE);
  416. -- P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG;
  417. /* WHEN COMM.PE THEN
  418. P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG;
  419. WHEN OTHERS THEN
  420. COMM.CALL_OTHER_EXCEPTION_DO(P_RTN_MSG);*/
  421. WHEN VE_PROG_CD THEN
  422. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  423. WHEN VE_DLIV THEN
  424. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  425. END;
  426. PROCEDURE CHK_IS_SYN IS
  427. LV_PRC_STS VARCHAR(1) := 'C';
  428. VE_SYN EXCEPTION;
  429. BEGIN
  430. SELECT PRC_STS
  431. INTO LV_PRC_STS -- 进程状态
  432. FROM TBE05_JOB_DET
  433. WHERE PLT = 'R' -- 参数:工厂
  434. AND MAIN_PGMID = 'NIE031000' -- 参数:主程序 ID
  435. AND SEQ = 3;
  436. IF LV_PRC_STS <> 'C' THEN
  437. RAISE VE_SYN;
  438. END IF;
  439. EXCEPTION
  440. WHEN VE_SYN THEN
  441. -- COMM.REC_ERR.P_ERR_PARAM1 := 'LV_PRC_STS';
  442. COMM.REC_ERR.P_ERR_MSG := '手动充当进行中,如要更改为自动充当,请先关闭充当进程,这将会导致自动充当结果被放弃';
  443. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  444. END;
  445. PROCEDURE SERVE_HIS
  446. (
  447. P_MAT_TYPE IN VARCHAR
  448. ,P_MAT_NO IN VARCHAR
  449. ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE
  450. ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE
  451. ,P_REG_ID IN VARCHAR
  452. ) IS
  453. BEGIN
  454. COMM.INIT_USER(P_REG_ID);
  455. INSERT INTO TBE04_REP_HIS
  456. (REP_TYP,
  457. REP_KND,
  458. REG_ID,
  459. MOD_PGM_ID,
  460. REG_DTIME,
  461. UPD_AFT_ORD_NO,
  462. UPD_AFT_ORD_SEQ,
  463. UPD_AFT_CUST_CD,
  464. MAT_NO,
  465. MAT_TYPE,
  466. UPD_BEF_ORD_NO,
  467. UPD_BEF_ORD_SEQ,
  468. UPD_BEF_CUST_CD)
  469. -- (1) 充当代码, 充当方法, 录入者, 变更程序ID, 录入时间,
  470. -- (2) 变更前合同号, 变更前订单号, 变更前客户代码, 物料类型,
  471. -- (3) 物料号, 变更后合同号, 变更后订单号, 变更后客户代码
  472. SELECT 'A',
  473. 'M',
  474. P_REG_ID,
  475. 'UIE031045',
  476. TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISS'),
  477. ORD_NO,
  478. ORD_SEQ,
  479. CUST_CD,
  480. P_MAT_NO,
  481. P_MAT_TYPE,
  482. '',
  483. '',
  484. ''
  485. FROM TBE02_ORD_PRC
  486. WHERE ORD_NO = P_ORD_NO
  487. AND ORD_SEQ = P_ORD_SEQ;
  488. END;
  489. PROCEDURE SLAB_SERVE (
  490. P_MAT_NO IN VARCHAR
  491. ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE
  492. ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE
  493. ,P_REG_ID IN VARCHAR
  494. )IS
  495. BEGIN
  496. UPDATE TBG02_SLAB_COMM A SET
  497. BEF_PROG_CD = CUR_PROG_CD,
  498. BEF_PROG_CD_PGM = CUR_PROG_CD_PGM,
  499. BEF_PROG_CD_DTIME = CUR_PROG_CD_DTIME,
  500. CUR_PROG_CD = 'RBA',
  501. CUR_PROG_CD_PGM = 'NIE03_SERVEAS',
  502. CUR_PROG_CD_DTIME = TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISS'),
  503. ORD_FL = '1',
  504. NONORD_CAUSE_CD = '',
  505. NONORD_OCR_DTIME = '',
  506. MOD_ID = P_REG_ID,
  507. MOD_DTIME = TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISS'),
  508. ORG_ORD_NO = DECODE(ORD_FL,'1',ORD_NO,''),
  509. ORG_ORD_SEQ = DECODE(ORD_FL,'1',ORD_SEQ,''),
  510. (ORD_NO, ORD_SEQ, CUST_CD, ORDCUST_CD, ORD_USE_CD, PRODNM_CD, SF_METHOD,
  511. SPEC_ABBSYM, DEVLMT_DTIME, INSTR_COIL_THK, INSTR_COIL_WTH, INSTR_COIL_INDIA,
  512. INSTR_COIL_WGT, INSTR_COIL_LEN, INSTR_COIL_OUTDIA, SLAB_INGR_DEC_GRD) =
  513. (SELECT ORD_NO, ORD_SEQ, CUST_CD, ORDCUST_CD, ORD_USEAGE_CD, PRODNM_CD, SCARPING_PROC_YN,
  514. SPEC_ABBSYM, DEL_TO_DATE, ORD_THK, ORD_WTH, ORD_INDIA,
  515. (A.SLAB_WGT * C.PROC_RATE / 100),
  516. (A.SLAB_WGT * C.PROC_RATE / 100) / (B.ORD_THK * B.ORD_WTH * 7.85) * 1000000,
  517. SQRT(4 * (A.SLAB_WGT * C.PROC_RATE / 100) / (B.ORD_WTH / 1000000 * 7.85 * 3.14 ) + (B.ORD_INDIA * B.ORD_INDIA)),
  518. DECODE(GF_NIB028720(A.SLAB_NO, ORD_NO, ORD_SEQ), 'YY', '1', '2')
  519. FROM TBE02_ORD_PRC B, (
  520. SELECT PROC_RATE FROM TBE01_PROC_RATE WHERE PROC_CD = 'R') C
  521. WHERE ORD_NO = P_ORD_NO
  522. AND ORD_SEQ = P_ORD_SEQ)
  523. WHERE SLAB_NO = P_MAT_NO;
  524. DELETE TBG02_SLAB_COMM_D
  525. WHERE SLAB_NO = P_MAT_NO;
  526. INSERT INTO TBG02_SLAB_COMM_D
  527. ( SLAB_NO, SLAB_CUT_SEQ, SLAB_THK, SLAB_WTH, SLAB_LEN,
  528. ORD_THK, ORD_WTH, ORD_LEN, ORD_WGT, COIL_INDIA,
  529. COIL_OUTDIA, ORD_NO, ORD_SEQ, ORD_FL
  530. )
  531. SELECT SLAB_NO, '01', SLAB_THK, SLAB_WTH, SLAB_LEN,
  532. INSTR_COIL_THK, INSTR_COIL_WTH, INSTR_COIL_LEN, INSTR_COIL_WGT, INSTR_COIL_INDIA,
  533. INSTR_COIL_OUTDIA, ORD_NO, ORD_SEQ, '1'
  534. FROM TBG02_SLAB_COMM
  535. WHERE SLAB_NO = P_MAT_NO;
  536. END;
  537. PROCEDURE COIL_SERVE (
  538. P_MAT_NO IN VARCHAR
  539. ,P_ORD_NO IN TBE02_ORD_PRC.ORD_NO%TYPE
  540. ,P_ORD_SEQ IN TBE02_ORD_PRC.ORD_SEQ%TYPE
  541. ,P_REG_ID IN VARCHAR
  542. )IS
  543. BEGIN
  544. UPDATE TBH02_COIL_COMM A SET
  545. BEF_PROG_CD = CUR_PROG_CD,
  546. BEF_PROG_CD_PGM = CUR_PROG_CD_PGM,
  547. BEF_PROG_CD_DTIME = CUR_PROG_CD_DTIME,
  548. CUR_PROG_CD = 'SFA',
  549. CUR_PROG_CD_PGM = 'NIE03_SERVEAS',
  550. CUR_PROG_CD_DTIME = TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISS'),
  551. ORD_FL = '1',
  552. TOT_DEC_GRD = '1',
  553. NONORD_CAUSE_CD = '',
  554. NONORD_OCR_DTIME = '',
  555. ORG_ORD_NO = DECODE(ORD_FL,'1',ORD_NO,''),
  556. ORG_ORD_SEQ = DECODE(ORD_FL,'1',ORD_SEQ,''),
  557. (ORD_NO, ORD_SEQ, CUST_CD, ORDCUST_CD, ORD_USE_CD, SPEC_ABBSYM, PRODNM_CD, SPM_YN,
  558. DEVLMT_DTIME, DEST_CD, INGR_DEC_GRD, MATLQLTY_DEC_GRD,INSTR_COIL_THK -- 订单厚度
  559. ,INSTR_COIL_WTH -- 订单宽度
  560. ,INSTR_COIL_LEN -- 订单长度
  561. ,INSTR_COIL_INDIA -- 订单内径
  562. ,INSTR_COIL_OUTDIA -- 订单外径
  563. ,INSTR_COIL_WGT -- 订单重量
  564. ) =
  565. (SELECT ORD_NO, ORD_SEQ, CUST_CD, ORDCUST_CD, ORD_USEAGE_CD, SPEC_ABBSYM, PRODNM_CD, SPM_PROC_YN,
  566. DEL_TO_DATE, DEST_CD,
  567. DECODE(GF_NIB028720(A.SLAB_NO, ORD_NO, ORD_SEQ), 'YY', '1', '2'),
  568. DECODE(GF_NIB028750(A.COIL_NO, ORD_NO, ORD_SEQ), 'YY', '1', '2'),ORD_THK -- 订单厚度
  569. ,ORD_WTH -- 订单宽度
  570. ,ORD_LEN -- 订单长度
  571. ,ORD_INDIA -- 订单内径
  572. ,ORD_OUTDIA -- 订单外径
  573. ,ORD_WGT -- 订单重量
  574. FROM TBE02_ORD_PRC
  575. WHERE ORD_NO = P_ORD_NO
  576. AND ORD_SEQ = P_ORD_SEQ)
  577. WHERE OLD_SAMPL_NO = P_MAT_NO;
  578. DELETE TBH02_COIL_COMM_D
  579. WHERE COIL_NO = (SELECT COIL_NO FROM TBH02_COIL_COMM WHERE OLD_SAMPL_NO = P_MAT_NO);
  580. INSERT INTO TBH02_COIL_COMM_D
  581. ( COIL_NO, CUT_SEQ, ORD_THK, ORD_WTH, ORD_LEN,
  582. ORD_WGT, ORD_WGT_MIN, ORD_WGT_MAX, ORD_INDIA, ORD_OUTDIA,
  583. ORD_NO, ORD_SEQ, ORD_FL
  584. )
  585. SELECT A.COIL_NO, '01', A.COIL_THK, A.COIL_WTH, A.COIL_LEN,
  586. A.ACT_WGT, B.ORD_UNIT_WGT_MIN, B.ORD_UNIT_WGT_MAX, A.COIL_INDIA, A.COIL_OUTDIA,
  587. A.ORD_NO, A.ORD_SEQ, '1'
  588. FROM TBH02_COIL_COMM A, TBE02_ORD_PRC B
  589. WHERE A.ORD_NO = B.ORD_NO
  590. AND A.ORD_SEQ = B.ORD_SEQ
  591. AND A.OLD_SAMPL_NO = P_MAT_NO;
  592. NULL;
  593. END;
  594. PROCEDURE MAT_REP_EACH_OTHER( P_MAT1 VARCHAR --物料号1
  595. ,P_MAT2 VARCHAR --物料号2
  596. ,SIGN_STL IN VARCHAR := 'Y'
  597. ,SIGN_CHEN_FEN IN VARCHAR := 'Y'
  598. ,SING_CAIZHI IN VARCHAR := 'Y'
  599. ,SIGN_QIANGZHI IN VARCHAR := 'N'
  600. ,P_REG_ID IN VARCHAR := 'NO_USER'
  601. ,P_RTN_MSG OUT VARCHAR
  602. ) IS
  603. GV_ORD_NO1 TBE02_ORD_PRC.ORD_NO%TYPE :='' ;
  604. GV_ORD_SEQ1 TBE02_ORD_PRC.ORD_SEQ%TYPE :='';
  605. GV_ORD_NO2 TBE02_ORD_PRC.ORD_NO%TYPE :='';
  606. GV_ORD_SEQ2 TBE02_ORD_PRC.ORD_SEQ%TYPE :='';
  607. BEGIN
  608. MAT_CHK(P_MAT1,P_MAT2);
  609. INIT_MAT_TYPE(P_MAT1);
  610. IF(GV_MAT_TYPE = 'AR') THEN
  611. SELECT DECODE(ORD_FL,'1',A.ORD_NO,'XX'),DECODE(ORD_FL,'1',A.ORD_SEQ ,'XX')
  612. INTO GV_ORD_NO1,GV_ORD_SEQ1
  613. FROM TBH02_COIL_COMM A
  614. WHERE A.OLD_SAMPL_NO = P_MAT1
  615. AND A.COIL_STAT IN ('2','4')
  616. -- AND A.ORD_FL = '1'
  617. AND A.DLIV_DIRNO IS NULL
  618. AND ROWNUM = 1;
  619. SELECT DECODE(ORD_FL,'1',A.ORD_NO,'XX'),DECODE(ORD_FL,'1',A.ORD_SEQ ,'XX')
  620. INTO GV_ORD_NO2,GV_ORD_SEQ2
  621. FROM TBH02_COIL_COMM A
  622. WHERE A.OLD_SAMPL_NO = P_MAT2
  623. -- AND A.ORD_FL = '1'
  624. AND A.DLIV_DIRNO IS NULL
  625. AND A.COIL_STAT IN ('2','4')
  626. AND ROWNUM = 1;
  627. ELSIF(GV_MAT_TYPE = 'TM') THEN
  628. SELECT DECODE(ORD_FL,'1',A.ORD_NO,'XX'),DECODE(ORD_FL,'1',A.ORD_SEQ ,'XX')
  629. INTO GV_ORD_NO1,GV_ORD_SEQ1
  630. FROM TBG02_SLAB_COMM A
  631. WHERE A.SLAB_NO = P_MAT1
  632. -- AND A.ORD_FL = '1'
  633. AND A.SLAB_STAT = '2'
  634. AND ROWNUM = 1;
  635. SELECT DECODE(ORD_FL,'1',A.ORD_NO,'XX'),DECODE(ORD_FL,'1',A.ORD_SEQ ,'XX')
  636. INTO GV_ORD_NO2,GV_ORD_SEQ2
  637. FROM TBG02_SLAB_COMM A
  638. WHERE A.SLAB_NO = P_MAT2
  639. AND A.SLAB_STAT = '2'
  640. -- AND A.ORD_FL = '1'
  641. AND ROWNUM = 1;
  642. END IF;
  643. IF(GV_ORD_NO2 <> 'XX' AND GV_ORD_SEQ2 <> 'XX' ) THEN
  644. 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);
  645. END IF;
  646. IF (GV_ORD_NO1 <> 'XX' OR GV_ORD_SEQ1 <> 'XX' ) THEN
  647. 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);
  648. END IF;
  649. EXCEPTION
  650. WHEN COMM.PE THEN
  651. P_RTN_MSG := COMM.REC_ERR.P_RTN_MSG;
  652. WHEN OTHERS THEN
  653. COMM.CALL_OTHER_EXCEPTION_DO(P_RTN_MSG);
  654. END;
  655. PROCEDURE MAT_CHK( P_MAT1 VARCHAR
  656. ,P_MAT2 VARCHAR) IS
  657. VE_LEN_MAT EXCEPTION;
  658. BEGIN
  659. IF(LENGTH(P_MAT1) <> LENGTH(P_MAT2) AND LENGTH(P_MAT1) <> 13) THEN
  660. RAISE VE_LEN_MAT;
  661. END IF;
  662. EXCEPTION
  663. WHEN VE_LEN_MAT THEN
  664. COMM.REC_ERR.P_ERR_MSG := '请检查物料';
  665. COMM.REC_ERR.P_ERR_PARAM1 := 'P_MAT1: ' || P_MAT1;
  666. COMM.REC_ERR.P_ERR_PARAM2 := 'P_MAT2: ' || P_MAT2;
  667. COMM.CALL_ERRDO(COMM.REC_ERR.P_RTN_MSG);
  668. END;
  669. END NIE03_SERVEAS;
  670. /