<%@ 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, zlbh = null, jhs = null, xh = null, tpbh = null; int wsmsl = 0;//此次保存后,还剩余的未扫描数量 String ysmsl = "0"; session = request.getSession(false); boolean boxOnStore = false; if (session != null && session.getAttribute("userInfo") != null) { zlbh = request.getParameter("zlbh"); jhs = request.getParameter("jhs");//传递过来的表计条码 xh = request.getParameter("xh");//传递过来的表计条码 tpbh = request.getParameter("tpbh");//传递过来的转入托盘号 boolean end = "1".equals(request.getParameter("end")); //转库指令号。如果还没有,则首先让用户选择转库指令号 if (zlbh != null && zlbh.length() > 1//1是中间的分隔符 && (jhs != null && (jhs.length() > 2 || end))) { try { //提取关联的转库指令信息 Map rkdxx = db1.getSingleRow("SELECT zckw,zcck,zysl,kindToTransfer,swzt FROM zkzl WHERE zlbh=? AND zt IN(0,1)" , zlbh); if (rkdxx == null) { throw new IllegalArgumentException("转库指令不存在,或已被标示完成"); } wsmsl = end?0:1; //插入表计 String copiedFields = ",jh,kind,zcfl,model,sym,swzt,rkdh,rkrq,MISFlag,pc,zzdw,volt,curr,wiring_mode" + ",t_factor,comm_no,comm_mode,disp_mode,meter_close_mode,acuuracy,volt_ratio,current_ratio,MIS_ID,MADE_NO,PR_CODE"; String insertItem = " INSERT INTO zkzlLxmx(zlbh,kcjlh,zcxh,zrxh" + copiedFields + ")"; insertItem += "\nSELECT ?,?,xh,?" + copiedFields + " FROM kcmx WHERE jlh=?"; //修改表计状态 List sqls = new ArrayList(), values = new ArrayList(); boolean isBoxTransfer = jhs.length() == 0;//是否转移整箱 boolean qxsm = "1".equals(request.getParameter("qxsm"));//是否取消扫描 StringTokenizer jhList = new StringTokenizer(jhs, "|"); String jh = "", zrxh = xh; Object kind = rkdxx.get("kindToTransfer"); Object swzt = rkdxx.get("swzt"); while (jhList.hasMoreTokens() || isBoxTransfer) { String sql; Object[] params; if (isBoxTransfer) { sql = "SELECT jlh,InUse FROM kcmx WHERE InUse>0 AND xh=? AND ckdm=? AND kwbh=?"; params = new Object[]{xh, rkdxx.get("zcck"), rkdxx.get("zckw")}; } else { jh = jhList.nextToken(); sql = "SELECT jlh,InUse FROM kcmx WHERE InUse>0 AND (jh=? OR MADE_NO=?) AND ckdm=? AND kwbh=?"; params = new Object[]{jh, jh, rkdxx.get("zcck"), rkdxx.get("zckw")}; } if (kind != DB.NULL) { sql += " AND kind=" + kind; } if (swzt != DB.NULL) { sql += " AND swzt=" + swzt; } List kcxx = db1.getVDataWithPrepareStatement(sql, params); int n = kcxx.size(); if (n == 0) { if (isBoxTransfer) {//那可能箱号是转入库位上的,不判断了。因为期初数据的转入库位上不一定有箱号信息的 boxOnStore = true; } else { throw new IllegalArgumentException("在转出库位设备列表中,没有匹配的条码或出厂编号:" + jh); } } if (n > 1 && !isBoxTransfer) { throw new IllegalArgumentException("在转出库位设备列表中,有匹配的条码或出厂编号 " + jh + " 多个设备"); } for (int i = 0; i < n; i++) { List kcxxRow = (List)kcxx.get(i); Object InUse = kcxxRow.get(1); if ("2".equals(InUse)) { throw new IllegalArgumentException("条码:" + jh + "已被安排出库"); } else if (qxsm == false && "3".equals(InUse)) { throw new IllegalArgumentException("条码:" + jh + " 已被扫描"); } else if (qxsm && !"3".equals(InUse)) { throw new IllegalArgumentException("条码:" + jh + " 并未被扫描"); } Object kcjlh = kcxxRow.get(0); if (qxsm) { sqls.add("DELETE zkzlLxmx WHERE zlbh=? AND kcjlh=?"); values.add(new Object[]{zlbh, kcjlh}); } else { sqls.add(insertItem); values.add(new Object[]{zlbh, kcjlh, zrxh, kcjlh}); } sqls.add("UPDATE kcmx SET InUse=? WHERE jlh=? AND InUse=?"); values.add(new Object[]{qxsm?"1":"3", kcjlh, InUse}); } // if (isBoxTransfer) break; } //修改单证的状态位“执行中” String updateVoucherStmt = "UPDATE zkzl SET zt=1,zysl=(SELECT COUNT(*) jls FROM zkzlLxmx WHERE zlbh=?)"; if (tpbh != null && tpbh.length() > 0) { System.out.println("tpbh = " + tpbh); updateVoucherStmt += ",zrtp='" + tpbh + "'"; } updateVoucherStmt += "\nWHERE zlbh=? AND zt IN(0,1)"; sqls.add(updateVoucherStmt); values.add(new Object[]{zlbh, zlbh}); //提交数据库请求 //System.out.println("sqls = " + sqls); db1.preparedUpdate(sqls, values, true); // ysmsl = (String)db1.getSingleField("SELECT COUNT(*) jls FROM zkzlLxmx WHERE zlbh=?", zlbh); } catch (Exception ex) { //ex.printStackTrace(); errorInfo = ex.getMessage(); if (errorInfo == null) errorInfo = ex.toString(); } } else {//弹出选择转库指令号的界面 if (zlbh == null || zlbh.length() == 0) errorInfo = "未传递转库指令号"; else errorInfo = "未传递表计条码"; } } else { errorInfo = "未登录"; } %> <% out.write(""); %>