package UIM; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.text.DateFormat; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; import UIB.COM.XmlSqlParsersFactory; import UIM.UIM01.BEANS.ColdCoilComm; import CoreFS.SA01.CoreIComponent; import CoreFS.SA06.CoreReturnObject; /** * 冷轧原料库盘入盘出 * * @author siy * @date 2010-08-27 */ public class UIM010110 extends CoreIComponent { /** * 查询钢卷信息 * * @param coilNo * 热轧卷号 * @return CoreReturnObject * @throws SQLException */ public CoreReturnObject queryCoilInfo(String coilNo) throws SQLException { CoreReturnObject cro = new CoreReturnObject(); String sql = XmlSqlParsersFactory.getSql("UIM010110_01.SELECT"); cro = this.getDao("KgDao").ExcuteQuery(sql, new Object[] { coilNo }); return cro; } /** * 盘入盘出操作 * * @param type * 盘入/盘出 0/1 * @param coilNo * 钢卷号 * @param curLoadLoc * 垛位 * @param regId * 盘入人 * @return * @throws SQLException */ public CoreReturnObject save(Integer type, String coilNo, String curLoadLoc, String regId, String trnfShift, String trnfGroup, String trnfTime,String wdlivno) throws SQLException { CoreReturnObject cro = new CoreReturnObject(); // 判断是做盘入操作还是做盘出操作 if (0 == type.intValue()) { // // 检查垛位上是否存在钢卷 // String sqlYard = XmlSqlParsersFactory.getSql("UIM010040_03.SELECT"); // PreparedStatement staYard = this.getDao("KgDao") // .getPreparedStatement(sqlYard); // staYard.setString(1, curLoadLoc); // staYard.setString(2, curLoadLoc); // staYard.setString(3, curLoadLoc); // staYard.setString(4, curLoadLoc); // ResultSet rsYard = staYard.executeQuery(); // if (rsYard.next() && rsYard.getString("COIL_NO") != null // && !rsYard.getString("COIL_NO").equals("")) { // cro.setV_errCode(new Integer(1)); // cro.setV_errMsg("该垛位上已经存在其他钢卷,请将钢卷移出该垛位或选择其他垛位!"); // return cro; // } --20160219由于有部分热退账面的钢卷 需要放在同一个虚拟垛位上,所以暂时去除此限制 wl // 盘入操作,首先要检查钢卷号是否存在系统。不存在的情况下给予提示 ColdCoilComm coldCoil = findCoil(coilNo, 0); if (null != coldCoil && !isNull(coldCoil.getCoilNo())) { // 正常出库的卷暂时不允许发货 if ("3".equals(coldCoil.getCoilStat()) && "PCC".equals(coldCoil.getCurProgCd()) && !isNull(coldCoil.getTrnfDTime())) { // 抛出异常 cro.setV_errCode(new Integer(1)); cro.setV_errMsg("需要盘入库的钢卷属于正常出库,不能进行盘入操作!"); } else { // 输入垛位为空或不存在此垛位 if (!isNull(curLoadLoc) && hasYard(curLoadLoc)) { // 检查要盘入的垛位上是否存在钢卷 String coilNoTmp = this.hasCoilOnYard(curLoadLoc); if (isNull(coilNoTmp)) { Map result = this.getDao("KgDao") .CoreBeginTranscation(); try { // 插入移垛记录 String insSql = XmlSqlParsersFactory .getSql("UIM010110_01.INSERT"); this.getDao("KgDao").ExcuteNonQuery( insSql, new Object[] { "", curLoadLoc, coilNo, regId, trnfShift, trnfGroup, "04" }); // 人工盘入库的卷改为余材 StringBuffer updCommBuffer = new StringBuffer(); updCommBuffer .append("UPDATE C_TBK02_COIL_COMM A SET \n"); updCommBuffer.append(" A.CUR_LOAD_LOC = ?,\n"); updCommBuffer.append(" A.COIL_IN_REG = ?,\n"); updCommBuffer.append(" A.COIL_STAT = '2',\n"); updCommBuffer .append(" A.CUR_PROG_CD = 'PRC',\n"); updCommBuffer.append(" A.ORD_FL = '2',\n"); updCommBuffer.append(" A.FL = '0',\n"); updCommBuffer .append("A.INGR_DEC_GRD = '',\n"); updCommBuffer .append("A.EXTSHAPE_DEC_GRD = '',\n"); updCommBuffer .append("A.SIZE_DEC_RST = '',\n"); updCommBuffer .append("A.WGT_DEC_RST = '',\n"); updCommBuffer .append("A.MATLQLTY_DEC_GRD = '',\n"); updCommBuffer .append("A.TOT_DEC_GRD = '',\n"); updCommBuffer .append("A.CUR_PROG_CD_DTIME = TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'),\n"); updCommBuffer .append("A.CUR_PROG_CD_PGM = 'UIM010110',\n"); updCommBuffer.append(" A.ORD_NO = '',\n"); updCommBuffer.append(" A.ORD_SEQ = '',\n"); updCommBuffer .append(" A.IN_YARD_KIND = '4',\n"); updCommBuffer .append(" A.YARD_ENTRY_DTIME = TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'),\n"); updCommBuffer .append(" A.COIL_IN_DTIME = TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS')\n"); updCommBuffer.append(" WHERE A.COIL_NO = ?\n"); this.getDao("KgDao").ExcuteNonQuery( updCommBuffer.toString(), new Object[] { curLoadLoc, regId, coilNo }); // 更新原料公共_D表 StringBuffer updCommDBuffer = new StringBuffer(); updCommDBuffer .append("UPDATE C_TBK02_COIL_COMM_D A SET\n"); updCommDBuffer.append(" A.ORD_FL = '2',\n"); updCommDBuffer.append(" A.ORD_NO = '',\n"); updCommDBuffer.append(" A.ORD_SEQ = ''\n"); updCommDBuffer.append(" WHERE A.COIL_NO = ?\n"); this.getDao("KgDao").ExcuteNonQuery( updCommDBuffer.toString(), new Object[] { coilNo }); // 将钢卷信息录入垛位表 StringBuffer updYardBuffer = new StringBuffer(); updYardBuffer .append("UPDATE C_TBK08_COIL_YARD A SET\n"); updYardBuffer.append(" A.COIL_NO = ?\n"); updYardBuffer .append(" WHERE A.CLF_NAME = substr(?,0,1)\n"); updYardBuffer .append(" AND A.CLF_ROW = substr(?,7,2)\n"); updYardBuffer .append(" AND A.CLF_COL = substr(?,3,2)\n"); updYardBuffer .append(" AND A.CLF_FL = DECODE(substr(?,5,1),'A','1','B','2','C','3','1')\n"); this.getDao("KgDao").ExcuteNonQuery( updYardBuffer.toString(), new Object[] { coilNo, curLoadLoc, curLoadLoc, curLoadLoc, curLoadLoc }); this.getDao("KgDa0").CoreCommit(result); } catch (Exception ex) { this.getDao("KgDao").CoreRollBack(result); } } } else { cro.setV_errCode(new Integer(2)); cro.setV_errMsg("需要盘入库的钢卷垛位信息不正确,请输入正确的垛位后再进行相应操作!"); } } } else { cro.setV_errCode(new Integer(3)); cro.setV_errMsg("需要盘入库的钢卷在库存中,请确认后再进行相应操作!"); } } else if(1 == type.intValue()) { // 盘出操作,首先要检查钢卷号是否存在系统。不存在的情况下给予提示 ColdCoilComm coldCoil = findCoil(coilNo, 1); if (null != coldCoil && !isNull(coldCoil.getCoilNo())) { if ("PCB".equals(coldCoil.getCurProgCd())) { cro.setV_errCode(new Integer(4)); cro.setV_errMsg("需要盘出库的钢卷已经做了轧制计划,请撤销计划后再进行相应操作!"); } else { Map result = this.getDao("KgDao").CoreBeginTranscation(); try { // 插入移垛记录 String insSql = XmlSqlParsersFactory .getSql("UIM010110_01.INSERT"); this.getDao("KgDao").ExcuteNonQuery( insSql, new Object[] { coldCoil.getCurLoadLoc(), "", coilNo, regId, trnfShift, trnfGroup, "15" }); // 更新原料公共表 String updCommStr = XmlSqlParsersFactory .getSql("UIM010110_11.UPDATE"); this.getDao("KgDao").ExcuteNonQuery( updCommStr, new Object[] { regId, trnfShift, trnfGroup, trnfTime, regId, coilNo }); // 更新原料公共_D表 StringBuffer updCommDStr = new StringBuffer(); updCommDStr.append("UPDATE C_TBK02_COIL_COMM_D A SET\n"); updCommDStr.append(" A.ORD_FL = '2',\n"); updCommDStr.append(" A.ORD_NO = '',\n"); updCommDStr.append(" A.ORD_SEQ = ''\n"); updCommDStr.append(" WHERE A.COIL_NO = ?\n"); this.getDao("KgDao").ExcuteNonQuery(updCommDStr.toString(),new Object[] { coilNo }); // 更新垛位表 StringBuffer updYardStr = new StringBuffer(); updYardStr.append("UPDATE C_TBK08_COIL_YARD T SET\n"); updYardStr.append(" T.COIL_NO = '',\n"); updYardStr.append(" T.MOD_ID = '',\n"); updYardStr.append(" T.MOD_TIME = ''\n"); updYardStr.append(" WHERE T.COIL_NO = ?\n"); this.getDao("KgDao").ExcuteNonQuery( updYardStr.toString(), new Object[] { coilNo }); this.getDao("KgDao").CoreCommit(result); } catch (Exception ex) { this.getDao("KgDao").CoreRollBack(result); } } } else { cro.setV_errCode(new Integer(5)); cro.setV_errMsg("需要盘出库的钢卷不在库存中,请确认后再进行相应操作!"); } } else{ // 废钢外卖盘出操作,首先要检查钢卷号是否存在系统。不存在的情况下给予提示 DateFormat formatter = new SimpleDateFormat("yyyyMMdd"); String currDate = formatter.format(new Date()); String seqno="FG"+currDate; String dlivnoNEXT; dlivnoNEXT=dlivno(seqno);//生成废钢编号 ColdCoilComm coldCoil = findCoil(coilNo, 1); if (null != coldCoil && !isNull(coldCoil.getCoilNo())) { if ("PCB".equals(coldCoil.getCurProgCd())) { cro.setV_errCode(new Integer(4)); cro.setV_errMsg("需要盘出库的钢卷已经做了轧制计划,请撤销计划后再进行相应操作!"); } else { Map result = this.getDao("KgDao").CoreBeginTranscation(); try { // 插入移垛记录 String insSql = XmlSqlParsersFactory .getSql("UIM010110_01.INSERT"); this.getDao("KgDao").ExcuteNonQuery( insSql, new Object[] { coldCoil.getCurLoadLoc(), "", coilNo, regId, trnfShift, trnfGroup, "15" }); // 更新原料公共表 String updCommStr = XmlSqlParsersFactory .getSql("UIM010110_12.UPDATE"); this.getDao("KgDao").ExcuteNonQuery( updCommStr, new Object[] { regId, trnfShift, trnfGroup, trnfTime, regId,dlivnoNEXT, coilNo }); // 更新原料公共_D表 StringBuffer updCommDStr = new StringBuffer(); updCommDStr.append("UPDATE C_TBK02_COIL_COMM_D A SET\n"); updCommDStr.append(" A.ORD_FL = '2',\n"); updCommDStr.append(" A.ORD_NO = '',\n"); updCommDStr.append(" A.ORD_SEQ = ''\n"); updCommDStr.append(" WHERE A.COIL_NO = ?\n"); this.getDao("KgDao").ExcuteNonQuery(updCommDStr.toString(),new Object[] { coilNo }); // 更新垛位表 StringBuffer updYardStr = new StringBuffer(); updYardStr.append("UPDATE C_TBK08_COIL_YARD T SET\n"); updYardStr.append(" T.COIL_NO = '',\n"); updYardStr.append(" T.MOD_ID = '',\n"); updYardStr.append(" T.MOD_TIME = ''\n"); updYardStr.append(" WHERE T.COIL_NO = ?\n"); this.getDao("KgDao").ExcuteNonQuery( updYardStr.toString(), new Object[] { coilNo }); this.getDao("KgDao").CoreCommit(result); } catch (Exception ex) { this.getDao("KgDao").CoreRollBack(result); } } } else { cro.setV_errCode(new Integer(5)); cro.setV_errMsg("需要盘出库的钢卷不在库存中,请确认后再进行相应操作!"); } } return cro; } /** * 查找钢卷号是否存在 * * @param coilNo * @param type * 0盘入 1盘出 * @return */ private ColdCoilComm findCoil(String coilNo, int type) { PreparedStatement prepStat = null; ColdCoilComm coldCoil = null; ResultSet rs = null; Connection con=null; try { StringBuffer sqlBuffer = new StringBuffer(); sqlBuffer.append("SELECT A.COIL_NO,A.COIL_STAT,\n"); sqlBuffer.append(" A.SLAB_NO,a.CUR_PROG_CD,\n"); sqlBuffer .append(" a.TRNF_DTIME,A.CUR_LOAD_LOC FROM C_TBK02_COIL_COMM A \n"); sqlBuffer.append(" WHERE COIL_NO = ? \n"); String tmp = 0 == type ? "<>" : "="; if (type == 0) { sqlBuffer.append(" AND A.COIL_STAT <> '2'\n"); } else { sqlBuffer.append(" AND A.COIL_STAT = '2'\n"); } //sqlBuffer.append(" AND A.COIL_STAT " + tmp + " '2'\n"); prepStat = this.getDao("KgDao").getPreparedStatement( sqlBuffer.toString()); prepStat.setString(1, coilNo); rs = prepStat.executeQuery(); con = prepStat.getConnection(); if (rs.next()) { coldCoil = new ColdCoilComm(); coldCoil.setCoilNo(rs.getString("COIL_NO")); coldCoil.setCoilStat(rs.getString("COIL_STAT")); coldCoil.setCurProgCd(rs.getString("CUR_PROG_CD")); coldCoil.setSlabNo(rs.getString("SLAB_NO")); coldCoil.setTrnfDTime(rs.getString("TRNF_DTIME")); coldCoil.setCurLoadLoc(rs.getString("CUR_LOAD_LOC")); } } catch (SQLException sqle) { System.out.print("钢卷不存在!"); } finally { try { if (null != rs) { rs.close(); } if (null != prepStat) { prepStat.close(); } if (null != con) { con.close(); } } catch (Exception e) { System.out.print("钢卷不存在!"); } } return coldCoil; } /** * 判断原料库垛位上是否存在有钢卷 * * @param curLoadLoc * 堆放位置 * @return String */ private String hasCoilOnYard(String curLoadLoc) { String coilNo = ""; StringBuffer sqlBuffer = new StringBuffer(); sqlBuffer .append("SELECT A.COIL_NO FROM C_TBK08_COIL_YARD A,C_TBK08_COIL_YARD_AREA B WHERE\n"); sqlBuffer.append(" A.AREA_NO = B.AREA_NO AND B.AREA_TYPE = '1'\n"); sqlBuffer .append(" AND A.CLF_NAME||to_char(A.CLF_ROW,'00')||to_char(A.CLF_COL,'00')||A.CLF_FL\n"); sqlBuffer.append(" = ? \n"); PreparedStatement prep = null; ResultSet rs = null; Connection con=null; try { prep = this.getDao("KgDao").getPreparedStatement( sqlBuffer.toString()); prep.setString(1, curLoadLoc); rs = prep.executeQuery(); con=prep.getConnection(); if (rs.next()) { coilNo = rs.getString("COIL_NO"); } } catch (SQLException sqle) { } finally { try { if (null != rs) { rs.close(); } if (null != prep) { prep.close(); } if (null != con) { con.close(); } } catch (Exception e) { } } return coilNo; } private String dlivno(String syddate) { String dlivno = ""; StringBuffer sqlBuffer = new StringBuffer(); sqlBuffer .append("SELECT MAX(A.WDLIVNO) WDLIVNO FROM C_TBK02_COIL_COMM A WHERE\n"); sqlBuffer.append(" A.WDLIVNO LIKE ?||'%'"); PreparedStatement prep = null; ResultSet rs = null; Connection con=null; try { prep = this.getDao("KgDao").getPreparedStatement( sqlBuffer.toString()); prep.setString(1, syddate); rs = prep.executeQuery(); con=prep.getConnection(); if (rs.next()) { String temp=""; if("".equals(rs.getString("WDLIVNO"))||rs.getString("WDLIVNO")==null) { dlivno=syddate+"01"; }else{ temp = rs.getString("WDLIVNO").substring(10); int aa=Integer.parseInt(temp) + 1; temp = new DecimalFormat("00").format(aa); dlivno = syddate + temp; } } else{ dlivno=syddate+"01"; } } catch (SQLException sqle) { } finally { try { if (null != rs) { rs.close(); } if (null != prep) { prep.close(); } if (null != con) { con.close(); } } catch (Exception e) { } } return dlivno; } /** * 判断对象是否为空 * * @param obj * @return boolean */ private boolean isNull(Object obj) { boolean isNull = true; if (null != obj && !"".equals(obj)) { isNull = false; } return isNull; } /** * 查询垛位是否存在 * * @param curLoadLoc * @return */ private boolean hasYard(String curLoadLoc) { boolean B = false; PreparedStatement staYard = null; ResultSet rsYard = null; Connection con=null; try { String sql = XmlSqlParsersFactory.getSql("UIM010110_02.SELECT"); staYard = this.getDao("KgDao").getPreparedStatement(sql); staYard.setString(1, curLoadLoc); staYard.setString(2, curLoadLoc); staYard.setString(3, curLoadLoc); staYard.setString(4, curLoadLoc); rsYard = staYard.executeQuery(); con=staYard.getConnection(); if (rsYard.next()) { B = true; } rsYard.close(); staYard.close(); con.close(); return B; } catch (SQLException sqle) { System.out.print("剁位信息错误!"); return B; } // finally // { // try{ // if(rsYard != null) // { // rsYard.close(); // } // if(staYard != null) // { // staYard.close(); // } // }catch(SQLException e ) // { // e.printStackTrace(); // } // // // return B; // } } }