mes_cx_rz_zzpnew_hand.sql 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. CREATE OR REPLACE procedure mes_cx_rz_zzpnew_hand is
  2. a number(4);
  3. b varchar(4000);
  4. -- 为cxdata定义显式变量而不是使用%rowtype
  5. cxdata_contractno_num varchar2(100);
  6. cxdata_prod_name varchar2(200);
  7. cxdata_sg_sign varchar2(100);
  8. cxdata_sg_grade varchar2(100);
  9. cxdata_outer_diam varchar2(50);
  10. cxdata_wall_thickness varchar2(50);
  11. cxdata_material_code varchar2(100);
  12. cxdata_material_name varchar2(500); -- 特别关注这个字段
  13. cxdata orderdetail_v@th_cx_link%rowtype;
  14. --加工
  15. cursor oporder_cursor_jg is
  16. SELECT J.*,REPLACE(GET_CP_ORDER(J.Judge_Stove_No), '/', '') ORDERID,(select decode(max(s.order_typ),
  17. '120108',
  18. '双经销',
  19. '120109',
  20. '定销订购',
  21. '120107',
  22. '来料加工',
  23. '自用')
  24. from cxuser.slm_order_head s
  25. where s.order_no = regexp_replace(REPLACE(GET_CP_ORDER(J.Judge_Stove_No), '/', ''), '/.*', '')) contract_type,(case
  26. when j.judge_stove_no like 'W%' then
  27. '是'
  28. else
  29. '否'
  30. end) resource_type,null high_tech_code, null high_tech_name,
  31. 0 high_prod_weight, 0 high_mate_weight, 0 estimated_unit_price,
  32. 0 estimated_cost, '{3}' acct_period,
  33. get_pl_code((select max(GRADENAME) from PLN_ZY_ZG_m p where p.FEED_HEAT_NO = j.judge_stove_no),
  34. (select max(DIAMETER) from PLN_ZY_ZG_m p where p.FEED_HEAT_NO = j.judge_stove_no) --规格
  35. ) billet_code
  36. FROM (select aa.JUDGE_STOVE_NO,
  37. aa.PLINE_NAME,
  38. sum(aa.act_COUNT) act_COUNT,
  39. sum(aa.WEIGHT) WEIGHT
  40. from ( --期初
  41. SELECT T.JUDGE_STOVE_NO,
  42. T.PLINE_NAME,
  43. SUM(NVL(T.ACT_COUNT, 0)) act_COUNT,
  44. SUM(NVL(T.ACT_WEIGHT, 0)) WEIGHT
  45. FROM YDM_ZC_INITIAL_ZG T
  46. WHERE 1 = 1
  47. AND t.bal_year_month = '{0}'
  48. group by t.JUDGE_STOVE_NO, t.PLINE_NAME
  49. UNION ALL
  50. --入库
  51. select t.JUDGE_STOVE_NO,
  52. t.PLINE_NAME,
  53. nvl((case
  54. when t.BAL_YEAR_MONTH = '{0}' then
  55. nvl(t.count, 0)
  56. end),
  57. 0) act_COUNT,
  58. nvl((case
  59. when t.BAL_YEAR_MONTH = '{0}' then
  60. nvl(t.weight, 0)
  61. end),
  62. 0) WEIGHT
  63. from (SELECT REGEXP_REPLACE(T.JUDGE_STOVE_NO, '-.*', '') JUDGE_STOVE_NO,
  64. (CEIL(T.ACT_COUNT / S.SAW_NUM)) AS count,
  65. t.weight,
  66. t.BAL_YEAR_MONTH,
  67. t.PLINE_NAME
  68. FROM (SELECT T1.JUDGE_STOVE_NO,
  69. T1.BAL_YEAR_MONTH,
  70. (SELECT C.PLINE_NAME
  71. FROM COM_BASE_PLINE C
  72. WHERE C.PLINE_CODE = T1.PLINE_CODE) PLINE_NAME,
  73. SUM(T1.ACT_COUNT) ACT_COUNT,
  74. SUM(T1.INPUT_WEIGHT) weight
  75. FROM PORT_MIL_BATCH_SAMPLE_RESULT T1
  76. WHERE T1.JUDGE_STOVE_NO =
  77. REGEXP_REPLACE(T1.JUDGE_STOVE_NO,
  78. '-.*',
  79. '') || '-01'
  80. AND T1.BAL_YEAR_MONTH = '{0}'
  81. GROUP BY T1.JUDGE_STOVE_NO,
  82. T1.BAL_YEAR_MONTH,
  83. T1.PLINE_CODE) T,
  84. MIL_PLAN S
  85. WHERE T.JUDGE_STOVE_NO = S.JUDGE_STOVE_NO
  86. AND S.BACK_PLAN_FLAG = '0'
  87. AND S.BACK_SLAB_FLAG = '0') t
  88. union all
  89. --出库
  90. select t.JUDGE_STOVE_NO,
  91. t.PLINE_NAME,
  92. -nvl((case
  93. when t.BAL_YEAR_MONTH = '{0}' then
  94. nvl(t.count, 0)
  95. end),
  96. 0) act_COUNT,
  97. -nvl((case
  98. when t.BAL_YEAR_MONTH = '{0}' then
  99. nvl(t.weight, 0)
  100. end),
  101. 0) WEIGHT
  102. from (SELECT JUDGE_STOVE_NO,
  103. BAL_YEAR_MONTH,
  104. PLINE_NAME,
  105. SUM(COUNT) COUNT,
  106. SUM(WEIGHT) WEIGHT
  107. FROM (SELECT T1.JUDGE_STOVE_NO,
  108. T1.BAL_YEAR_MONTH,
  109. (SELECT C.PLINE_NAME
  110. FROM COM_BASE_PLINE C
  111. WHERE C.PLINE_CODE = T1.PLINE_CODE) PLINE_NAME,
  112. SUM(T1.OUTPUT_COUNT) AS COUNT,
  113. SUM(T1.OUTPUT_WEIGHT) AS WEIGHT
  114. FROM QCM_ZG_JUGDE_APPLY T1, MIL_PLAN S5
  115. WHERE T1.JUDGE_STOVE_NO || '-01' =
  116. S5.JUDGE_STOVE_NO
  117. AND S5.BACK_PLAN_FLAG = '0'
  118. AND S5.BACK_SLAB_FLAG = '0'
  119. AND T1.PROCESS_CODE = 'D'
  120. AND T1.BAL_YEAR_MONTH = '{0}'
  121. AND ((T1.VALIDFLAG = '20' AND
  122. T1.TARGET <> 'A' AND
  123. T1.JUDGE_RESULT_CODE IN
  124. ('40740701', '40740705', '40740709')) OR
  125. (T1.VALIDFLAG = '20' AND T1.TARGET = 'A' AND
  126. T1.JUDGE_TOLRESULT_CODE IN
  127. ('40740701', '40740705', '40740709')) OR
  128. (T1.VALIDFLAG = '20' AND T1.TARGET = 'A' AND
  129. T1.IS_ALL_SCRAP = '1') OR
  130. T1.INSTANCY_FLAG = '1')
  131. AND T1.PLINE_CODE NOT IN ('C065', 'C066')
  132. GROUP BY T1.JUDGE_STOVE_NO,
  133. T1.BAL_YEAR_MONTH,
  134. T1.PLINE_CODE
  135. UNION ALL
  136. SELECT REGEXP_REPLACE(F.JUDGE_STOVE_NO,
  137. '-.*',
  138. '') JUDGE_STOVE_NO,
  139. F.BAL_YEAR_MONTH,
  140. S1.PLINE_NAME,
  141. COUNT(1) COUNT,
  142. SUM(S1.INPUT_WEIGHT) WEIGHT
  143. FROM (SELECT COUNT(1) ACOUNT,
  144. T3.JUDGE_STOVE_NO,
  145. T3.NEW_HEAT_NO,
  146. T3.BAL_YEAR_MONTH
  147. FROM (SELECT G2.*, T1.BAL_YEAR_MONTH
  148. FROM MIL_SLAB_SCRAP G2,
  149. QCM_ZG_JUGDE_APPLY T1
  150. WHERE REGEXP_REPLACE(G2.NEW_HEAT_NO,
  151. '-.*',
  152. '') =
  153. T1.JUDGE_STOVE_NO
  154. AND (G2.REMARK <> '无' OR
  155. G2.REMARK IS NULL)
  156. AND ((t1.validflag = '20' and
  157. t1.JUDGE_RESULT_CODE in
  158. ('40740701',
  159. '40740705',
  160. '40740709')) OR
  161. T1.INSTANCY_FLAG = '1')
  162. AND T1.IS_FLAG = '0'
  163. AND T1.PROCESS_CODE = 'D'
  164. AND T1.BAL_YEAR_MONTH =
  165. '{0}'
  166. ) T3
  167. WHERE T3.PROCESS_NO <= 6
  168. AND T3.NEW_HEAT_NO IS NOT NULL
  169. GROUP BY T3.JUDGE_STOVE_NO,
  170. T3.NEW_HEAT_NO,
  171. T3.BAL_YEAR_MONTH) F,
  172. (SELECT SUM(S.INPUT_WEIGHT) INPUT_WEIGHT,
  173. S.JUDGE_STOVE_NO,
  174. S.M_MAT_NO,
  175. (SELECT C.PLINE_NAME
  176. FROM COM_BASE_PLINE C
  177. WHERE C.PLINE_CODE = S.PLINE_CODE) PLINE_NAME,
  178. ROW_NUMBER() OVER(PARTITION BY JUDGE_STOVE_NO ORDER BY JUDGE_STOVE_NO) RNUM
  179. FROM PORT_MIL_BATCH_SAMPLE_RESULT S
  180. WHERE
  181. S.TR_FLAG = '0'
  182. GROUP BY S.M_MAT_NO,
  183. S.JUDGE_STOVE_NO,
  184. S.PLINE_CODE) S1
  185. WHERE F.JUDGE_STOVE_NO = S1.JUDGE_STOVE_NO
  186. AND RNUM <= F.ACOUNT
  187. GROUP BY F.JUDGE_STOVE_NO,
  188. F.BAL_YEAR_MONTH,
  189. S1.PLINE_NAME
  190. UNION ALL
  191. SELECT REGEXP_REPLACE(S.JUDGE_STOVE_NO,
  192. '-.*',
  193. '') JUDGE_STOVE_NO,
  194. T.BAL_YEAR_MONTH,
  195. S.PLINE_NAME,
  196. COUNT(1) COUNT,
  197. SUM(S.INPUT_WEIGHT) WEIGHT
  198. FROM (SELECT G1.*, T1.BAL_YEAR_MONTH
  199. FROM MIL_FURNACES_RESLUT_DETIA G1,
  200. QCM_ZG_JUGDE_APPLY T1
  201. WHERE REGEXP_REPLACE(G1.ZP_JUDGE_STOVE_NO,
  202. '-.*',
  203. '') =
  204. T1.JUDGE_STOVE_NO
  205. AND (G1.REMARK <> '无' OR
  206. G1.REMARK IS NULL)
  207. AND ((t1.validflag = '20' and
  208. t1.JUDGE_RESULT_CODE in
  209. ('40740701',
  210. '40740705',
  211. '40740709')) OR
  212. T1.INSTANCY_FLAG = '1')
  213. AND T1.IS_FLAG = '0'
  214. AND T1.PROCESS_CODE = 'D'
  215. AND T1.BAL_YEAR_MONTH = '{0}'
  216. ) T,
  217. (SELECT SUM(S1.INPUT_WEIGHT) INPUT_WEIGHT,
  218. S1.M_MAT_NO,
  219. S1.JUDGE_STOVE_NO,
  220. (SELECT C.PLINE_NAME
  221. FROM COM_BASE_PLINE C
  222. WHERE C.PLINE_CODE =
  223. S1.PLINE_CODE) PLINE_NAME,
  224. ROW_NUMBER() OVER(PARTITION BY JUDGE_STOVE_NO ORDER BY JUDGE_STOVE_NO) RNUM
  225. FROM PORT_MIL_BATCH_SAMPLE_RESULT S1
  226. WHERE
  227. S1.TR_FLAG = '0'
  228. GROUP BY S1.JUDGE_STOVE_NO,
  229. S1.M_MAT_NO,
  230. S1.PLINE_CODE) S
  231. WHERE T.JUDGE_STOVE_NO = S.JUDGE_STOVE_NO
  232. AND RNUM <= T.GROUP_NUM
  233. GROUP BY S.JUDGE_STOVE_NO,
  234. S.PLINE_NAME,
  235. T.BAL_YEAR_MONTH
  236. UNION ALL
  237. SELECT REGEXP_REPLACE(T8.JUDGE_STOVE_NO,
  238. '-.*',
  239. '') JUDGE_STOVE_NO,
  240. T7.BAL_YEAR_MONTH,
  241. T8.PLINE_NAME,
  242. COUNT(1) COUNT,
  243. SUM(INPUT_WEIGHT) WEIGHT
  244. FROM (SELECT T.OLD_ZP_JUDGE_STOVE_NO,
  245. CEIL(SUM(T.ZP_COUNT) / S.SAW_NUM) AS RN,
  246. T1.BAL_YEAR_MONTH
  247. FROM MIL_OFFLINE_GROUP T,
  248. MIL_PLAN S,
  249. QCM_ZG_JUGDE_APPLY T1
  250. WHERE T.Old_Zp_Judge_Stove_No =
  251. S.JUDGE_STOVE_NO
  252. AND (T.REMARK <> '无' OR
  253. T.REMARK IS NULL)
  254. AND S.BACK_SLAB_FLAG <> '2'
  255. AND REGEXP_REPLACE(T.ZP_JUDGE_STOVE_NO,
  256. '-.*',
  257. '') =
  258. T1.Judge_Stove_No
  259. AND ((t1.validflag = '20' and
  260. t1.JUDGE_RESULT_CODE in
  261. ('40740701',
  262. '40740705',
  263. '40740709')) OR
  264. T1.INSTANCY_FLAG = '1')
  265. AND T1.IS_FLAG = '0'
  266. AND T1.PROCESS_CODE = 'D'
  267. AND T1.BAL_YEAR_MONTH = '{0}'
  268. GROUP BY T.OLD_ZP_JUDGE_STOVE_NO,
  269. S.SAW_NUM,
  270. T1.BAL_YEAR_MONTH) T7,
  271. (SELECT SUM(S2.INPUT_WEIGHT) INPUT_WEIGHT,
  272. S2.JUDGE_STOVE_NO,
  273. S2.M_MAT_NO,
  274. (SELECT C.PLINE_NAME
  275. FROM COM_BASE_PLINE C
  276. WHERE C.PLINE_CODE =
  277. S2.PLINE_CODE) PLINE_NAME,
  278. ROW_NUMBER() OVER(PARTITION BY JUDGE_STOVE_NO ORDER BY JUDGE_STOVE_NO) RNUM
  279. FROM PORT_MIL_BATCH_SAMPLE_RESULT S2
  280. WHERE
  281. S2.TR_FLAG = '0'
  282. GROUP BY S2.M_MAT_NO,
  283. S2.JUDGE_STOVE_NO,
  284. S2.PLINE_CODE) T8
  285. WHERE REGEXP_REPLACE(T7.OLD_ZP_JUDGE_STOVE_NO,
  286. '-.*',
  287. '') || '-01' =
  288. T8.JUDGE_STOVE_NO
  289. AND RNUM <= RN
  290. GROUP BY T8.JUDGE_STOVE_NO,
  291. T7.BAL_YEAR_MONTH,
  292. T8.PLINE_NAME)
  293. GROUP BY JUDGE_STOVE_NO, BAL_YEAR_MONTH, PLINE_NAME) t) aa
  294. group by aa.JUDGE_STOVE_NO, aa.PLINE_NAME) J
  295. WHERE act_COUNT > 0;
  296. curoporder_jg oporder_cursor_jg%rowtype;
  297. begin
  298. open oporder_cursor_jg;
  299. loop
  300. fetch oporder_cursor_jg into curoporder_jg;
  301. exit when oporder_cursor_jg%notfound;
  302. begin -- 添加内部begin块用于异常处理
  303. select count(*)
  304. into a
  305. from orderdetail_v@th_cx_link t
  306. where t.contractno_num = curoporder_jg.orderid
  307. and material_code is not null;
  308. if a > 0 then
  309. -- 使用显式字段选择而不是select *
  310. select contractno_num, prod_name, sg_sign, sg_grade,
  311. outer_diam, wall_thickness, material_code, material_name
  312. into cxdata_contractno_num, cxdata_prod_name, cxdata_sg_sign,
  313. cxdata_sg_grade, cxdata_outer_diam, cxdata_wall_thickness,
  314. cxdata_material_code, cxdata_material_name
  315. from orderdetail_v@th_cx_link t
  316. where t.contractno_num = curoporder_jg.orderid
  317. and material_code is not null
  318. and rownum = 1;
  319. elsif substr(curoporder_jg.orderid, 1, 2) in ('TH', 'XS') then
  320. select count(*)
  321. into a
  322. from orderdetail_v@th_cx_link t
  323. where substr(t.contractno_num, 3) = substr(curoporder_jg.orderid, 3)
  324. and material_code is not null
  325. and rownum = 1;
  326. if a > 0 then
  327. select contractno_num, prod_name, sg_sign, sg_grade,
  328. outer_diam, wall_thickness, material_code, material_name
  329. into cxdata_contractno_num, cxdata_prod_name, cxdata_sg_sign,
  330. cxdata_sg_grade, cxdata_outer_diam, cxdata_wall_thickness,
  331. cxdata_material_code, cxdata_material_name
  332. from orderdetail_v@th_cx_link t
  333. where substr(t.contractno_num, 3) = substr(curoporder_jg.orderid, 3)
  334. and material_code is not null
  335. and rownum = 1;
  336. end if;
  337. end if;
  338. if INSTR(curoporder_jg.orderid, 'ZZBY') <= 0 then
  339. if a > 0 then
  340. insert into hot_production_mes_rz
  341. (cx_no, contract_type, prod_variety, steel_level, steel_no, spec,
  342. prod_type, prod_weight, mate_weight, steel_waste, process,
  343. high_tech_code, high_tech_name, high_prod_weight, high_mate_weight,
  344. estimated_unit_price, estimated_cost, acct_period, mate_code,
  345. resource_type, billet_code, memo, flag, go_there, mate_name,
  346. orderid,judge_stove_no,PRE_PROCESS,DELIVERY_STATUS,INSERT_TIME)
  347. values
  348. (seq_mes_cx.nextval, curoporder_jg.contract_type, cxdata_prod_name,
  349. cxdata_sg_sign, cxdata_sg_grade,
  350. cxdata_outer_diam || '*' || cxdata_wall_thickness, '在产品', null,
  351. curoporder_jg.WEIGHT, null, '热轧',
  352. curoporder_jg.high_tech_code, curoporder_jg.high_tech_name,
  353. curoporder_jg.high_prod_weight, curoporder_jg.high_mate_weight,
  354. curoporder_jg.estimated_unit_price, curoporder_jg.estimated_cost,
  355. curoporder_jg.acct_period, cxdata_material_code,
  356. curoporder_jg.resource_type, curoporder_jg.billet_code, '', '0',
  357. (case
  358. when cxdata_material_code like '%B' then '加工'
  359. when cxdata_material_code like '%C' then '热处理'
  360. else ''
  361. end), cxdata_material_name, curoporder_jg.orderid,
  362. curoporder_jg.judge_stove_no, null,
  363. SUBSTR(cxdata_material_name,
  364. INSTR(cxdata_material_name, ',', 1, 1) + 1,
  365. INSTR(cxdata_material_name, ',', 1, 2) - INSTR(cxdata_material_name, ',', 1, 1) - 1),
  366. sysdate);
  367. else
  368. -- 处理没有找到数据的情况
  369. insert into HOT_PRODUCTION_MES_RZ
  370. (cx_no, contract_type, prod_variety, steel_level, steel_no, spec,
  371. prod_type, prod_weight, mate_weight, steel_waste, process,
  372. high_tech_code, high_tech_name, high_prod_weight, high_mate_weight,
  373. estimated_unit_price, estimated_cost, acct_period, mate_code,
  374. resource_type, billet_code, memo, flag, go_there, mate_name,
  375. orderid,judge_stove_no)
  376. values
  377. (seq_mes_cx.nextval, curoporder_jg.contract_type,
  378. null, null, null, null, '在产品', null,
  379. curoporder_jg.WEIGHT, null, '热轧', curoporder_jg.high_tech_code,
  380. curoporder_jg.high_tech_name, curoporder_jg.high_prod_weight,
  381. curoporder_jg.high_mate_weight, curoporder_jg.estimated_unit_price,
  382. curoporder_jg.estimated_cost, curoporder_jg.acct_period, null,
  383. curoporder_jg.resource_type, curoporder_jg.billet_code, '', '0',
  384. null, null, curoporder_jg.orderid, curoporder_jg.judge_stove_no);
  385. end if;
  386. end if;
  387. exception
  388. when value_error then -- 处理值错误
  389. -- 记录错误信息,但继续处理下一条记录
  390. dbms_output.put_line('数据截断错误 for orderid: ' || curoporder_jg.orderid);
  391. continue;
  392. when others then
  393. -- 处理其他异常
  394. dbms_output.put_line('其他错误 for orderid: ' || curoporder_jg.orderid || ' - ' || sqlerrm);
  395. continue;
  396. end;
  397. end loop;
  398. close oporder_cursor_jg;
  399. commit;
  400. end mes_cx_rz_zzpnew_hand;