<%@ page contentType="text/xml; charset=GBK" %> <%@ page import="java.util.*"%> <%@ page import="com.zcsoft.dbvisit.DB"%> <%@ page import="com.wxzd.wms.util.ServerUtil"%> <% String errorInfo = null, ckdh = null, jhs = null, zlbhAndTpbh = null; int wsmsl = 0;//此次保存后,还剩余的未扫描数量 String ysmsl = "0"; session = request.getSession(false); if (session != null && session.getAttribute("userInfo") != null) { ckdh = request.getParameter("ckdh"); jhs = request.getParameter("jhs");//传递过来的表计条码 zlbhAndTpbh = request.getParameter("zlbh"); //入库单号。如果还没有,则首先让用户选择入库单号 if (ckdh != null && ckdh.length() > 1//1是中间的分隔符 && jhs != null && jhs.length() > 2)//2是前后两个个分隔符 { try { //检查出库单号是否有效。PEDING 因为是选择输入的,所以检查不重要 //db1.getSingleField("SELECT ) int indexSeparator = zlbhAndTpbh != null?zlbhAndTpbh.indexOf('|'):-1; //int indexSeparator2 = indexSeparator > 0?zlbhAndTpbh.indexOf('|', indexSeparator + 1):-1; //int indexSeparator3 = indexSeparator2 > 0?zlbhAndTpbh.indexOf('|', indexSeparator2 + 1):-1; String zlbh = indexSeparator > 0?zlbhAndTpbh.substring(0, indexSeparator):null; /*, ckkw = indexSeparator2 > 0?zlbhAndTpbh.substring(indexSeparator + 1, indexSeparator2):null , cks = indexSeparator3 > 0?zlbhAndTpbh.substring(indexSeparator2 + 1, indexSeparator3):null , tpbh = indexSeparator3 > 0?zlbhAndTpbh.substring(1 + indexSeparator3):null;*/ ckdh = java.net.URLEncoder.encode(ckdh); //修改指令明细记录 List sqls = new ArrayList(2), values = new ArrayList(2); String updateStmt = DB.prepareUpdateStmt("ckzlLxMx", new String[]{"smzt", "smcx"} , new String[]{"ckdh", "jh"}); //System.out.println(request.getParameter("qxsm")); Integer smzt = new Integer("1".equals(request.getParameter("qxsm"))?0:1); Integer smcx = null; String chkSql = "SELECT smzt,jh FROM ckzlLxMx A WHERE ckdh=? AND (jh=? OR MADE_NO=?)"; String chkSql2 = "SELECT smzt,jh FROM ckzlLxMx A WHERE ckdh=? AND xh=?"; String chkSql3 = "SELECT smzt,jh FROM ckzlLxMx A JOIN ckzl B ON A.zlbh=B.zlbh WHERE A.ckdh=? AND B.tpbh=?"; if (zlbh != null) { chkSql += " AND A.zlbh=" + zlbh + " ORDER BY A.jh"; updateStmt += " AND zlbh=" + zlbh; } if (smzt.intValue() == 1) { Object maxSmcx = db1.getSingleField("SELECT MAX(smcx) FROM ckzlLxmx WHERE ckdh=?", ckdh); if (maxSmcx == DB.NULL) smcx = new Integer(0); else smcx = Integer.valueOf(maxSmcx.toString()); } StringTokenizer jhList = new StringTokenizer(jhs, "|"); Object[] params; while (jhList.hasMoreTokens()) { String barcode = jhList.nextToken(); boolean isBoxCode = false, isSalverCode = false; String sql; if (isBoxCode = true) { sql = chkSql2; params = new Object[]{ckdh, barcode}; } else if (isSalverCode = true) { sql = chkSql3; params = new Object[]{ckdh, barcode}; } else { sql = chkSql; params = new Object[]{ckdh, barcode, barcode}; } //检查局号是否存在 List data = db1.getVDataWithPrepareStatement(sql, params); int n = data.size(); if (n > 1 && isBoxCode == false && isSalverCode == false) { throw new IllegalArgumentException("可出库设备列表中,存在匹配输入条码或出厂编号为 " + barcode + " 的多个设备"); } if (n == 0) { if (isBoxCode) { throw new IllegalArgumentException("可出库设备列表中,未找到箱条码为 " + barcode + " 的箱号记录"); } else if (isSalverCode) { throw new IllegalArgumentException("未托盘条码 " + barcode + " 的出库作业指令"); } throw new IllegalArgumentException("可出库设备列表中,没有条码或出厂编号为 " + barcode + " 的设备"); } for (int i = 0; i < n; i++) { List rowData = (List)data.get(i); String jh = (String)rowData.get(1); if (smzt.intValue() == 1 && "1".equals(rowData.get(0))) { if (isBoxCode || isSalverCode) continue;//用户随机扫描几个确认一下,再扫箱号整箱出库 else throw new IllegalStateException("条码" + jh + "已经扫描"); } else if (smzt.intValue() == 0 && "0".equals(rowData.get(0))) { if (isBoxCode || isSalverCode) continue; else throw new IllegalStateException("条码" + jh + "并未扫描"); } if (smcx != null) smcx = new Integer(smcx.intValue() + 1); sqls.add(updateStmt); values.add(new Object[]{smzt, smcx, ckdh, jh}); } } //修改指令的数量 db1.DEBUG = true; StringBuffer updateInstStmt = new StringBuffer("UPDATE ckzl SET smqrs="); updateInstStmt.append(" (SELECT COUNT(*) FROM ckzlLxMx M"); updateInstStmt.append(" WHERE M.zlbh IS NOT NULL AND M.ckdh=? AND M.smzt=1 AND M.zlbh=ckzl.zlbh) WHERE pzbh=?"); if (zlbh != null) { updateInstStmt.append(" AND zlbh=").append(zlbh); } sqls.add(updateInstStmt.toString()); values.add(new Object[]{ckdh, ckdh}); //修改库存记录状态 if (smzt.intValue() == 1) { sqls.add("UPDATE kcmx SET InUse=2 WHERE jlh IN(SELECT kcjlh FROM ckzlLxmx WHERE ckdh=? AND smzt=1) AND InUse=1"); values.add(ckdh); } else { sqls.add("UPDATE kcmx SET InUse=1 WHERE jlh IN(SELECT kcjlh FROM ckzlLxmx WHERE ckdh=? AND smzt=0) AND InUse=2"); values.add(ckdh); } //修改单证的扫描数量 StringBuffer updateVoucherStmt = new StringBuffer("UPDATE ckd SET smsl="); updateVoucherStmt.append(" (SELECT COUNT(*) jls FROM ckzlLxMx"); updateVoucherStmt.append(" WHERE zlbh IS NOT NULL AND ckdh=? AND smzt=1) WHERE ckdh=? AND zt IN(0,1)"); sqls.add(updateVoucherStmt.toString()); values.add(new Object[]{ckdh, ckdh}); //提交数据库请求 //System.out.println("sqls = " + sqls); db1.preparedUpdate(sqls, values, true); Map rowData; if (zlbh != null) { rowData = db1.getSingleRow("SELECT cksl-smqrs wsmsl,smqrs smsl FROM ckzl WHERE zlbh=?", zlbh); wsmsl = ServerUtil.getInt(rowData.get("wsmsl")); if (wsmsl <= 0 && !db1.hasAnyData("SELECT 2 FROM ckzl WHERE pzbh=? AND smqrs <% out.write(""); %>