Sfoglia il codice sorgente

出入库单序列号收集优化

shenjingwei 6 ore fa
parent
commit
360c68f951
1 ha cambiato i file con 108 aggiunte e 165 eliminazioni
  1. 108 165
      src/custom/restcontroller/webmanage/sale/stockbill/stockbill.java

+ 108 - 165
src/custom/restcontroller/webmanage/sale/stockbill/stockbill.java

@@ -56,8 +56,7 @@ public class stockbill extends Controller {
 
         SQLList sqllist = new SQLList();
 
-        Rows orderRows = dbConnect.runSqlQuery("select distinct sa_orderid from st_stockbill_items where st_stockbillid ='"
-                + st_stockbillid + "' and  siteid='" + siteid + "'");
+        Rows orderRows = dbConnect.runSqlQuery("select distinct sa_orderid from st_stockbill_items where st_stockbillid ='" + st_stockbillid + "' and  siteid='" + siteid + "'");
         for (Row row : orderRows) {
             sqllist.add("update sa_order set abstract='" + abstract1 + "' where sa_orderid=" + row.getLong("sa_orderid"));
         }
@@ -67,7 +66,9 @@ public class stockbill extends Controller {
     }
 
     @API(title = "新增销售出库单", apiversion = R.ID2025043010105603.v1.class)
-    @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class})
+    @CACHEING_CLEAN(apiClass = {
+            stockbill.class,
+            stockbillitems.class})
     public String insertormodify_stockbill() throws YosException {
         SQLList sqlList = new SQLList();
         // 表名
@@ -208,9 +209,7 @@ public class stockbill extends Controller {
             //通过版本更新订单表头数据
             updateStockBillWithVersion(this);
 
-            Rows rows = dbConnect.runSqlQuery(
-                    "SELECT status,sys_enterpriseid,paydiscountamount,payamount,sourceobject from st_stockbill WHERE st_stockbillid = "
-                            + st_stockbillid);
+            Rows rows = dbConnect.runSqlQuery("SELECT status,sys_enterpriseid,paydiscountamount,payamount,sourceobject from st_stockbill WHERE st_stockbillid = " + st_stockbillid);
             if (rows.isNotEmpty()) {
                 if (rows.get(0).getString("status").equals("新建")) {
                     if (rows.get(0).getString("sourceobject").equals("tpartreimbursement")) {
@@ -239,8 +238,7 @@ public class stockbill extends Controller {
                     if (type.equals("销售出库")) {
                         updateSQL.setValue("payamount", content.getBigDecimal("payamount"));
                         updateSQL.setValue("paydiscountamount", content.getBigDecimal("paydiscountamount"));
-                        if (content.getBigDecimal("payamount").compareTo(rows.get(0).getBigDecimal("payamount")) != 0
-                                || content.getBigDecimal("paydiscountamount").compareTo(rows.get(0).getBigDecimal("paydiscountamount")) != 0) {
+                        if (content.getBigDecimal("payamount").compareTo(rows.get(0).getBigDecimal("payamount")) != 0 || content.getBigDecimal("paydiscountamount").compareTo(rows.get(0).getBigDecimal("paydiscountamount")) != 0) {
                             sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "金额更新变更", "销售出库单更支付金额:" + content.getBigDecimal("payamount") + ",优惠金额:" + content.getBigDecimal("paydiscountamount")).getSQL());
                         }
                     }
@@ -335,8 +333,7 @@ public class stockbill extends Controller {
         row.put("receivableamount", rowsdetail.sum("amount"));
         Rows accountbalancerows = dbConnect.runSqlQuery("select * from  sa_accountbalance t1 inner join sa_accountclass t2 on  t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + row.getLong("sys_enterpriseid"));
         Rows stockbillrows_hong = dbConnect.runSqlQuery("select billno from st_stockbill t1 where t1.rb=0 and t1.sourceobject='st_stockbill' and t1.sourceid=" + st_stockbillid);
-        Rows expressformrows = dbConnect.runSqlQuery("select t1.* from expressform t1 inner join sa_expressform_stockbill t2 on t1.expressformid=t2.expressformid and t1.siteid=t2.siteid where t2.st_stockbillid ='"
-                + st_stockbillid + "' and  t1.siteid='" + siteid + "' order by t1.createdate desc");
+        Rows expressformrows = dbConnect.runSqlQuery("select t1.* from expressform t1 inner join sa_expressform_stockbill t2 on t1.expressformid=t2.expressformid and t1.siteid=t2.siteid where t2.st_stockbillid ='" + st_stockbillid + "' and  t1.siteid='" + siteid + "' order by t1.createdate desc");
         if (accountbalancerows.isNotEmpty()) {
             row.put("discountamount_xjzh", accountbalancerows.get(0).getBigDecimal("discountamount"));
         } else {
@@ -421,28 +418,22 @@ public class stockbill extends Controller {
 
         QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "*").setTableAlias("t1");
         if (billtypes.contains("销售出库") || billtypes.contains("返修入库") || billtypes.contains("返修出库")) {
-            querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.sys_enterpriseid = t2.sys_enterpriseid AND t1.siteid = t2.siteid",
-                    "enterprisename", "abbreviation");
-            querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.sys_enterpriseid = t3.sys_enterpriseid AND t1.siteid = t3.siteid",
-                    "agentnum");
+            querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.sys_enterpriseid = t2.sys_enterpriseid AND t1.siteid = t2.siteid", "enterprisename", "abbreviation");
+            querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.sys_enterpriseid = t3.sys_enterpriseid AND t1.siteid = t3.siteid", "agentnum");
         }
         if (billtypes.contains("销售出库")) {
             querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise_contacts", "t4", "t1.rec_contactsid=t4.contactsid and t1.siteid = t4.siteid");
-            querySQL.addJoinTable(JOINTYPE.left, "sa_accountbalance", "t5", "t5.sys_enterpriseid=t1.sys_enterpriseid and t1.siteid = t5.siteid and t5.sa_accountclassid =(select t1.sa_accountclassid from sa_accountclass t1 where t1.siteid='" + siteid + "' and t1.accountname='现金账户')",
-                    "discountamount");
+            querySQL.addJoinTable(JOINTYPE.left, "sa_accountbalance", "t5", "t5.sys_enterpriseid=t1.sys_enterpriseid and t1.siteid = t5.siteid and t5.sa_accountclassid =(select t1.sa_accountclassid from sa_accountclass t1 where t1.siteid='" + siteid + "' and t1.accountname='现金账户')", "discountamount");
             //querySQL.addJoinTable(JOINTYPE.left, "(select dataid,table_name,count(0) as printcount from sys_report_session  GROUP BY dataid,table_name)", "t11", "t11.dataid=t1.st_stockbillid and t11.table_name='st_stockbill'", "printcount");
             querySQL.addQueryFields("recname", "t4.name");
             querySQL.addQueryFields("recphonenumber", "t4.phonenumber");
             querySQL.addQueryFields("recaddress", "t4.address");
         }
-        querySQL.addJoinTable(JOINTYPE.left, "sys_department", "t6", "t1.departmentid=t6.departmentid and t1.siteid = t6.siteid",
-                "depno", "depname");
+        querySQL.addJoinTable(JOINTYPE.left, "sys_department", "t6", "t1.departmentid=t6.departmentid and t1.siteid = t6.siteid", "depno", "depname");
         if (billtypes.contains("其他入库")) {
-            querySQL.addJoinTable(JOINTYPE.left, "sa_supplier", "t7", "t1.sa_supplierid=t7.sa_supplierid and t1.siteid = t7.siteid",
-                    "suppno", "suppname", "suppshortname");
+            querySQL.addJoinTable(JOINTYPE.left, "sa_supplier", "t7", "t1.sa_supplierid=t7.sa_supplierid and t1.siteid = t7.siteid", "suppno", "suppname", "suppshortname");
         }
-        querySQL.addJoinTable(JOINTYPE.left, "st_stock", "t8", "t1.stockid=t8.stockid and t1.siteid = t8.siteid",
-                "stockname");
+        querySQL.addJoinTable(JOINTYPE.left, "st_stock", "t8", "t1.stockid=t8.stockid and t1.siteid = t8.siteid", "stockname");
         if (billtypes.contains("其他入库") || billtypes.contains("其他出库")) {
             querySQL.addJoinTable(JOINTYPE.left, "st_dbstockbill", "t9", "t1.sourceid=t9.st_dbstockbillid and t1.siteid = t9.siteid and t1.sourceobject='st_dbstockbill'");
             querySQL.addQueryFields("dbbillno", "t9.billno");
@@ -541,7 +532,9 @@ public class stockbill extends Controller {
 
 
     @API(title = "删除", apiversion = R.ID20230719154003.v1.class)
-    @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class})
+    @CACHEING_CLEAN(apiClass = {
+            stockbill.class,
+            stockbillitems.class})
     public String delete() throws YosException {
 
         JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
@@ -556,8 +549,7 @@ public class stockbill extends Controller {
         BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, st_stockbillids.size());
         for (Object o : st_stockbillids) {
             long st_stockbillid = Long.parseLong(o.toString());
-            Rows RowsStatus = dbConnect.runSqlQuery("select st_stockbillid,status from st_stockbill where siteid='"
-                    + siteid + "' and st_stockbillid='" + st_stockbillid + "'");
+            Rows RowsStatus = dbConnect.runSqlQuery("select st_stockbillid,status from st_stockbill where siteid='" + siteid + "' and st_stockbillid='" + st_stockbillid + "'");
 
             if (RowsStatus.isNotEmpty()) {
                 if (!RowsStatus.get(0).getString("status").equals("新建")) {
@@ -566,19 +558,21 @@ public class stockbill extends Controller {
                 }
             }
 
-            dbConnect.runSqlUpdate(
-                    "delete from st_stockbill where siteid='" + siteid + "' and st_stockbillid=" + st_stockbillid);
-            dbConnect.runSqlUpdate(
-                    "delete from st_stockbill_items where siteid='" + siteid + "' and st_stockbillid=" + st_stockbillid);
-            dbConnect.runSqlUpdate(
-                    "delete from st_stockbill_items_sku where siteid='" + siteid + "' and st_stockbillid=" + st_stockbillid);
+            dbConnect.runSqlUpdate("delete from st_stockbill where siteid='" + siteid + "' and st_stockbillid=" + st_stockbillid);
+            dbConnect.runSqlUpdate("delete from st_stockbill_items where siteid='" + siteid + "' and st_stockbillid=" + st_stockbillid);
+            dbConnect.runSqlUpdate("delete from st_stockbill_items_sku where siteid='" + siteid + "' and st_stockbillid=" + st_stockbillid);
         }
         return batchDeleteErr.getReturnObject().toString();
 
     }
 
     @API(title = "审核", apiversion = R.ID20230719154103.v1.class, intervaltime = 5000)
-    @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, Order.class, OrderItems.class, restcontroller.sale.stockbill.stockbill.class})
+    @CACHEING_CLEAN(apiClass = {
+            stockbill.class,
+            stockbillitems.class,
+            Order.class,
+            OrderItems.class,
+            restcontroller.sale.stockbill.stockbill.class})
     public String check() throws YosException {
         JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
         if (content.containsKey("st_stockbillids_v")) {
@@ -640,7 +634,13 @@ public class stockbill extends Controller {
 
 
     @API(title = "反审核", apiversion = R.ID20230719154203.v1.class, intervaltime = 5000)
-    @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, Order.class, OrderItems.class, stockbill.class, restcontroller.sale.stockbill.stockbill.class})
+    @CACHEING_CLEAN(apiClass = {
+            stockbill.class,
+            stockbillitems.class,
+            Order.class,
+            OrderItems.class,
+            stockbill.class,
+            restcontroller.sale.stockbill.stockbill.class})
     public String uncheck() throws YosException {
         JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
         if (content.containsKey("st_stockbillids_v")) {
@@ -659,7 +659,9 @@ public class stockbill extends Controller {
     }
 
     @API(title = "生成送修单", apiversion = R.ID2025070415073603.v1.class)
-    @CACHEING_CLEAN(apiClass = {sendrepair.class, sendrepair_pj.class})
+    @CACHEING_CLEAN(apiClass = {
+            sendrepair.class,
+            sendrepair_pj.class})
     public String sendrepair() throws YosException {
         JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
         QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "st_stockbillid", "status", "type", "typemx", "remarks", "sys_enterpriseid", "isrepair");
@@ -971,8 +973,7 @@ public class stockbill extends Controller {
 
         boolean isconfirm = content.getBooleanValue("isconfirm");
         if (st_stockbillids.isEmpty()) {
-            return getErrReturnObject().setErrMsg("请选择需要操作的出入库单")
-                    .toString();
+            return getErrReturnObject().setErrMsg("请选择需要操作的出入库单").toString();
         }
         QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "*");
         querySQL.setTableAlias("t1");
@@ -983,8 +984,7 @@ public class stockbill extends Controller {
         SQLList sqllist = new SQLList();
         for (Row row : rows) {
             if (!row.getString("status").equals("审核")) {
-                return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的出入库单为非审核状态,无法进行仓库确认")
-                        .toString();
+                return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的出入库单为非审核状态,无法进行仓库确认").toString();
             }
             UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "st_stockbill");
             updateSQL.setUniqueid(row.getLong("st_stockbillid"));
@@ -1008,7 +1008,9 @@ public class stockbill extends Controller {
     }
 
     @API(title = "红冲", apiversion = R.ID2025072409344603.v1.class)
-    @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class})
+    @CACHEING_CLEAN(apiClass = {
+            stockbill.class,
+            stockbillitems.class})
     public String hongc() throws YosException {
         long st_stockbillid = content.getLong("st_stockbillid");
 
@@ -1016,25 +1018,19 @@ public class stockbill extends Controller {
         updateStockBillWithVersion(this);
 
         SQLList sqlList = new SQLList();
-        Rows rows = dbConnect.runSqlQuery("select t1.*,ifnull(t2.sa_sendrepairid,0) sa_sendrepairid from st_stockbill t1 left join sa_sendrepair t2 on t1.st_stockbillid=t2.sourceid and t1.siteid=t2.siteid and t2.sourcetable='st_stockbill'  where t1.st_stockbillid ='"
-                + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
-        Rows rowsdetail = dbConnect.runSqlQuery("select t1.*,t2.skucontrol from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.st_stockbillid ='"
-                + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
+        Rows rows = dbConnect.runSqlQuery("select t1.*,ifnull(t2.sa_sendrepairid,0) sa_sendrepairid from st_stockbill t1 left join sa_sendrepair t2 on t1.st_stockbillid=t2.sourceid and t1.siteid=t2.siteid and t2.sourcetable='st_stockbill'  where t1.st_stockbillid ='" + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
+        Rows rowsdetail = dbConnect.runSqlQuery("select t1.*,t2.skucontrol from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.st_stockbillid ='" + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
         if (rows.isEmpty()) {
-            return getErrReturnObject().setErrMsg("该出入库单不存在")
-                    .toString();
+            return getErrReturnObject().setErrMsg("该出入库单不存在").toString();
         }
         if (!rows.get(0).getString("status").equals("审核")) {
-            return getErrReturnObject().setErrMsg("非审核的出入库单无法红冲")
-                    .toString();
+            return getErrReturnObject().setErrMsg("非审核的出入库单无法红冲").toString();
         }
         if (rows.get(0).getInteger("rb") == 0) {
-            return getErrReturnObject().setErrMsg("只能红冲蓝字出入库单")
-                    .toString();
+            return getErrReturnObject().setErrMsg("只能红冲蓝字出入库单").toString();
         }
         if (rows.get(0).getInteger("sa_sendrepairid") != 0) {
-            return getErrReturnObject().setErrMsg("来源于送修单的出库单不能红冲")
-                    .toString();
+            return getErrReturnObject().setErrMsg("来源于送修单的出库单不能红冲").toString();
         }
 
         st_stockbillid = createTableID("st_stockbill");
@@ -1133,7 +1129,10 @@ public class stockbill extends Controller {
     }
 
     @API(title = "序列号收集", apiversion = R.ID2025101613261703.v1.class, intervaltime = 2000)
-    @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, stockbillitemssku.class})
+    @CACHEING_CLEAN(apiClass = {
+            stockbill.class,
+            stockbillitems.class,
+            stockbillitemssku.class})
     public String skuCollect() throws YosException {
         long stockid = content.getLong("stockid");
         String sku = content.getString("sku");
@@ -1153,8 +1152,12 @@ public class stockbill extends Controller {
         }
         String[] CODE = getDistinctArray(sku.split(ss));
 
-        Rows rows = dbConnect.runSqlQuery("select t1.*,t2.stockno from st_stockbill t1 left join st_stock t2 on t1.stockid=t2.stockid where t1.st_stockbillid ='"
-                + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
+        Rows rows = dbConnect.runSqlQuery("select t1.*,t2.stockno from st_stockbill t1 left join st_stock t2 on t1.stockid=t2.stockid where t1.st_stockbillid ='" + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
+        if (rows.isEmpty()) {
+            return getErrReturnObject().setErrMsg("该出入库单不存在").toString();
+        }
+        Row st_stockbill = rows.get(0);
+
 
         QuerySQL skuQuerySQL = SQLFactory.createQuerySQL(this, "sa_itemsku", "*");
         skuQuerySQL.setTableAlias("t1");
@@ -1164,30 +1167,26 @@ public class stockbill extends Controller {
         skuQuerySQL.setWhere("t1.sku", CODE);
         Rows skuRows = skuQuerySQL.query();
         RowsMap skuRowsMap = skuRows.toRowsMap("sku");
-        if (rows.isEmpty()) {
-            return getErrReturnObject().setErrMsg("该出入库单不存在")
-                    .toString();
+
+        if (st_stockbill_itemsid > 0 && dbConnect.runSqlQuery("select 1 from st_stockbill_items_sku where st_stockbillid=st_stockbill_itemsid and st_stockbillid=" + st_stockbillid).isNotEmpty()) {
+            scanqtyrefresh();
         }
-        Row st_stockbill = rows.get(0);
+
         for (String FMACHINECODE : CODE) {
-            Rows stockbillitemsrows = dbConnect.runSqlQuery("select t1.itemid,t1.qty,t2.skucontrol,t1.st_stockbill_itemsid from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid where t1.st_stockbillid ='"
-                    + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
-            Rows stockbillitemskurows = dbConnect.runSqlQuery("select t1.*,t2.itemid from st_stockbill_items_sku t1 left join sa_itemsku t2 on t1.sku=t2.sku where t1.st_stockbillid ='"
-                    + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
+            Rows stockbillitemsrows = dbConnect.runSqlQuery("select t1.itemid,t1.qty,t2.skucontrol,t1.st_stockbill_itemsid,t1.stockid from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid where t1.st_stockbillid ='" + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
+            Rows stockbillitemskurows = dbConnect.runSqlQuery("select t1.*,t2.itemid from st_stockbill_items_sku t1 left join sa_itemsku t2 on t1.sku=t2.sku where t1.st_stockbillid ='" + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
 
             SQLList sqllist = new SQLList();
-            if (FMACHINECODE.equals("")) {
+            if (FMACHINECODE.isEmpty()) {
                 continue;
             }
-            if (st_stockbill.getString("type").contains("入库")
-                    && FMACHINECODE.startsWith("66")) {
-                return getErrReturnObject().setErrMsg("序列号" + FMACHINECODE
-                        + "不可在DRP手工入库").toString();
+            if (st_stockbill.getString("type").contains("入库") && FMACHINECODE.startsWith("66")) {
+                return getErrReturnObject().setErrMsg("序列号" + FMACHINECODE + "不可在DRP手工入库").toString();
             }
             if (st_stockbill.getString("status").equals("审核") && stockbillitemskurows.size() == stockbillitemsrows.toRowsMap("skucontrol").get("1").sum("qty").intValue()) {
                 return getErrReturnObject().setErrMsg("序列号数量已经满足,不可继续添加").toString();
             }
-            if (stockbillitemskurows.toRowsMap("sku").containsKey(FMACHINECODE)) {
+            if (stockbillitemskurows.toArrayList("sku").contains(FMACHINECODE)) {
                 return getErrReturnObject().setErrMsg("序列号" + FMACHINECODE + "重复").toString();
             }
             if (!skuRowsMap.containsKey(FMACHINECODE)) {
@@ -1196,84 +1195,47 @@ public class stockbill extends Controller {
                 if (skuRowsMap.get(FMACHINECODE).get(0).getString("status").equals("报废")) {
                     return getErrReturnObject().setErrMsg("该序列号已作废").toString();
                 }
-                long skustockid = skuRowsMap.get(FMACHINECODE).get(0).getLong(
-                        "stockid");
-                long skuitemid = skuRowsMap.get(FMACHINECODE).get(0).getLong("itemid");
-                String skuitemno = skuRowsMap.get(FMACHINECODE).get(0).getString("itemno");
+                long skustockid = skuRowsMap.get(FMACHINECODE).get(0).getLong("stockid");//序列号当前所在仓库
+                long skuitemid = skuRowsMap.get(FMACHINECODE).get(0).getLong("itemid");//序列号商品ID
+                String skuitemno = skuRowsMap.get(FMACHINECODE).get(0).getString("itemno");//商品编号
                 if (st_stockbill.getString("status").equals("审核")) {
                     Rows stockbillskucheckRows = dbConnect.runSqlQuery("select * from stockbillskucheck where itemid=" + skuitemid + " and st_stockbillid=" + st_stockbillid);
                     if (!stockbillskucheckRows.isEmpty()) {
-                        return getErrReturnObject().setErrMsg("商品编号" + skuitemno
-                                + stockbillskucheckRows.get(0)
-                                .getString("msg")).toString();
+                        return getErrReturnObject().setErrMsg("商品编号" + skuitemno + stockbillskucheckRows.get(0).getString("msg")).toString();
                     }
                 }
-
                 if (skustockid != 0 && isinstock(st_stockbill.getString("type"), st_stockbill.getString("rb"), true)) {
-                    return getErrReturnObject().setErrMsg("序列号不可进行入库操作").toString();
+                    return getErrReturnObject().setErrMsg("序列号已在仓库中,不可进行入库操作").toString();
                 }
                 if (skustockid == 0 && !isinstock(st_stockbill.getString("type"), st_stockbill.getString("rb"), true)) {
-                    return getErrReturnObject().setErrMsg("序列号不可进行出库操作").toString();
+                    return getErrReturnObject().setErrMsg("序列号不在仓库中,不可进行出库操作").toString();
                 }
                 if (skustockid == 0 && stockid == 0) {
                     return getErrReturnObject().setErrMsg("请指定仓库").toString();
                 }
-                if (st_stockbill.getString("status").equals("审核") && !stockbillitemsrows.toRowsMap("skucontrol").get("1").toRowsMap("itemid").containsKey(
-                        skuRowsMap.get(FMACHINECODE).get(0).getString("itemid"))) {
-                    return getErrReturnObject().setErrMsg("序列号所属的商品编号没有包含在单据表体中").toString();
+                if (st_stockbill.getString("status").equals("审核") && !stockbillitemsrows.toRowsMap("skucontrol").get("1").toRowsMap("itemid").containsKey(String.valueOf(skuitemid))) {
+                    return getErrReturnObject().setErrMsg("当前单据已审核,所添加的序列号所属的商品编号没有包含在单据表体中").toString();
                 }
-                if (st_stockbill.getString("type").equals("生产入库")
-                        && skuRowsMap.get("FMACHINECODE").get(0).getString("mono")
-                        .equals("")) {
+                if (st_stockbill.getString("type").equals("生产入库") && skuRowsMap.get("FMACHINECODE").get(0).getString("mono").isEmpty()) {
                     return getErrReturnObject().setErrMsg("序列号非生产订单生成,不可添加").toString();
                 }
-
-//                if (st_stockbill.getString("type").equals("其他入库")
-//                        && st_stockbill.getString("stockno").equals("101")
-//                        && !getPaoSet(
-//                        "MACHINECODEUSEVIEW",
-//                        "MACHINECODEUSEVIEW",
-//                        "fmachinecode='" + FMACHINECODE
-//                                + "' and ftype like'%出库%'")
-//                        .isEmpty()) {
-//                    ((PaoSet) getThisPaoSet())
-//                            .addWarning(new P2AppException("", "序列号"
-//                                    + FMACHINECODE + "已存在出库记录,请确认该序列号是否有误"));
-//                }
-                String stockno = st_stockbill.getString("type").equals("销售出库")
-                        && (skuRowsMap.get(FMACHINECODE).get(0).getString("stockno")
-                        .equals("103") || skuRowsMap.get(FMACHINECODE).get(0).getString("stockno").equals("109")) ? "101"
-                        : skuRowsMap.get(FMACHINECODE).get(0).getString("stockno");
-                //String stockno =skuRowsMap.get(FMACHINECODE).get(0).getString("stockno");
-                Rows stockrows = dbConnect.runSqlQuery("select *from st_stock where stockno='" + stockno + "'");
-
-
-                if (st_stockbill_itemsid > 0 && dbConnect.runSqlQuery("select 1 from st_stockbill_items_sku where st_stockbillid=st_stockbill_itemsid and st_stockbillid=" + st_stockbillid).size() > 0) {
-                    scanqtyrefresh();
-                    stockbillitemsrows = dbConnect.runSqlQuery("select t1.itemid,t1.qty,t2.skucontrol,t1.st_stockbill_itemsid from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid where t1.st_stockbillid ='"
-                            + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
-                    stockbillitemskurows = dbConnect.runSqlQuery("select t1.*,t2.itemid from st_stockbill_items_sku t1 left join sa_itemsku t2 on t1.sku=t2.sku where t1.st_stockbillid ='"
-                            + st_stockbillid + "' and  t1.siteid='" + siteid + "'");
-                }
-                if (stockid != 0) {
+                if (stockid != 0) {//如果指定了仓库,则使用指定的仓库
                     skustockid = stockid;
                 }
+                //插入序列号
                 InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items_sku");
-                long st_stockbill_items_skuid = createTableID("st_stockbill_items_sku");
-                insertSQL.setUniqueid(st_stockbill_items_skuid);
                 insertSQL.setSiteid(siteid);
                 insertSQL.setValue("stockid", skustockid);
                 insertSQL.setValue("itemid", skuitemid);
                 insertSQL.setValue("sku", FMACHINECODE);
+                RowsMap stockbillitemsrowsMap = stockbillitemsrows.toRowsMap("itemid");
 
 
-                if (!st_stockbill.getString("status").equals("审核")) {
-                    if (st_stockbill_itemsid == 0) {
-                        if (!stockbillitemsrows.toRowsMap("itemid").containsKey(skuitemid)) {
-                            //新建表体
+                if (st_stockbill.getString("status").equals("新建")) {
+                    if (st_stockbill_itemsid == 0) {//没有指定单据表体ID,自动匹配,如果找不到则新增表体行
+                        if (!stockbillitemsrowsMap.containsKey(String.valueOf(skuitemid)) || !stockbillitemsrowsMap.get(String.valueOf(skuitemid)).toRowsMap("stockid").containsKey(String.valueOf(skustockid))) {
+                            //如果序列号所属商品不在单据表体中或仓库不同,则添加
                             InsertSQL insertdetailSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items");
-                            long st_stockbill_itemsidnew = createTableID("st_stockbill_items");
-                            insertdetailSQL.setUniqueid(st_stockbill_itemsidnew);
                             insertdetailSQL.setSiteid(siteid);
                             insertdetailSQL.setValue("rowno", 1);
                             insertdetailSQL.setValue("sa_dispatch_itemsid", 0);
@@ -1287,16 +1249,17 @@ public class stockbill extends Controller {
                             insertdetailSQL.setValue("skucontrol", 1);
                             insertdetailSQL.setValue("st_stockbillid", st_stockbillid);
                             sqllist.add(insertdetailSQL.getSQL());
+
                             insertSQL.setValue("st_stockbillid", st_stockbillid);
-                            insertSQL.setValue("st_stockbill_itemsid", st_stockbill_itemsidnew);
+                            insertSQL.setValue("st_stockbill_itemsid", insertdetailSQL.getUniqueid());
                         } else {
-
-                            if (stockbillitemsrows.toRowsMap("itemid").get(skuitemid).sum("qty").compareTo(BigDecimal.valueOf(stockbillitemskurows.toRowsMap("itemid").get(skuitemid).size())) <= 0) {
-                                BigDecimal newqty = BigDecimal.valueOf(stockbillitemskurows.toRowsMap("itemid").get(skuitemid).size()).subtract(stockbillitemsrows.toRowsMap("itemid").get(skuitemid).sum("qty")).add(BigDecimal.ONE);
-                                sqllist.add("update st_stockbill_items set qty=qty+" + newqty + " where st_stockbill_itemsid =" + stockbillitemsrows.toRowsMap("itemid").get(skuitemid).get(0).getLong("st_stockbill_itemsid"));
+                            long stockbill_itemsid = stockbillitemsrows.toRowsMap("itemid").get(skuitemid).toRowsMap("stockid").get(String.valueOf(skustockid)).get(0).getLong("st_stockbill_itemsid");
+                            if (stockbillitemsrowsMap.get(String.valueOf(skuitemid)).toRowsMap("stockid").get(String.valueOf(skustockid)).sum("qty").compareTo(BigDecimal.valueOf(stockbillitemskurows.toRowsMap("itemid").get(skuitemid).toRowsMap("stockid").get(String.valueOf(skustockid)).size())) <= 0) {
+                                BigDecimal newqty = BigDecimal.valueOf(stockbillitemskurows.toRowsMap("itemid").get(skuitemid).toRowsMap("stockid").get(String.valueOf(skustockid)).size()).subtract(stockbillitemsrows.toRowsMap("itemid").get(skuitemid).toRowsMap("stockid").get(String.valueOf(skustockid)).sum("qty")).add(BigDecimal.ONE);
+                                sqllist.add("update st_stockbill_items set qty=qty+" + newqty + " where st_stockbill_itemsid =" + stockbill_itemsid);
                             }
                             insertSQL.setValue("st_stockbillid", st_stockbillid);
-                            insertSQL.setValue("st_stockbill_itemsid", stockbillitemsrows.toRowsMap("itemid").get(skuitemid).get(0).getLong("st_stockbill_itemsid"));
+                            insertSQL.setValue("st_stockbill_itemsid", stockbill_itemsid);
                         }
                     } else {
                         if (stockbillitemsrows.toRowsMap("st_stockbill_itemsid").get("st_stockbill_itemsid").sum("qty").compareTo(stockbillitemskurows.toRowsMap("st_stockbill_itemsid").get(st_stockbill_itemsid).sum("qty")) <= 0) {
@@ -1308,7 +1271,7 @@ public class stockbill extends Controller {
                     }
                 } else {
                     if (st_stockbill_itemsid == 0) {
-                        if (stockbillitemsrows.toRowsMap("itemid").get(skuitemid).sum("qty").compareTo(stockbillitemskurows.toRowsMap("itemid").get(skuitemid).sum("qty")) == 0) {
+                        if (stockbillitemsrows.toRowsMap("itemid").get(skuitemid).toRowsMap("stockid").get(skustockid).sum("qty").compareTo(stockbillitemskurows.toRowsMap("itemid").get(skuitemid).toRowsMap("stockid").get(skustockid).sum("qty")) == 0) {
                             return getErrReturnObject().setErrMsg("序列号数量已经满足,不可继续添加").toString();
                         } else {
                             insertSQL.setValue("st_stockbillid", st_stockbillid);
@@ -1322,7 +1285,6 @@ public class stockbill extends Controller {
                             insertSQL.setValue("st_stockbill_itemsid", st_stockbill_itemsid);
                         }
                     }
-
                 }
                 sqllist.add(insertSQL.getSQL());
                 if (st_stockbill.getString("status").equals("审核")) {
@@ -1348,7 +1310,10 @@ public class stockbill extends Controller {
     }
 
     @API(title = "扫描数量刷新", apiversion = R.ID2025102215584903.v1.class)
-    @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, stockbillitemssku.class})
+    @CACHEING_CLEAN(apiClass = {
+            stockbill.class,
+            stockbillitems.class,
+            stockbillitemssku.class})
     public String scanqtyrefresh() throws YosException {
         long st_stockbillid = content.getLong("st_stockbillid");
         SQLList sqllist = new SQLList();
@@ -1509,8 +1474,7 @@ public class stockbill extends Controller {
         XSSFCellStyle titleCellStyle2 = ExportExcelSpecial.createTitleCellStyle2(xssfFWorkbook);
         XSSFCellStyle titleCellStyle3 = ExportExcelSpecial.createTitleCellStyle3(xssfFWorkbook);
         XSSFCellStyle titleCellStyle4 = ExportExcelSpecial.createBodyCellStyle4(xssfFWorkbook);
-        ExportExcelSpecial.batchDetail(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, titleCellStyle4,
-                xssfFWorkbook);// 写入标题
+        ExportExcelSpecial.batchDetail(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, titleCellStyle4, xssfFWorkbook);// 写入标题
 
         Rows aa = saveToExcelAttachment(excelFactory);
         String url = "";
@@ -1521,7 +1485,10 @@ public class stockbill extends Controller {
     }
 
     @API(title = "导入销售出库单", apiversion = R.ID2025111309451703.v1.class)
-    @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, stockbillitemssku.class})
+    @CACHEING_CLEAN(apiClass = {
+            stockbill.class,
+            stockbillitems.class,
+            stockbillitemssku.class})
     public String uploadstockbillByExcel() throws YosException {
         SQLList sqlList = new SQLList();
         ExcelFactory e;
@@ -1579,18 +1546,8 @@ public class stockbill extends Controller {
             Rows itemrows = querySQL.query();
             RowsMap itemRowsMap = itemrows.toRowsMap("itemno");
             for (Row row : rows) {
-                if (!(StringUtils.isBlank(row.getString("type"))
-                        && StringUtils.isBlank(row.getString("depno"))
-                        && StringUtils.isBlank(row.getString("agentnum"))
-                        && StringUtils.isBlank(row.getString("remarks"))
-                        && StringUtils.isBlank(row.getString("payamount"))
-                        && StringUtils.isBlank(row.getString("paydiscountamount"))
-                        && StringUtils.isBlank(row.getString("outplace"))
-                        && StringUtils.isBlank(row.getString("rb")))) {
-                    if (StringUtils.isBlank(row.getString("type"))
-                            || StringUtils.isBlank(row.getString("rb"))
-                            || StringUtils.isBlank(row.getString("outplace"))
-                            || StringUtils.isBlank(row.getString("agentnum"))) {
+                if (!(StringUtils.isBlank(row.getString("type")) && StringUtils.isBlank(row.getString("depno")) && StringUtils.isBlank(row.getString("agentnum")) && StringUtils.isBlank(row.getString("remarks")) && StringUtils.isBlank(row.getString("payamount")) && StringUtils.isBlank(row.getString("paydiscountamount")) && StringUtils.isBlank(row.getString("outplace")) && StringUtils.isBlank(row.getString("rb")))) {
+                    if (StringUtils.isBlank(row.getString("type")) || StringUtils.isBlank(row.getString("rb")) || StringUtils.isBlank(row.getString("outplace")) || StringUtils.isBlank(row.getString("agentnum"))) {
                         iserr = true;
                         row.put("msg", "错误信息:类型/红蓝字/发货地/经销商编码不能为空");
                         rowserr.add(row);
@@ -1614,9 +1571,7 @@ public class stockbill extends Controller {
                         rowserr.add(row);
                         continue;
                     }
-                    if (!row.getString("type").equals("销售出库")
-                            && !row.getString("outplace").equals("其他入库")
-                            && !row.getString("outplace").equals("其他出库")) {
+                    if (!row.getString("type").equals("销售出库") && !row.getString("outplace").equals("其他入库") && !row.getString("outplace").equals("其他出库")) {
                         iserr = true;
                         row.put("msg", "错误信息:出入库单类型错误");
                         rowserr.add(row);
@@ -1708,10 +1663,7 @@ public class stockbill extends Controller {
             Row rowresult = new Row();
             int i = 0;
             for (Row row : rowssuc) {
-                if (StringUtils.isNotBlank(row.getString("agentnum"))
-                        && StringUtils.isNotBlank(row.getString("type"))
-                        && StringUtils.isNotBlank(row.getString("rb"))
-                        && StringUtils.isNotBlank(row.getString("outplace"))) {
+                if (StringUtils.isNotBlank(row.getString("agentnum")) && StringUtils.isNotBlank(row.getString("type")) && StringUtils.isNotBlank(row.getString("rb")) && StringUtils.isNotBlank(row.getString("outplace"))) {
                     rowresult.put("iteminfos", rowsdetail);
                     rowsResult.add(rowresult);
                     rowresult = new Row();
@@ -1915,18 +1867,14 @@ public class stockbill extends Controller {
      * @return
      */
     public boolean isinstock(String type, String rb, boolean fischeck) {
-        if (type.equals("其他出库") || type.equals("销售出库")
-                || type.equals("生产领料出库") || type.equals("委外领料出库")
-                || type.equals("返修出库")) {
+        if (type.equals("其他出库") || type.equals("销售出库") || type.equals("生产领料出库") || type.equals("委外领料出库") || type.equals("返修出库")) {
             if ((fischeck && rb.equals("1")) || (!fischeck && rb.equals("0"))) {
                 return false;
             } else {
                 return true;
             }
 
-        } else if (type.equals("其他入库") || type.equals("外购入库")
-                || type.equals("生产入库") || type.equals("委外入库")
-                || type.equals("返修入库")) {
+        } else if (type.equals("其他入库") || type.equals("外购入库") || type.equals("生产入库") || type.equals("委外入库") || type.equals("返修入库")) {
             if ((fischeck && rb.equals("1")) || (!fischeck && rb.equals("0"))) {
                 return true;
             } else {
@@ -2025,11 +1973,7 @@ public class stockbill extends Controller {
     public SQLList updateAccountbalance_freez(long st_stockbillid, boolean addorsub) throws YosException {
         SQLList sqllist = new SQLList();
         /******** 冻结数据 ********/
-        Rows rows = dbConnect.runSqlQuery("select t4.sa_accountbalanceid,t3.sa_orderid,t3.sonum,ROUND(sum(t1.qty*t2.price*ifnull(t2.pricerate,1)*ifnull(t2.rwpricerate,1)), 2) amount from st_stockbill_items t1 \n" +
-                "                   inner join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid\n" +
-                "                  inner join sa_order t3 on t2.sa_orderid=t3.sa_orderid and t2.siteid=t3.siteid\n" +
-                "\t\t\t\t\t\t\t\t\tleft join sa_accountbalance t4 on t4.sa_accountclassid=t3.sa_accountclassid and t4.sys_enterpriseid=t3.sys_enterpriseid and t4.siteid=t3.siteid\n" +
-                "                where t1.st_stockbillid=" + st_stockbillid + " group by t4.sa_accountbalanceid,t3.sa_orderid,t3.sonum");
+        Rows rows = dbConnect.runSqlQuery("select t4.sa_accountbalanceid,t3.sa_orderid,t3.sonum,ROUND(sum(t1.qty*t2.price*ifnull(t2.pricerate,1)*ifnull(t2.rwpricerate,1)), 2) amount from st_stockbill_items t1 \n" + "                   inner join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid\n" + "                  inner join sa_order t3 on t2.sa_orderid=t3.sa_orderid and t2.siteid=t3.siteid\n" + "\t\t\t\t\t\t\t\t\tleft join sa_accountbalance t4 on t4.sa_accountclassid=t3.sa_accountclassid and t4.sys_enterpriseid=t3.sys_enterpriseid and t4.siteid=t3.siteid\n" + "                where t1.st_stockbillid=" + st_stockbillid + " group by t4.sa_accountbalanceid,t3.sa_orderid,t3.sonum");
         if (addorsub) {
             for (Row row : rows) {
                 String sonum = row.getString("sonum");
@@ -2098,8 +2042,7 @@ public class stockbill extends Controller {
         }
     }
 
-    public XSSFSheet addSheet(ExcelFactory excelFactory, String sheetname, Rows datarows,
-                              HashMap<String, String> titlemap) {
+    public XSSFSheet addSheet(ExcelFactory excelFactory, String sheetname, Rows datarows, HashMap<String, String> titlemap) {
         ArrayList<String> keylist = datarows.getFieldList();
         XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet(sheetname);
         XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();