c22bb5b9bd8460105b4dea2e77b3cfed03beb089.svn-base 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. package UIM;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.text.DateFormat;
  7. import java.text.DecimalFormat;
  8. import java.text.SimpleDateFormat;
  9. import java.util.ArrayList;
  10. import java.util.Date;
  11. import java.util.Iterator;
  12. import java.util.List;
  13. import java.util.Map;
  14. import UIB.COM.XmlSqlParsersFactory;
  15. import UIM.UIM01.BEANS.ColdCoilComm;
  16. import CoreFS.SA01.CoreIComponent;
  17. import CoreFS.SA06.CoreReturnObject;
  18. /**
  19. * 冷轧原料库盘入盘出
  20. *
  21. * @author siy
  22. * @date 2010-08-27
  23. */
  24. public class UIM010110 extends CoreIComponent {
  25. /**
  26. * 查询钢卷信息
  27. *
  28. * @param coilNo
  29. * 热轧卷号
  30. * @return CoreReturnObject
  31. * @throws SQLException
  32. */
  33. public CoreReturnObject queryCoilInfo(String coilNo) throws SQLException {
  34. CoreReturnObject cro = new CoreReturnObject();
  35. String sql = XmlSqlParsersFactory.getSql("UIM010110_01.SELECT");
  36. cro = this.getDao("KgDao").ExcuteQuery(sql, new Object[] { coilNo });
  37. return cro;
  38. }
  39. /**
  40. * 盘入盘出操作
  41. *
  42. * @param type
  43. * 盘入/盘出 0/1
  44. * @param coilNo
  45. * 钢卷号
  46. * @param curLoadLoc
  47. * 垛位
  48. * @param regId
  49. * 盘入人
  50. * @return
  51. * @throws SQLException
  52. */
  53. public CoreReturnObject save(Integer type, String coilNo,
  54. String curLoadLoc, String regId, String trnfShift,
  55. String trnfGroup, String trnfTime,String wdlivno) throws SQLException {
  56. CoreReturnObject cro = new CoreReturnObject();
  57. // 判断是做盘入操作还是做盘出操作
  58. if (0 == type.intValue()) {
  59. // // 检查垛位上是否存在钢卷
  60. // String sqlYard = XmlSqlParsersFactory.getSql("UIM010040_03.SELECT");
  61. // PreparedStatement staYard = this.getDao("KgDao")
  62. // .getPreparedStatement(sqlYard);
  63. // staYard.setString(1, curLoadLoc);
  64. // staYard.setString(2, curLoadLoc);
  65. // staYard.setString(3, curLoadLoc);
  66. // staYard.setString(4, curLoadLoc);
  67. // ResultSet rsYard = staYard.executeQuery();
  68. // if (rsYard.next() && rsYard.getString("COIL_NO") != null
  69. // && !rsYard.getString("COIL_NO").equals("")) {
  70. // cro.setV_errCode(new Integer(1));
  71. // cro.setV_errMsg("该垛位上已经存在其他钢卷,请将钢卷移出该垛位或选择其他垛位!");
  72. // return cro;
  73. // } --20160219由于有部分热退账面的钢卷 需要放在同一个虚拟垛位上,所以暂时去除此限制 wl
  74. // 盘入操作,首先要检查钢卷号是否存在系统。不存在的情况下给予提示
  75. ColdCoilComm coldCoil = findCoil(coilNo, 0);
  76. if (null != coldCoil && !isNull(coldCoil.getCoilNo())) {
  77. // 正常出库的卷暂时不允许发货
  78. if ("3".equals(coldCoil.getCoilStat())
  79. && "PCC".equals(coldCoil.getCurProgCd())
  80. && !isNull(coldCoil.getTrnfDTime())) {
  81. // 抛出异常
  82. cro.setV_errCode(new Integer(1));
  83. cro.setV_errMsg("需要盘入库的钢卷属于正常出库,不能进行盘入操作!");
  84. } else {
  85. // 输入垛位为空或不存在此垛位
  86. if (!isNull(curLoadLoc) && hasYard(curLoadLoc)) {
  87. // 检查要盘入的垛位上是否存在钢卷
  88. String coilNoTmp = this.hasCoilOnYard(curLoadLoc);
  89. if (isNull(coilNoTmp)) {
  90. Map result = this.getDao("KgDao")
  91. .CoreBeginTranscation();
  92. try {
  93. // 插入移垛记录
  94. String insSql = XmlSqlParsersFactory
  95. .getSql("UIM010110_01.INSERT");
  96. this.getDao("KgDao").ExcuteNonQuery(
  97. insSql,
  98. new Object[] { "", curLoadLoc, coilNo,
  99. regId, trnfShift, trnfGroup,
  100. "04" });
  101. // 人工盘入库的卷改为余材
  102. StringBuffer updCommBuffer = new StringBuffer();
  103. updCommBuffer
  104. .append("UPDATE C_TBK02_COIL_COMM A SET \n");
  105. updCommBuffer.append(" A.CUR_LOAD_LOC = ?,\n");
  106. updCommBuffer.append(" A.COIL_IN_REG = ?,\n");
  107. updCommBuffer.append(" A.COIL_STAT = '2',\n");
  108. updCommBuffer
  109. .append(" A.CUR_PROG_CD = 'PRC',\n");
  110. updCommBuffer.append(" A.ORD_FL = '2',\n");
  111. updCommBuffer.append(" A.FL = '0',\n");
  112. updCommBuffer
  113. .append("A.INGR_DEC_GRD = '',\n");
  114. updCommBuffer
  115. .append("A.EXTSHAPE_DEC_GRD = '',\n");
  116. updCommBuffer
  117. .append("A.SIZE_DEC_RST = '',\n");
  118. updCommBuffer
  119. .append("A.WGT_DEC_RST = '',\n");
  120. updCommBuffer
  121. .append("A.MATLQLTY_DEC_GRD = '',\n");
  122. updCommBuffer
  123. .append("A.TOT_DEC_GRD = '',\n");
  124. updCommBuffer
  125. .append("A.CUR_PROG_CD_DTIME = TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'),\n");
  126. updCommBuffer
  127. .append("A.CUR_PROG_CD_PGM = 'UIM010110',\n");
  128. updCommBuffer.append(" A.ORD_NO = '',\n");
  129. updCommBuffer.append(" A.ORD_SEQ = '',\n");
  130. updCommBuffer
  131. .append(" A.IN_YARD_KIND = '4',\n");
  132. updCommBuffer
  133. .append(" A.YARD_ENTRY_DTIME = TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'),\n");
  134. updCommBuffer
  135. .append(" A.COIL_IN_DTIME = TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS')\n");
  136. updCommBuffer.append(" WHERE A.COIL_NO = ?\n");
  137. this.getDao("KgDao").ExcuteNonQuery(
  138. updCommBuffer.toString(),
  139. new Object[] { curLoadLoc, regId,
  140. coilNo });
  141. // 更新原料公共_D表
  142. StringBuffer updCommDBuffer = new StringBuffer();
  143. updCommDBuffer
  144. .append("UPDATE C_TBK02_COIL_COMM_D A SET\n");
  145. updCommDBuffer.append(" A.ORD_FL = '2',\n");
  146. updCommDBuffer.append(" A.ORD_NO = '',\n");
  147. updCommDBuffer.append(" A.ORD_SEQ = ''\n");
  148. updCommDBuffer.append(" WHERE A.COIL_NO = ?\n");
  149. this.getDao("KgDao").ExcuteNonQuery(
  150. updCommDBuffer.toString(),
  151. new Object[] { coilNo });
  152. // 将钢卷信息录入垛位表
  153. StringBuffer updYardBuffer = new StringBuffer();
  154. updYardBuffer
  155. .append("UPDATE C_TBK08_COIL_YARD A SET\n");
  156. updYardBuffer.append(" A.COIL_NO = ?\n");
  157. updYardBuffer
  158. .append(" WHERE A.CLF_NAME = substr(?,0,1)\n");
  159. updYardBuffer
  160. .append(" AND A.CLF_ROW = substr(?,7,2)\n");
  161. updYardBuffer
  162. .append(" AND A.CLF_COL = substr(?,3,2)\n");
  163. updYardBuffer
  164. .append(" AND A.CLF_FL = DECODE(substr(?,5,1),'A','1','B','2','C','3','1')\n");
  165. this.getDao("KgDao").ExcuteNonQuery(
  166. updYardBuffer.toString(),
  167. new Object[] { coilNo, curLoadLoc,
  168. curLoadLoc, curLoadLoc,
  169. curLoadLoc });
  170. this.getDao("KgDa0").CoreCommit(result);
  171. } catch (Exception ex) {
  172. this.getDao("KgDao").CoreRollBack(result);
  173. }
  174. }
  175. } else {
  176. cro.setV_errCode(new Integer(2));
  177. cro.setV_errMsg("需要盘入库的钢卷垛位信息不正确,请输入正确的垛位后再进行相应操作!");
  178. }
  179. }
  180. } else {
  181. cro.setV_errCode(new Integer(3));
  182. cro.setV_errMsg("需要盘入库的钢卷在库存中,请确认后再进行相应操作!");
  183. }
  184. } else if(1 == type.intValue()) {
  185. // 盘出操作,首先要检查钢卷号是否存在系统。不存在的情况下给予提示
  186. ColdCoilComm coldCoil = findCoil(coilNo, 1);
  187. if (null != coldCoil && !isNull(coldCoil.getCoilNo())) {
  188. if ("PCB".equals(coldCoil.getCurProgCd())) {
  189. cro.setV_errCode(new Integer(4));
  190. cro.setV_errMsg("需要盘出库的钢卷已经做了轧制计划,请撤销计划后再进行相应操作!");
  191. } else {
  192. Map result = this.getDao("KgDao").CoreBeginTranscation();
  193. try {
  194. // 插入移垛记录
  195. String insSql = XmlSqlParsersFactory
  196. .getSql("UIM010110_01.INSERT");
  197. this.getDao("KgDao").ExcuteNonQuery(
  198. insSql,
  199. new Object[] { coldCoil.getCurLoadLoc(), "",
  200. coilNo, regId, trnfShift, trnfGroup,
  201. "15" });
  202. // 更新原料公共表
  203. String updCommStr = XmlSqlParsersFactory
  204. .getSql("UIM010110_11.UPDATE");
  205. this.getDao("KgDao").ExcuteNonQuery(
  206. updCommStr,
  207. new Object[] { regId, trnfShift, trnfGroup,
  208. trnfTime, regId, coilNo });
  209. // 更新原料公共_D表
  210. StringBuffer updCommDStr = new StringBuffer();
  211. updCommDStr.append("UPDATE C_TBK02_COIL_COMM_D A SET\n");
  212. updCommDStr.append(" A.ORD_FL = '2',\n");
  213. updCommDStr.append(" A.ORD_NO = '',\n");
  214. updCommDStr.append(" A.ORD_SEQ = ''\n");
  215. updCommDStr.append(" WHERE A.COIL_NO = ?\n");
  216. this.getDao("KgDao").ExcuteNonQuery(updCommDStr.toString(),new
  217. Object[] { coilNo });
  218. // 更新垛位表
  219. StringBuffer updYardStr = new StringBuffer();
  220. updYardStr.append("UPDATE C_TBK08_COIL_YARD T SET\n");
  221. updYardStr.append(" T.COIL_NO = '',\n");
  222. updYardStr.append(" T.MOD_ID = '',\n");
  223. updYardStr.append(" T.MOD_TIME = ''\n");
  224. updYardStr.append(" WHERE T.COIL_NO = ?\n");
  225. this.getDao("KgDao").ExcuteNonQuery(
  226. updYardStr.toString(), new Object[] { coilNo });
  227. this.getDao("KgDao").CoreCommit(result);
  228. } catch (Exception ex) {
  229. this.getDao("KgDao").CoreRollBack(result);
  230. }
  231. }
  232. } else {
  233. cro.setV_errCode(new Integer(5));
  234. cro.setV_errMsg("需要盘出库的钢卷不在库存中,请确认后再进行相应操作!");
  235. }
  236. }
  237. else{
  238. // 废钢外卖盘出操作,首先要检查钢卷号是否存在系统。不存在的情况下给予提示
  239. DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
  240. String currDate = formatter.format(new Date());
  241. String seqno="FG"+currDate;
  242. String dlivnoNEXT;
  243. dlivnoNEXT=dlivno(seqno);//生成废钢编号
  244. ColdCoilComm coldCoil = findCoil(coilNo, 1);
  245. if (null != coldCoil && !isNull(coldCoil.getCoilNo())) {
  246. if ("PCB".equals(coldCoil.getCurProgCd())) {
  247. cro.setV_errCode(new Integer(4));
  248. cro.setV_errMsg("需要盘出库的钢卷已经做了轧制计划,请撤销计划后再进行相应操作!");
  249. } else {
  250. Map result = this.getDao("KgDao").CoreBeginTranscation();
  251. try {
  252. // 插入移垛记录
  253. String insSql = XmlSqlParsersFactory
  254. .getSql("UIM010110_01.INSERT");
  255. this.getDao("KgDao").ExcuteNonQuery(
  256. insSql,
  257. new Object[] { coldCoil.getCurLoadLoc(), "",
  258. coilNo, regId, trnfShift, trnfGroup,
  259. "15" });
  260. // 更新原料公共表
  261. String updCommStr = XmlSqlParsersFactory
  262. .getSql("UIM010110_12.UPDATE");
  263. this.getDao("KgDao").ExcuteNonQuery(
  264. updCommStr,
  265. new Object[] { regId, trnfShift, trnfGroup,
  266. trnfTime, regId,dlivnoNEXT, coilNo });
  267. // 更新原料公共_D表
  268. StringBuffer updCommDStr = new StringBuffer();
  269. updCommDStr.append("UPDATE C_TBK02_COIL_COMM_D A SET\n");
  270. updCommDStr.append(" A.ORD_FL = '2',\n");
  271. updCommDStr.append(" A.ORD_NO = '',\n");
  272. updCommDStr.append(" A.ORD_SEQ = ''\n");
  273. updCommDStr.append(" WHERE A.COIL_NO = ?\n");
  274. this.getDao("KgDao").ExcuteNonQuery(updCommDStr.toString(),new
  275. Object[] { coilNo });
  276. // 更新垛位表
  277. StringBuffer updYardStr = new StringBuffer();
  278. updYardStr.append("UPDATE C_TBK08_COIL_YARD T SET\n");
  279. updYardStr.append(" T.COIL_NO = '',\n");
  280. updYardStr.append(" T.MOD_ID = '',\n");
  281. updYardStr.append(" T.MOD_TIME = ''\n");
  282. updYardStr.append(" WHERE T.COIL_NO = ?\n");
  283. this.getDao("KgDao").ExcuteNonQuery(
  284. updYardStr.toString(), new Object[] { coilNo });
  285. this.getDao("KgDao").CoreCommit(result);
  286. } catch (Exception ex) {
  287. this.getDao("KgDao").CoreRollBack(result);
  288. }
  289. }
  290. } else {
  291. cro.setV_errCode(new Integer(5));
  292. cro.setV_errMsg("需要盘出库的钢卷不在库存中,请确认后再进行相应操作!");
  293. }
  294. }
  295. return cro;
  296. }
  297. /**
  298. * 查找钢卷号是否存在
  299. *
  300. * @param coilNo
  301. * @param type
  302. * 0盘入 1盘出
  303. * @return
  304. */
  305. private ColdCoilComm findCoil(String coilNo, int type) {
  306. PreparedStatement prepStat = null;
  307. ColdCoilComm coldCoil = null;
  308. ResultSet rs = null;
  309. Connection con=null;
  310. try {
  311. StringBuffer sqlBuffer = new StringBuffer();
  312. sqlBuffer.append("SELECT A.COIL_NO,A.COIL_STAT,\n");
  313. sqlBuffer.append(" A.SLAB_NO,a.CUR_PROG_CD,\n");
  314. sqlBuffer
  315. .append(" a.TRNF_DTIME,A.CUR_LOAD_LOC FROM C_TBK02_COIL_COMM A \n");
  316. sqlBuffer.append(" WHERE COIL_NO = ? \n");
  317. String tmp = 0 == type ? "<>" : "=";
  318. if (type == 0) {
  319. sqlBuffer.append(" AND A.COIL_STAT <> '2'\n");
  320. } else {
  321. sqlBuffer.append(" AND A.COIL_STAT = '2'\n");
  322. }
  323. //sqlBuffer.append(" AND A.COIL_STAT " + tmp + " '2'\n");
  324. prepStat = this.getDao("KgDao").getPreparedStatement(
  325. sqlBuffer.toString());
  326. prepStat.setString(1, coilNo);
  327. rs = prepStat.executeQuery();
  328. con = prepStat.getConnection();
  329. if (rs.next()) {
  330. coldCoil = new ColdCoilComm();
  331. coldCoil.setCoilNo(rs.getString("COIL_NO"));
  332. coldCoil.setCoilStat(rs.getString("COIL_STAT"));
  333. coldCoil.setCurProgCd(rs.getString("CUR_PROG_CD"));
  334. coldCoil.setSlabNo(rs.getString("SLAB_NO"));
  335. coldCoil.setTrnfDTime(rs.getString("TRNF_DTIME"));
  336. coldCoil.setCurLoadLoc(rs.getString("CUR_LOAD_LOC"));
  337. }
  338. } catch (SQLException sqle) {
  339. System.out.print("钢卷不存在!");
  340. } finally {
  341. try {
  342. if (null != rs) {
  343. rs.close();
  344. }
  345. if (null != prepStat) {
  346. prepStat.close();
  347. }
  348. if (null != con) {
  349. con.close();
  350. }
  351. } catch (Exception e) {
  352. System.out.print("钢卷不存在!");
  353. }
  354. }
  355. return coldCoil;
  356. }
  357. /**
  358. * 判断原料库垛位上是否存在有钢卷
  359. *
  360. * @param curLoadLoc
  361. * 堆放位置
  362. * @return String
  363. */
  364. private String hasCoilOnYard(String curLoadLoc) {
  365. String coilNo = "";
  366. StringBuffer sqlBuffer = new StringBuffer();
  367. sqlBuffer
  368. .append("SELECT A.COIL_NO FROM C_TBK08_COIL_YARD A,C_TBK08_COIL_YARD_AREA B WHERE\n");
  369. sqlBuffer.append(" A.AREA_NO = B.AREA_NO AND B.AREA_TYPE = '1'\n");
  370. sqlBuffer
  371. .append(" AND A.CLF_NAME||to_char(A.CLF_ROW,'00')||to_char(A.CLF_COL,'00')||A.CLF_FL\n");
  372. sqlBuffer.append(" = ? \n");
  373. PreparedStatement prep = null;
  374. ResultSet rs = null;
  375. Connection con=null;
  376. try {
  377. prep = this.getDao("KgDao").getPreparedStatement(
  378. sqlBuffer.toString());
  379. prep.setString(1, curLoadLoc);
  380. rs = prep.executeQuery();
  381. con=prep.getConnection();
  382. if (rs.next()) {
  383. coilNo = rs.getString("COIL_NO");
  384. }
  385. } catch (SQLException sqle) {
  386. } finally {
  387. try {
  388. if (null != rs) {
  389. rs.close();
  390. }
  391. if (null != prep) {
  392. prep.close();
  393. }
  394. if (null != con) {
  395. con.close();
  396. }
  397. } catch (Exception e) {
  398. }
  399. }
  400. return coilNo;
  401. }
  402. private String dlivno(String syddate) {
  403. String dlivno = "";
  404. StringBuffer sqlBuffer = new StringBuffer();
  405. sqlBuffer
  406. .append("SELECT MAX(A.WDLIVNO) WDLIVNO FROM C_TBK02_COIL_COMM A WHERE\n");
  407. sqlBuffer.append(" A.WDLIVNO LIKE ?||'%'");
  408. PreparedStatement prep = null;
  409. ResultSet rs = null;
  410. Connection con=null;
  411. try {
  412. prep = this.getDao("KgDao").getPreparedStatement(
  413. sqlBuffer.toString());
  414. prep.setString(1, syddate);
  415. rs = prep.executeQuery();
  416. con=prep.getConnection();
  417. if (rs.next()) {
  418. String temp="";
  419. if("".equals(rs.getString("WDLIVNO"))||rs.getString("WDLIVNO")==null)
  420. {
  421. dlivno=syddate+"01";
  422. }else{
  423. temp = rs.getString("WDLIVNO").substring(10);
  424. int aa=Integer.parseInt(temp) + 1;
  425. temp = new DecimalFormat("00").format(aa);
  426. dlivno = syddate + temp;
  427. }
  428. }
  429. else{
  430. dlivno=syddate+"01";
  431. }
  432. } catch (SQLException sqle) {
  433. } finally {
  434. try {
  435. if (null != rs) {
  436. rs.close();
  437. }
  438. if (null != prep) {
  439. prep.close();
  440. }
  441. if (null != con) {
  442. con.close();
  443. }
  444. } catch (Exception e) {
  445. }
  446. }
  447. return dlivno;
  448. }
  449. /**
  450. * 判断对象是否为空
  451. *
  452. * @param obj
  453. * @return boolean
  454. */
  455. private boolean isNull(Object obj) {
  456. boolean isNull = true;
  457. if (null != obj && !"".equals(obj)) {
  458. isNull = false;
  459. }
  460. return isNull;
  461. }
  462. /**
  463. * 查询垛位是否存在
  464. *
  465. * @param curLoadLoc
  466. * @return
  467. */
  468. private boolean hasYard(String curLoadLoc) {
  469. boolean B = false;
  470. PreparedStatement staYard = null;
  471. ResultSet rsYard = null;
  472. Connection con=null;
  473. try {
  474. String sql = XmlSqlParsersFactory.getSql("UIM010110_02.SELECT");
  475. staYard = this.getDao("KgDao").getPreparedStatement(sql);
  476. staYard.setString(1, curLoadLoc);
  477. staYard.setString(2, curLoadLoc);
  478. staYard.setString(3, curLoadLoc);
  479. staYard.setString(4, curLoadLoc);
  480. rsYard = staYard.executeQuery();
  481. con=staYard.getConnection();
  482. if (rsYard.next()) {
  483. B = true;
  484. }
  485. rsYard.close();
  486. staYard.close();
  487. con.close();
  488. return B;
  489. } catch (SQLException sqle) {
  490. System.out.print("剁位信息错误!");
  491. return B;
  492. }
  493. // finally
  494. // {
  495. // try{
  496. // if(rsYard != null)
  497. // {
  498. // rsYard.close();
  499. // }
  500. // if(staYard != null)
  501. // {
  502. // staYard.close();
  503. // }
  504. // }catch(SQLException e )
  505. // {
  506. // e.printStackTrace();
  507. // }
  508. //
  509. //
  510. // return B;
  511. // }
  512. }
  513. }