Files
old_baoxin_wms/tomcat/webapps/sm/zkqr.jsp
2025-09-12 17:05:46 +08:00

181 lines
5.8 KiB
Plaintext

<?xml version="1.0" encoding="gb2312"?>
<%@ page contentType="text/xml; charset=GBK" %>
<%@ page import="java.util.*"%>
<%@ page import="com.zcsoft.dbvisit.DB"%>
<%@ page import="com.wxzd.wms.util.ServerUtil"%>
<jsp:useBean id="db1" scope="application" class="com.zcsoft.dbvisit.DB" />
<%
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("<result status=\"");
if (errorInfo != null)
{
out.write("false\" exception=\"");
out.write(errorInfo);
}
else
{
out.write("true\" wsmsl=\"");
if (wsmsl == 0)
{
if (!db1.hasAnyData("SELECT 2 FROM zkzl WHERE zt IN(0,1) AND (zrtpRkzt=0 OR zrtpRkzt IS NULL)", null))
{
wsmsl = -1;//负数标记没有任何为标示完成的转库指令
}
}
out.write(Integer.toString(wsmsl));
out.write("\" ysmsl=\"");
out.write(ysmsl);
out.write("\" boxOnStore=\"");
out.write(String.valueOf(boxOnStore));
}
out.write("\"></result>");
%>