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

205 lines
7.4 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, 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<cksl", ckdh))
{//没有其它指令
wsmsl = -1;
}
else if (wsmsl < 0) wsmsl = 0;
}
else
{
rowData = db1.getSingleRow("SELECT yapsl-smsl wsmsl,smsl FROM ckd WHERE ckdh=?", ckdh);
wsmsl = ServerUtil.getInt(rowData.get("wsmsl"));
if (wsmsl <= 0 && !db1.hasAnyData("SELECT 2 FROM ckd WHERE ckdh=? AND zt IN(0,1) AND smsl<yapsl", ckdh))
{//没有其它出库单
wsmsl = -2;
}
else if (wsmsl < 0) wsmsl = 0;
}
ysmsl = (String)rowData.get("smsl");
}
catch (Exception ex)
{
//ex.printStackTrace();
errorInfo = ex.getMessage();
if (errorInfo == null) errorInfo = ex.toString();
}
}
else
{//弹出选择入库单号的界面
if (ckdh == null || ckdh.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=\"");
out.write(Integer.toString(wsmsl));
out.write("\" ysmsl=\"");
out.write((ysmsl));
}
out.write("\"></result>");
%>