Jelajahi Sumber

调拨单及其他表字段更新

hu 10 bulan lalu
induk
melakukan
ff4720d155
20 mengubah file dengan 1142 tambahan dan 29 penghapusan
  1. 75 0
      src/custom/beans/invbal/Invbal.java
  2. 1 1
      src/custom/beans/invbal/SQL/即时库存新增.sql
  3. 1 1
      src/custom/beans/invbal/SQL/即时库存更新.sql
  4. 60 0
      src/custom/restcontroller/R.java
  5. 2 2
      src/custom/restcontroller/sale/creditbill/SQL/信用额度调整单表体新增.sql
  6. 1 0
      src/custom/restcontroller/sale/creditbill/SQL/信用额度调整单表体查询.sql
  7. 1 0
      src/custom/restcontroller/sale/creditbill/creditbilldetail.java
  8. 2 0
      src/custom/restcontroller/webmanage/sale/dbstockbill/SQL/即时库存新增.sql
  9. 6 0
      src/custom/restcontroller/webmanage/sale/dbstockbill/SQL/即时库存更新.sql
  10. 558 0
      src/custom/restcontroller/webmanage/sale/dbstockbill/dbstockbill.java
  11. 218 0
      src/custom/restcontroller/webmanage/sale/dbstockbill/dbstockbilldetail.java
  12. 167 0
      src/custom/restcontroller/webmanage/sale/dbstockbill/dbstockbilldetailsku.java
  13. 33 19
      src/custom/restcontroller/webmanage/sale/order/OrderItems.java
  14. 3 1
      src/custom/restcontroller/webmanage/sale/order/OrderItemsHelper.java
  15. 1 1
      src/custom/restcontroller/webmanage/sale/stockbill/SQL/即时库存新增.sql
  16. 4 1
      src/custom/restcontroller/webmanage/sale/stockbill/stockbill.java
  17. 2 2
      src/custom/restcontroller/webmanage/sale/toolscode/SQL/商品序列号档案新增.sql
  18. 2 1
      src/custom/restcontroller/webmanage/sale/toolscode/SQL/商品序列号档案更新.sql
  19. 1 0
      src/custom/restcontroller/webmanage/sale/toolscode/SQL/商品序列号档案详情查询.sql
  20. 4 0
      src/custom/restcontroller/webmanage/sale/toolscode/toolscode.java

+ 75 - 0
src/custom/beans/invbal/Invbal.java

@@ -268,4 +268,79 @@ public class Invbal {
             }
         }
     }
+
+
+    public static  ArrayList<String> updateIcinvbal(Controller controller,boolean isinstock, Long st_stockbillid) throws YosException {
+        ArrayList<String> sqlList =new ArrayList();
+        Rows icstockbilldetail =controller.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='" + controller.siteid + "'");// 出入库表体
+        ArrayList<Long> itemids = new ArrayList<Long>();
+        itemids = icstockbilldetail.toArrayList("itemid",new ArrayList<>());
+        itemids.add((long) 0);
+        int i = 0;
+        String sql="select * from st_invbal where itemid in"+itemids;
+        sql = sql.replace("[", "(").replace("]", ")");
+        Rows invbals =  controller.dbConnect.runSqlQuery(sql);
+        RowsMap invbalsRowsMap=invbals.toRowsMap("itemid");
+        for(Row row : icstockbilldetail){
+            String itemid = row.getString("itemid");
+            //String batchno = row.getString("batchno");
+            //String fdcspno = row.getString("fdcspno");
+            String stockid = row.getString("stockid");
+
+//             if (type == 1 && !getSysVars().getBoolean("FISBATCHFORXC")) {
+//                 fdcspno = "**********";
+//                 fbatchno = "**********";
+//                 fstockno = getPaoSet("TDEPARTMENT").getPao(0)
+//                         .getPaoSet("TSTOCKXC").getPao(0).getString("fstockno");
+//                 icinvbal = detailpao.getPaoSet("$icinvbal", "icinvbal",
+//                         "fitemno='" + fitemno + "' and fstockno='" + fstockno
+//                                 + "' and fdcspno='" + fdcspno
+//                                 + "' and fbatchno='" + fbatchno + "'");
+//             } else if (type == 2 && !getSysVars().getBoolean("FISBATCHFORXC")) {
+//                 fdcspno = "**********";
+//                 fbatchno = "**********";
+//                 fstockno = getPaoSet("TSUPPLIER").getPao(0)
+//                         .getPaoSet("TSTOCKXC").getPao(0).getString("fstockno");
+//                 icinvbal = detailpao.getPaoSet("$icinvbal", "icinvbal",
+//                         "fitemno='" + fitemno + "' and fstockno='" + fstockno
+//                                 + "' and fdcspno='" + fdcspno
+//                                 + "' and fbatchno='" + fbatchno + "'");
+//             }
+            BigDecimal qty = isinstock ? row.getBigDecimal("qty") : row.getBigDecimal("qty").negate();
+            if(!invbalsRowsMap.containsKey(itemid)){
+                SQLFactory sqlFactory = new SQLFactory(new Invbal(), "即时库存新增");
+                sqlFactory.addParameter("st_invbalid", controller.createTableID("st_invbal"));
+                sqlFactory.addParameter("qty", qty);
+                sqlFactory.addParameter("itemid", itemid);
+                sqlFactory.addParameter("stockid", stockid);
+                sqlFactory.addParameter("siteid",controller.siteid);
+                sqlFactory.addParameter("userid", controller.userid);
+                sqlFactory.addParameter("username", controller.username);
+                sqlList.add(sqlFactory.getSQL());
+            }else{
+                if(invbalsRowsMap.get(itemid).toRowsMap("stockid").containsKey(stockid)){
+                    SQLFactory sqlFactory = new SQLFactory(new Invbal(), "即时库存更新");
+                    sqlFactory.addParameter("qty", invbalsRowsMap.get(itemid).toRowsMap("stockid").get(stockid).get(0).getBigDecimal("qty").add(qty));
+                    sqlFactory.addParameter("itemid", itemid);
+                    sqlFactory.addParameter("stockid", stockid);
+                    sqlFactory.addParameter("siteid",controller.siteid);
+                    sqlFactory.addParameter("userid", controller.userid);
+                    sqlFactory.addParameter("username", controller.username);
+                    sqlList.add(sqlFactory.getSQL());
+                }else{
+                    SQLFactory sqlFactory = new SQLFactory(new Invbal(), "即时库存新增");
+                    sqlFactory.addParameter("st_invbalid", controller.createTableID("st_invbal"));
+                    sqlFactory.addParameter("qty", qty);
+                    sqlFactory.addParameter("itemid", itemid);
+                    sqlFactory.addParameter("stockid", stockid);
+                    sqlFactory.addParameter("siteid",controller.siteid);
+                    sqlFactory.addParameter("userid", controller.userid);
+                    sqlFactory.addParameter("username", controller.username);
+                    sqlList.add(sqlFactory.getSQL());
+                }
+            }
+        }
+        return sqlList;
+    }
 }

+ 1 - 1
src/custom/beans/invbal/SQL/即时库存新增.sql

@@ -1,2 +1,2 @@
 insert into st_invbal (siteid, st_invbalid,changeuserid,changeby, changedate,stockid,itemid,qty)
-values ($siteid$, $st_invbalid$,$userid$, $username$, CURRENT_TIME, 0,$itemid$,$qty$);
+values ($siteid$, $st_invbalid$,$userid$, $username$, CURRENT_TIME,$stockid$,$itemid$,$qty$);

+ 1 - 1
src/custom/beans/invbal/SQL/即时库存更新.sql

@@ -3,4 +3,4 @@ update st_invbal set
       changeuserid=$userid$,
       changedate = CURRENT_TIME,
       changeby = $username$
-where itemid=$itemid$ and siteid=$siteid$
+where itemid=$itemid$ and siteid=$siteid$ and stockid=$stockid$

+ 60 - 0
src/custom/restcontroller/R.java

@@ -5852,6 +5852,66 @@ public class R {
         public static class v1 {
         }
     }
+
+    public static class ID2025061914261403 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025061914271503 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025061914273303 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025061914455503 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025061914484803 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025061914490803 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025061915091103 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025061915092903 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025061915094203 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025061915095203 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025061915095803 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025061915102603 {
+        public static class v1 {
+        }
+    }
 }
 
 

+ 2 - 2
src/custom/restcontroller/sale/creditbill/SQL/信用额度调整单表体新增.sql

@@ -1,2 +1,2 @@
-insert into sa_creditbilldetail (siteid, sa_creditbilldetailid, sa_creditbillid,sys_enterpriseid,sa_accountclassid, creditquota)
-values ($siteid$, $sa_creditbilldetailid$, $sa_creditbillid$,$sys_enterpriseid$, $sa_accountclassid$, $creditquota$);
+insert into sa_creditbilldetail (siteid, sa_creditbilldetailid, sa_creditbillid,sys_enterpriseid,sa_accountclassid, creditquota,oldcreditquota)
+values ($siteid$, $sa_creditbilldetailid$, $sa_creditbillid$,$sys_enterpriseid$, $sa_accountclassid$, $creditquota$,$oldcreditquota$);

+ 1 - 0
src/custom/restcontroller/sale/creditbill/SQL/信用额度调整单表体查询.sql

@@ -4,6 +4,7 @@ SELECT
 	t1.sys_enterpriseid,
 	t1.sa_accountclassid,
 	t1.creditquota,
+    t1.oldcreditquota,
 	t3.accountno,
 	t3.accountname,
 	t2.enterprisename,

+ 1 - 0
src/custom/restcontroller/sale/creditbill/creditbilldetail.java

@@ -52,6 +52,7 @@ public class creditbilldetail extends Controller {
                 saleFactory.addParameter("sys_enterpriseid", enterpriseinfo.getLong("sys_enterpriseid"));
                 saleFactory.addParameter("sa_accountclassid", enterpriseinfo.getLong("sa_accountclassid"));
                 saleFactory.addParameter("creditquota", enterpriseinfo.getBigDecimal("creditquota"));
+                saleFactory.addParameter("oldcreditquota", enterpriseinfo.getBigDecimal("oldcreditquota"));
                 saleFactory.addParameter("remarks", enterpriseinfo.getStringValue("remarks"));
                 sqlList.add(saleFactory.getSQL());
 

+ 2 - 0
src/custom/restcontroller/webmanage/sale/dbstockbill/SQL/即时库存新增.sql

@@ -0,0 +1,2 @@
+insert into st_invbal (siteid, st_invbalid,changeuserid,changeby, changedate,stockid,itemid,qty)
+values ($siteid$, $st_invbalid$,$userid$, $username$, CURRENT_TIME, $stockid$,$itemid$,$qty$);

+ 6 - 0
src/custom/restcontroller/webmanage/sale/dbstockbill/SQL/即时库存更新.sql

@@ -0,0 +1,6 @@
+update st_invbal set 
+      qty=$qty$,
+      changeuserid=$userid$,
+      changedate = CURRENT_TIME,
+      changeby = $username$
+where itemid=$itemid$ and siteid=$siteid$ and stockid=$stockid$

+ 558 - 0
src/custom/restcontroller/webmanage/sale/dbstockbill/dbstockbill.java

@@ -0,0 +1,558 @@
+package restcontroller.webmanage.sale.dbstockbill;
+
+import beans.data.BatchDeleteErr;
+import beans.datacontrllog.DataContrlLog;
+import beans.invbal.Invbal;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import common.Controller;
+import common.YosException;
+import common.annotation.API;
+import common.annotation.CACHEING;
+import common.annotation.CACHEING_CLEAN;
+import common.data.*;
+import restcontroller.R;
+import restcontroller.webmanage.sale.stockbill.stockbill;
+import restcontroller.webmanage.sale.stockbill.stockbillitems;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+
+public class dbstockbill extends Controller {
+    public dbstockbill(JSONObject content) throws YosException {
+        super(content);
+    }
+
+    @API(title = "新增更新调拨单", apiversion = R.ID2025061914261403.v1.class)
+    @CACHEING_CLEAN(apiClass = {dbstockbill.class,dbstockbilldetail.class})
+    public String insertormodify_dbstockbill() throws YosException {
+        ArrayList<String> sqlList = new ArrayList<>();
+        // 表名
+
+        String tableName = "st_dbstockbill";
+        Long st_dbstockbillid = content.getLong("st_dbstockbillid");
+        Long departmentid = content.getLongValue("departmentid");
+        boolean isnotimmediately = content.getBooleanValue("isnotimmediately");
+        String remarks = content.getStringValue("remarks");
+        String billdate = content.getStringValue("billdate");
+        long instockid = content.getLong("instockid");
+        long outstockid = content.getLong("outstockid");
+        if (st_dbstockbillid <= 0) {
+
+            st_dbstockbillid = createTableID(tableName);
+            InsertSQL insertSQL = SQLFactory.createInsertSQL(this, tableName);
+            insertSQL.setUniqueid(st_dbstockbillid);
+            insertSQL.setSiteid(siteid);
+            insertSQL.setValue("isnotimmediately", isnotimmediately);
+            insertSQL.setValue("departmentid", departmentid);
+            insertSQL.setValue("remarks", remarks);
+            insertSQL.setValue("billdate", billdate);
+            insertSQL.setValue("billno", createBillCode("stockbill"));
+            insertSQL.setValue("instockid", instockid);
+            insertSQL.setValue("outstockid", outstockid);
+
+            insertSQL.setValue("createby", username);
+            insertSQL.setDateValue("createdate");
+            insertSQL.setValue("changeby", username);
+            insertSQL.setDateValue("changedate");
+            insertSQL.setValue("status", "新建");
+            sqlList.add(insertSQL.getSQL());
+
+            sqlList.add(DataContrlLog.createLog(this, "st_dbstockbill", st_dbstockbillid, "新增", "调拨单新增成功").getSQL());
+        } else {
+            Rows rows = dbConnect.runSqlQuery(
+                    "SELECT status from st_dbstockbill WHERE st_dbstockbillid = "
+                            + st_dbstockbillid);
+            if (rows.isNotEmpty()) {
+                if (rows.get(0).getString("status").equals("新建")) {
+
+                    UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, tableName);
+                    updateSQL.setUniqueid(st_dbstockbillid);
+                    updateSQL.setSiteid(siteid);
+                    updateSQL.setValue("departmentid", departmentid);
+                    updateSQL.setValue("remarks", remarks);
+                    updateSQL.setValue("billdate", billdate);
+//                    updateSQL.setValue("instockid", instockid);
+//                    updateSQL.setValue("outstockid", outstockid);
+                    updateSQL.setValue("isnotimmediately", isnotimmediately);
+
+                    updateSQL.setValue("changeby", username);
+                    updateSQL.setDateValue("changedate");
+                    sqlList.add(updateSQL.getSQL());
+
+                    sqlList.add(DataContrlLog.createLog(this, "st_dbstockbill", st_dbstockbillid, "更新", "调拨单更新成功").getSQL());
+                } else {
+                    return getErrReturnObject().setErrMsg("非新建状态下无法编辑").toString();
+                }
+
+            } else {
+                return getErrReturnObject().setErrMsg("该调拨单不存在").toString();
+            }
+
+        }
+        dbConnect.runSqlUpdate(sqlList);
+        content.put("st_dbstockbillid", st_dbstockbillid);
+
+        return queryDbStockbillMain();
+    }
+
+    @API(title = "调拨单详情", apiversion = R.ID2025061914271503.v1.class)
+    @CACHEING
+    public String queryDbStockbillMain() throws YosException {
+        long st_dbstockbillid = content.getLong("st_dbstockbillid");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_dbstockbill","*");
+        querySQL.setTableAlias("t1");
+        querySQL.addJoinTable(JOINTYPE.left, "st_stock", "t2", "t1.instockid = t2.stockid AND t1.siteid = t2.siteid");
+        querySQL.addJoinTable(JOINTYPE.left, "st_stock", "t3", "t1.outstockid = t3.stockid AND t1.siteid = t3.siteid");
+        querySQL.addJoinTable(JOINTYPE.left, "sys_department", "t4", "t1.departmentid=t4.departmentid and t1.siteid = t4.siteid","depname");
+
+        querySQL.addQueryFields("outstockno", "t3.stockno");
+        querySQL.addQueryFields("outstockname", "t3.stockname");
+        querySQL.addQueryFields("instockno", "t2.stockno");
+        querySQL.addQueryFields("instockname", "t2.stockname");
+        querySQL.setWhere("t1.siteid", siteid);
+        querySQL.setWhere("t1.st_dbstockbillid",st_dbstockbillid);
+        Rows rows = querySQL.query();
+        Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
+        return getSucReturnObject().setData(row).toString();
+    }
+
+    @API(title = "调拨单列表", apiversion = R.ID2025061914273303.v1.class)
+    @CACHEING
+    public String queryDbStockbillList() throws YosException {
+        StringBuffer where = new StringBuffer(" 1=1 ");
+        if (content.containsKey("where")) {
+            JSONObject whereObject = content.getJSONObject("where");
+            if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
+                where.append(" and(");
+                where.append("t1.billno like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append("or t2.stockname like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append("or t2.stockno like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append("or t3.stockname like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append("or t3.stockno like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append("or t4.depname like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append(")");
+            }
+            if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
+                where.append(" and t1.status ='").append(whereObject.getString("status")).append("' ");
+            }
+            if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
+                where.append(" and DATE_FORMAT(t1.billdate, '%Y-%m-%d') >='").append(whereObject.getString("begindate")).append("' ");
+            }
+            if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
+                where.append(" and DATE_FORMAT(t1.billdate, '%Y-%m-%d') <='").append(whereObject.getString("enddate")).append("' ");
+            }
+        }
+//        SQLFactory sqlFactory = new SQLFactory(this, "出入库单列表查询", pageSize, pageNumber, pageSorting);
+//        sqlFactory.addParameter("siteid", siteid);
+//        sqlFactory.addParameter_SQL("where", where);
+//        Rows rows = dbConnect.runSqlQuery(sqlFactory);
+        QuerySQL querySQL = queryStockbillList(where.toString());
+        querySQL.setPage(pageSize, pageNumber);
+        querySQL.setOrderBy(pageSorting);
+        Rows rows = querySQL.query();
+
+        return getSucReturnObject().setData(rows).toString();
+    }
+
+    @API(title = "删除", apiversion = R.ID2025061914455503.v1.class)
+    @CACHEING_CLEAN(apiClass = {dbstockbill.class,dbstockbilldetail.class})
+    public String delete() throws YosException {
+        JSONArray st_dbstockbillids = content.getJSONArray("st_dbstockbillids");
+        BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, st_dbstockbillids.size());
+        for (Object o : st_dbstockbillids) {
+            long st_dbstockbillid = Long.parseLong(o.toString());
+            Rows RowsStatus = dbConnect.runSqlQuery("select st_dbstockbillid,status from st_dbstockbill where siteid='"
+                    + siteid + "' and st_dbstockbillid='" + st_dbstockbillid + "'");
+
+            if (RowsStatus.isNotEmpty()) {
+                if (!RowsStatus.get(0).getString("status").equals("新建")) {
+                    batchDeleteErr.addErr(st_dbstockbillid, "非新建状态的调拨单无法删除");
+                    continue;
+                }
+            }
+
+            dbConnect.runSqlUpdate(
+                    "delete from st_dbstockbill where siteid='" + siteid + "' and st_dbstockbillid=" + st_dbstockbillid);
+        }
+        return batchDeleteErr.getReturnObject().toString();
+    }
+
+    @API(title = "审核", apiversion = R.ID2025061914484803.v1.class)
+    @CACHEING_CLEAN(apiClass = {dbstockbill.class,dbstockbilldetail.class})
+    public String check() throws YosException {
+        long st_dbstockbillid = content.getLong("st_dbstockbillid");
+        Rows dbstockbillrows =dbConnect.runSqlQuery("select * from st_dbstockbill where st_dbstockbillid='"+st_dbstockbillid+"' and siteid='"+siteid+"'");
+        Rows dbstockbilldetailrows =dbConnect.runSqlQuery("select t1.*,t2.itemname,t2.itemno,t2.model from st_dbstockbilldetail t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.st_dbstockbillid='"+st_dbstockbillid+"' and t1.siteid='"+siteid+"'");
+        Rows dbstockbilldetailskurows =dbConnect.runSqlQuery("select st_dbstockbilldetailid,count(1) qty from st_dbstockbilldetailsku where st_dbstockbillid='"+st_dbstockbillid+"' and siteid='"+siteid+"' group by st_dbstockbilldetailid");
+        Rows dbstockbilldetailskus =dbConnect.runSqlQuery("select st_dbstockbilldetailid,sku,outstockid from st_dbstockbilldetailsku where st_dbstockbillid='"+st_dbstockbillid+"' and siteid='"+siteid+"'");
+        RowsMap dbstockbilldetailskurowsMap =dbstockbilldetailskurows.toRowsMap("st_dbstockbilldetailid");
+        RowsMap dbstockbilldetailrowsMap =dbstockbilldetailrows.toRowsMap("st_dbstockbilldetailid");
+        RowsMap dbstockbilldetailskusRowsMap=dbstockbilldetailskus.toRowsMap("st_dbstockbilldetailid");
+        for(Row row :dbstockbilldetailrows){
+            if(row.getBigDecimal("qty").compareTo(BigDecimal.ZERO)<=0){
+                return getErrReturnObject().setErrMsg("调拨数量不能小于等于0").toString();
+            }
+        }
+
+        for(Row row :dbstockbilldetailrows){
+            if(row.getLong("instockid")!=dbstockbillrows.get(0).getLong("instockid")){
+                return getErrReturnObject().setErrMsg("表体调入仓库必须与表头调入仓库一致").toString();
+            }
+            if(row.getLong("outstockid")!=dbstockbillrows.get(0).getLong("outstockid")){
+                return getErrReturnObject().setErrMsg("表体调出仓库必须与表头调出仓库一致").toString();
+            }
+            if(row.getLong("instockid")==row.getLong("outstockid")){
+                return getErrReturnObject().setErrMsg("调入仓库与调出仓库一致,不可审核").toString();
+            }
+            if(dbstockbilldetailskurowsMap.containsKey(row.getString("st_dbstockbilldetailid"))){
+                if(row.getInteger("qty")!=dbstockbilldetailskurowsMap.get(row.getString("st_dbstockbilldetailid")).get(0).getInteger("qty")){
+                    return getErrReturnObject().setErrMsg("货品"+row.getString("itemname")+"调拨数量和序列号数量不符").toString();
+                }
+            }else{
+                return getErrReturnObject().setErrMsg("货品"+row.getString("itemname")+"序列号不存在").toString();
+            }
+
+        }
+
+        /******************* 检查序列号是否有效 ********************/
+        Rows skurows =dbConnect.runSqlQuery("select * from sa_itemsku where siteid='"+siteid+"'");
+        RowsMap skurowsmap =skurows.toRowsMap("sku");
+        for(Row row :dbstockbilldetailskus){
+            if(!skurowsmap.containsKey(row.getString("sku"))){
+                return getErrReturnObject().setErrMsg("序列号" + row.getString("sku")+"不存在于序列号表中").toString();
+            }
+            if(skurowsmap.get(row.getString("sku")).get(0).getLong("stockid")<=0){
+                return getErrReturnObject().setErrMsg("序列号" + row.getString("sku") + "不在仓库中,无法进行调拨").toString();
+            }
+            if(skurowsmap.get(row.getString("sku")).get(0).getLong("stockid")!=row.getLong("outstockid")){
+                return getErrReturnObject().setErrMsg("序列号" + row.getString("sku")+ "所在仓库已变动").toString();
+            }
+            if(!dbstockbilldetailrowsMap.containsKey(row.getString("st_dbstockbilldetailid"))){
+                return getErrReturnObject().setErrMsg("关联表体不存在").toString();
+            }
+            if(dbstockbilldetailrowsMap.get(row.getString("st_dbstockbilldetailid")).get(0).getLong("outstockid")
+                    !=row.getLong("outstockid")){
+                return getErrReturnObject().setErrMsg("货品" + dbstockbilldetailrowsMap.get(row.getString("st_dbstockbilldetailid")).get(0).getString("itemno") + "的调出仓库与其序列号" +  row.getString("sku") + "所在仓库不一致").toString();
+            }
+        }
+        Rows stockbill=dbConnect.runSqlQuery("select * from st_stockbill where sourceid="+st_dbstockbillid +" and sourceobject='st_dbstockbill' and siteid='"+siteid+"'");
+        if (!stockbill.isEmpty()) {
+            return getErrReturnObject().setErrMsg("该调拨单存在对应的出入库单单据,不可审核").toString();
+        }
+        ArrayList<String> sqllist=new ArrayList<>();
+        InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill");
+        long st_stockbillid =  createTableID("st_stockbill");
+        insertSQL.setUniqueid(st_stockbillid);
+        insertSQL.setSiteid(siteid);
+        insertSQL.setValue("billno", createBillCode("stockbill"));
+        insertSQL.setValue("type", "其他出库");
+        insertSQL.setValue("typemx", "调拨出库");
+        insertSQL.setValue("sys_enterpriseid",0);
+        insertSQL.setValue("rb", 1);
+        insertSQL.setValue("sourceobject", "st_dbstockbill");
+        insertSQL.setValue("sourceid", st_dbstockbillid);
+        insertSQL.setValue("stockid", dbstockbillrows.get(0).getLong("outstockid"));
+        insertSQL.setValue("remarks", "调拨出库"+dbstockbillrows.get(0).getString("remarks"));
+        insertSQL.setValue("status", "审核");
+        insertSQL.setValue("createby",username);
+        insertSQL.setDateValue("createdate");
+        insertSQL.setValue("checkby",username);
+        insertSQL.setDateValue("checkdate");
+        insertSQL.setDateValue("billdate");
+        sqllist.add(insertSQL.getSQL());
+
+        int i=1;
+        for(Row row :dbstockbilldetailrows){
+            insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items");
+            long st_stockbill_itemsid =  createTableID("st_stockbill_items");
+            insertSQL.setUniqueid(st_stockbill_itemsid);
+            insertSQL.setSiteid(siteid);
+            insertSQL.setValue("rowno",i);
+            insertSQL.setValue("sa_dispatch_itemsid",0);
+            insertSQL.setValue("sourceobject", "st_dbstockbilldetail");
+            insertSQL.setValue("sourceid", row.getLong("st_dbstockbilldetailid"));
+            insertSQL.setValue("stockid", row.getLong("outstockid"));
+            insertSQL.setValue("itemid",row.getLong("itemid"));
+            insertSQL.setValue("itemno",row.getString("itemno"));
+            insertSQL.setValue("itemname",row.getString("itemname"));
+            insertSQL.setValue("model",row.getString("model"));
+            insertSQL.setValue("qty",row.getBigDecimal("qty"));
+            insertSQL.setValue("st_stockbillid",st_stockbillid);
+            i++;
+            sqllist.add(insertSQL.getSQL());
+            for(Row rowdetail:dbstockbilldetailskusRowsMap.get(row.getString("st_dbstockbilldetailid"))){
+                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", rowdetail.getLong("outstockid"));
+                insertSQL.setValue("itemid",row.getLong("itemid"));
+                insertSQL.setValue("sku",rowdetail.getString("sku"));
+                insertSQL.setValue("st_stockbillid",st_stockbillid);
+                insertSQL.setValue("st_stockbill_itemsid",st_stockbill_itemsid);
+                sqllist.add(insertSQL.getSQL());
+            }
+        }
+        sqllist.addAll(updateIcinvbal(true,false,st_dbstockbillid));
+        if(!dbstockbillrows.get(0).getBoolean("isnotimmediately")){
+             insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill");
+             st_stockbillid =  createTableID("st_stockbill");
+            insertSQL.setUniqueid(st_stockbillid);
+            insertSQL.setSiteid(siteid);
+            insertSQL.setValue("billno", createBillCode("stockbill"));
+            insertSQL.setValue("type", "其他入库");
+            insertSQL.setValue("typemx", "调拨入库");
+            insertSQL.setValue("rb", 1);
+            insertSQL.setValue("sys_enterpriseid",0);
+            insertSQL.setValue("sourceobject", "st_dbstockbill");
+            insertSQL.setValue("sourceid", st_dbstockbillid);
+            insertSQL.setValue("stockid", dbstockbillrows.get(0).getLong("instockid"));
+            insertSQL.setValue("remarks", "调拨入库");
+            insertSQL.setValue("status", "审核");
+            insertSQL.setValue("createby",username);
+            insertSQL.setDateValue("createdate");
+            insertSQL.setValue("checkby",username);
+            insertSQL.setDateValue("checkdate");
+            insertSQL.setDateValue("billdate");
+            sqllist.add(insertSQL.getSQL());
+            int j=1;
+            for(Row row :dbstockbilldetailrows){
+                insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items");
+                long st_stockbill_itemsid =  createTableID("st_stockbill_items");
+                insertSQL.setUniqueid(st_stockbill_itemsid);
+                insertSQL.setValue("rowno",j);
+                insertSQL.setSiteid(siteid);
+                insertSQL.setValue("sa_dispatch_itemsid",0);
+                insertSQL.setValue("sourceobject", "st_dbstockbilldetail");
+                insertSQL.setValue("sourceid", row.getLong("st_dbstockbilldetailid"));
+                insertSQL.setValue("stockid", row.getLong("instockid"));
+                insertSQL.setValue("itemid",row.getLong("itemid"));
+                insertSQL.setValue("itemno",row.getString("itemno"));
+                insertSQL.setValue("itemname",row.getString("itemname"));
+                insertSQL.setValue("model",row.getString("model"));
+                insertSQL.setValue("qty",row.getBigDecimal("qty"));
+                insertSQL.setValue("st_stockbillid",st_stockbillid);
+                sqllist.add(insertSQL.getSQL());
+                j++;
+                for(Row rowdetail:dbstockbilldetailskusRowsMap.get(row.getString("st_dbstockbilldetailid"))){
+                    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", row.getLong("instockid"));
+                    insertSQL.setValue("itemid",row.getLong("itemid"));
+                    insertSQL.setValue("sku",rowdetail.getString("sku"));
+                    insertSQL.setValue("st_stockbillid",st_stockbillid);
+                    insertSQL.setValue("st_stockbill_itemsid",st_stockbill_itemsid);
+                    sqllist.add(insertSQL.getSQL());
+                }
+            }
+            sqllist.addAll(updateIcinvbal(true,true,st_dbstockbillid));
+            sqllist.addAll(updateUnInQty(true,dbstockbilldetailrows));
+
+        }
+        sqllist.addAll(updatesku(dbstockbillrows.get(0).getLong("instockid"),dbstockbillrows.get(0).getLong("outstockid"),dbstockbilldetailskus,true,!dbstockbillrows.get(0).getBoolean("isnotimmediately")));
+        UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "st_dbstockbill");
+        updateSQL.setUniqueid(st_dbstockbillid);
+        updateSQL.setSiteid(siteid);
+        updateSQL.setValue("status", "审核");
+        updateSQL.setValue("checkby", username);
+        updateSQL.setDateValue("checkdate");
+        sqllist.add(updateSQL.getSQL());
+
+        dbConnect.runSqlUpdate(sqllist);
+
+        return getSucReturnObject().toString();
+    }
+
+    @API(title = "反审核", apiversion = R.ID2025061914490803.v1.class)
+    @CACHEING_CLEAN(apiClass = {dbstockbill.class,dbstockbilldetail.class})
+    public String uncheck() throws YosException {
+        long st_dbstockbillid = content.getLong("st_dbstockbillid");
+        Rows dbstockbillrows =dbConnect.runSqlQuery("select * from st_dbstockbill where st_dbstockbillid='"+st_dbstockbillid+"' and siteid='"+siteid+"'");
+        Rows dbstockbilldetailrows =dbConnect.runSqlQuery("select t1.*,t2.itemname,t2.itemno,t2.model from st_dbstockbilldetail t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.st_dbstockbillid='"+st_dbstockbillid+"' and t1.siteid='"+siteid+"'");
+        Rows dbstockbilldetailskus =dbConnect.runSqlQuery("select st_dbstockbilldetailid,sku,outstockid from st_dbstockbilldetailsku where st_dbstockbillid='"+st_dbstockbillid+"' and siteid='"+siteid+"'");
+        RowsMap dbstockbilldetailrowsMap =dbstockbilldetailrows.toRowsMap("st_dbstockbilldetailid");
+
+        /******************* 检查序列号是否有效 ********************/
+        Rows skurows =dbConnect.runSqlQuery("select * from sa_itemsku where siteid='"+siteid+"'");
+        RowsMap skurowsmap =skurows.toRowsMap("sku");
+        for(Row row :dbstockbilldetailskus){
+            if(!skurowsmap.containsKey(row.getString("sku"))){
+                return getErrReturnObject().setErrMsg("序列号" + row.getString("sku")+"不存在于序列号表中").toString();
+            }
+
+//            if(skurowsmap.get(row.getString("sku")).get(0).getLong("stockid")!=row.getLong("instockid")){
+//                return getErrReturnObject().setErrMsg("序列号" + row.getString("sku")+ "所在仓库已变动").toString();
+//            }
+            if(!dbstockbilldetailrowsMap.containsKey(row.getString("st_dbstockbilldetailid"))){
+                return getErrReturnObject().setErrMsg("关联表体不存在").toString();
+            }
+            if(dbstockbilldetailrowsMap.get(row.getString("st_dbstockbilldetailid")).get(0).getLong("instockid")
+                    !=skurowsmap.get(row.getString("sku")).get(0).getLong("stockid")){
+                return getErrReturnObject().setErrMsg("序列号" + row.getString("sku")+ "所在仓库已变动").toString();
+            }
+        }
+
+        Rows stockbill=dbConnect.runSqlQuery("select * from st_stockbill where sourceid="+st_dbstockbillid +" and sourceobject='st_dbstockbill' and siteid='"+siteid+"'");
+        RowsMap stockbillrowmap =stockbill.toRowsMap("typemx");
+        if (!stockbillrowmap.containsKey("调拨出库")) {
+            return getErrReturnObject().setErrMsg("找不到该调拨单对应的出库单,不可反审核").toString();
+        }
+        if (!stockbillrowmap.containsKey("调拨入库")) {
+            return getErrReturnObject().setErrMsg("找不到该调拨单对应的入库单,不可反审核").toString();
+        }
+        ArrayList<String> sqllist=new ArrayList<>();
+        if (!dbstockbillrows.get(0).getBoolean("isnotimmediately")) {// 如果不需要收货确认,则反审核原入库单,并删除
+            sqllist.addAll(updateIcinvbal(false, false,st_dbstockbillid));
+        }
+
+        sqllist.addAll(updateIcinvbal(false,true,st_dbstockbillid));
+        sqllist.addAll(updateUnInQty(false,dbstockbilldetailrows));
+        sqllist.addAll(updatesku(dbstockbillrows.get(0).getLong("instockid"),dbstockbillrows.get(0).getLong("outstockid"),dbstockbilldetailskus,false,true));
+        Rows glstockbillRows = dbConnect.runSqlQuery("select st_stockbillid from st_stockbill where sourceid="+st_dbstockbillid+" and sourceobject='st_dbstockbill' and siteid='"+siteid+"'");
+        for(Row row :glstockbillRows){
+            sqllist.add("delete from st_stockbill where siteid='"+siteid+"' and st_stockbillid="+row.getLong("st_stockbillid"));
+            sqllist.add("delete from st_stockbill_items where siteid='"+siteid+"' and st_stockbillid="+row.getLong("st_stockbillid"));
+            sqllist.add("delete from st_stockbill_items_sku where siteid='"+siteid+"' and st_stockbillid="+row.getLong("st_stockbillid"));
+        }
+
+        UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "st_dbstockbill");
+        updateSQL.setUniqueid(st_dbstockbillid);
+        updateSQL.setSiteid(siteid);
+        updateSQL.setValue("status", "新建");
+        updateSQL.setValue("checkby", "");
+        updateSQL.setValue("checkdate","null");
+        sqllist.add(updateSQL.getSQL());
+
+        dbConnect.runSqlUpdate(sqllist);
+        return getSucReturnObject().toString();
+    }
+
+
+    //查询调拨单列表
+    public QuerySQL queryStockbillList(String where) throws YosException {
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_dbstockbill","*");
+        querySQL.setTableAlias("t1");
+        querySQL.addJoinTable(JOINTYPE.left, "st_stock", "t2", "t1.instockid = t2.stockid AND t1.siteid = t2.siteid");
+        querySQL.addJoinTable(JOINTYPE.left, "st_stock", "t3", "t1.outstockid = t3.stockid AND t1.siteid = t3.siteid");
+        querySQL.addJoinTable(JOINTYPE.left, "sys_department", "t4", "t1.departmentid=t4.departmentid and t1.siteid = t4.siteid","depname");
+
+        querySQL.addQueryFields("outstockno", "t3.stockno");
+        querySQL.addQueryFields("outstockname", "t3.stockname");
+        querySQL.addQueryFields("instockno", "t2.stockno");
+        querySQL.addQueryFields("instockname", "t2.stockname");
+        querySQL.setWhere("t1.siteid", siteid);
+        querySQL.setWhere(where);
+        return querySQL;
+    }
+
+    public  ArrayList<String> updateIcinvbal(boolean ischeck,boolean isinstock,Long st_dbstockbillid) throws YosException {
+        ArrayList<String> sqlList =new ArrayList();
+        Rows dbstockbilldetail =dbConnect.runSqlQuery("select t1.*,t2.skucontrol from st_dbstockbilldetail t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.st_dbstockbillid ='"
+                + st_dbstockbillid + "' and  t1.siteid='" + siteid + "'");// 出入库表体
+        ArrayList<Long> itemids = new ArrayList<Long>();
+        itemids = dbstockbilldetail.toArrayList("itemid",new ArrayList<>());
+        itemids.add((long) 0);
+        int i = 0;
+        String sql="select * from st_invbal where itemid in"+itemids;
+        sql = sql.replace("[", "(").replace("]", ")");
+        Rows invbals =  dbConnect.runSqlQuery(sql);
+        RowsMap invbalsRowsMap=invbals.toRowsMap("itemid");
+        for(Row row : dbstockbilldetail){
+            String itemid = row.getString("itemid");
+            //String batchno = row.getString("batchno");
+            //String fdcspno = row.getString("fdcspno");
+            long stockid;
+
+            if ((ischeck && isinstock) || (!ischeck && !isinstock)) {
+                 stockid = row.getLong("instockid");
+            }else{
+                 stockid = row.getLong("outstockid");
+            }
+
+//             if (type == 1 && !getSysVars().getBoolean("FISBATCHFORXC")) {
+//                 fdcspno = "**********";
+//                 fbatchno = "**********";
+//                 fstockno = getPaoSet("TDEPARTMENT").getPao(0)
+//                         .getPaoSet("TSTOCKXC").getPao(0).getString("fstockno");
+//                 icinvbal = detailpao.getPaoSet("$icinvbal", "icinvbal",
+//                         "fitemno='" + fitemno + "' and fstockno='" + fstockno
+//                                 + "' and fdcspno='" + fdcspno
+//                                 + "' and fbatchno='" + fbatchno + "'");
+//             } else if (type == 2 && !getSysVars().getBoolean("FISBATCHFORXC")) {
+//                 fdcspno = "**********";
+//                 fbatchno = "**********";
+//                 fstockno = getPaoSet("TSUPPLIER").getPao(0)
+//                         .getPaoSet("TSTOCKXC").getPao(0).getString("fstockno");
+//                 icinvbal = detailpao.getPaoSet("$icinvbal", "icinvbal",
+//                         "fitemno='" + fitemno + "' and fstockno='" + fstockno
+//                                 + "' and fdcspno='" + fdcspno
+//                                 + "' and fbatchno='" + fbatchno + "'");
+//             }
+            BigDecimal qty = isinstock ? row.getBigDecimal("qty") : row.getBigDecimal("qty").negate();
+            if(!invbalsRowsMap.containsKey(itemid)){
+                SQLFactory sqlFactory = new SQLFactory(this, "即时库存新增");
+                sqlFactory.addParameter("st_invbalid", createTableID("st_invbal"));
+                sqlFactory.addParameter("qty", qty);
+                sqlFactory.addParameter("itemid", itemid);
+                sqlFactory.addParameter("stockid", stockid);
+                sqlFactory.addParameter("siteid",siteid);
+                sqlFactory.addParameter("userid", userid);
+                sqlFactory.addParameter("username", username);
+                sqlList.add(sqlFactory.getSQL());
+            }else{
+                if(invbalsRowsMap.get(itemid).toRowsMap("stockid").containsKey(stockid)){
+                    SQLFactory sqlFactory = new SQLFactory(this, "即时库存更新");
+                    sqlFactory.addParameter("st_invbalid", createTableID("st_invbal"));
+                    sqlFactory.addParameter("qty", invbalsRowsMap.get(itemid).toRowsMap("stockid").get(stockid).get(0).getBigDecimal("qty").add(qty));
+                    sqlFactory.addParameter("itemid", itemid);
+                    sqlFactory.addParameter("stockid", stockid);
+                    sqlFactory.addParameter("siteid",siteid);
+                    sqlFactory.addParameter("userid", userid);
+                    sqlFactory.addParameter("username", username);
+                    sqlList.add(sqlFactory.getSQL());
+                }else{
+                    SQLFactory sqlFactory = new SQLFactory(new Invbal(), "即时库存新增");
+                    sqlFactory.addParameter("st_invbalid", createTableID("st_invbal"));
+                    sqlFactory.addParameter("qty", qty);
+                    sqlFactory.addParameter("itemid", itemid);
+                    sqlFactory.addParameter("stockid", stockid);
+                    System.err.println(stockid);
+                    sqlFactory.addParameter("siteid",siteid);
+                    sqlFactory.addParameter("userid", userid);
+                    sqlFactory.addParameter("username", username);
+                    sqlList.add(sqlFactory.getSQL());
+                }
+            }
+        }
+        return sqlList;
+    }
+    public ArrayList<String> updatesku(long instockid,long outstockid,Rows dbstockbilldetailskus, boolean ischeck, boolean isinbillneedcheck) {
+        ArrayList<String> sqllist =new ArrayList<>();
+        for(Row row : dbstockbilldetailskus){
+            if (ischeck) {// 审核
+                if (isinbillneedcheck) {
+                    sqllist.add("update sa_itemsku set stockid="+instockid+" where sku='"+row.getString("sku")+"'");
+                } else {
+                    sqllist.add("update sa_itemsku set stockid=0 where sku='"+row.getString("sku")+"'");
+                }
+            } else {// 反审核
+                sqllist.add("update sa_itemsku set stockid="+outstockid+" where sku='"+row.getString("sku")+"'");
+            }
+        }
+        return sqllist;
+    }
+    public ArrayList<String> updateUnInQty( boolean ischeck, Rows dbstockbilldetail) {
+        ArrayList<String> sqllist =new ArrayList<>();
+        for(Row row : dbstockbilldetail){
+            if (ischeck) {// 审核
+                sqllist.add("update st_dbstockbilldetail  set undeliqty=0 where st_dbstockbilldetailid='"+row.getString("st_dbstockbilldetailid")+"'");
+            } else {// 反审核
+                sqllist.add("update st_dbstockbilldetail set undeliqty="+row.getBigDecimal("qty")+" where st_dbstockbilldetailid='"+row.getString("st_dbstockbilldetailid")+"'");
+            }
+        }
+        return sqllist;
+    }
+}

+ 218 - 0
src/custom/restcontroller/webmanage/sale/dbstockbill/dbstockbilldetail.java

@@ -0,0 +1,218 @@
+package restcontroller.webmanage.sale.dbstockbill;
+
+import beans.data.BatchDeleteErr;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import common.Controller;
+import common.YosException;
+import common.annotation.API;
+import common.annotation.CACHEING;
+import common.annotation.CACHEING_CLEAN;
+import common.data.*;
+import restcontroller.R;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+
+public class dbstockbilldetail extends Controller {
+
+
+    public dbstockbilldetail(JSONObject content) throws YosException {
+        super(content);
+    }
+
+    @API(title = "出库商品列表查询", apiversion = R.ID2025061915091103.v1.class)
+    @CACHEING
+    public String queryOrderItemgList() throws YosException {
+        StringBuffer where = new StringBuffer(" 1=1 ");
+        if (content.containsKey("where")) {
+            JSONObject whereObject = content.getJSONObject("where");
+            if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
+                where.append(" and(");
+                where.append("t2.itemno like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append("or t2.itemname like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append("or t2.model like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append(")");
+            }
+        }
+        SQLFactory sqlFactory;
+        QuerySQL querySQL;
+        querySQL = SQLFactory.createQuerySQL(this, "st_invbal", "*");
+        querySQL.setTableAlias("t1");
+        querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t2", "t1.itemid = t2.itemid AND t1.siteid = t2.siteid","itemno","itemname","model","spec");
+        querySQL.addJoinTable(JOINTYPE.left, "st_stock", "t3", "t1.stockid = t3.stockid AND t1.siteid = t3.siteid","stockno","stockname");
+        querySQL.addJoinTable(JOINTYPE.left, "plm_unit", "t4", "t4.unitid = t2.unitid AND t4.siteid = t2.siteid","unitname");
+        querySQL.setSiteid(siteid);
+        querySQL.setWhere(where.toString());
+        querySQL.setWhere("t1.stockid",content.getLongValue("stockid"));
+
+        querySQL.setPage(pageSize, pageNumber);
+        querySQL.setOrderBy(pageSorting);
+        Rows rows = querySQL.query();
+
+        return getSucReturnObject().setData(rows).toString();
+    }
+
+
+    @API(title = "调拨单明细新增更新", apiversion = R.ID2025061915092903.v1.class)
+    @CACHEING_CLEAN(apiClass = {dbstockbill.class, dbstockbilldetail.class})
+    public String insertormodify_dbstcokbillItems() throws YosException {
+        Long st_dbstockbillid = content.getLong("st_dbstockbillid");
+        JSONArray iteminfos = content.getJSONArray("iteminfos");
+        ArrayList<String> sqlList = new ArrayList<>();
+        Rows rowscount = dbConnect.runSqlQuery("select billno,status,outstockid,instockid from st_dbstockbill where st_dbstockbillid=" + st_dbstockbillid);
+        if (!rowscount.isEmpty()) {
+            if (!rowscount.get(0).getString("status").equals("新建")) {
+                return getErrReturnObject().setErrMsg("非新建状态的调拨单无法新增修改").toString();
+            }
+        }else{
+            return getErrReturnObject().setErrMsg("调拨单不存在").toString();
+        }
+        int i = 0;
+        long maxid = 0;
+        long[] st_dbstockbilldetailid = createTableID("st_dbstockbilldetail", iteminfos.size());
+        Rows maxidRows = dbConnect
+                .runSqlQuery("select MAX(rowno) rowno from st_dbstockbilldetail where st_dbstockbillid=" + st_dbstockbillid);
+        if (!maxidRows.isEmpty()) {
+            maxid = maxidRows.get(0).getLong("rowno");
+        }
+        for (Object obj : iteminfos) {
+            JSONObject iteminfo = (JSONObject) obj;
+            if (iteminfo.getLong("st_dbstockbilldetailid") <= 0 || dbConnect
+                    .runSqlQuery("select st_dbstockbilldetailid from st_dbstockbilldetail where st_dbstockbilldetailid="
+                            + iteminfo.getLong("st_dbstockbilldetailid"))
+                    .isEmpty()) {
+                InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_dbstockbilldetail");
+                insertSQL.setUniqueid(st_dbstockbilldetailid[i]);
+                insertSQL.setSiteid(siteid);
+                insertSQL.setValue("rowno", maxid + i + 1);
+                insertSQL.setValue("st_dbstockbillid", st_dbstockbillid);
+                insertSQL.setValue("outstockid", rowscount.get(0).getLong("outstockid"));
+                insertSQL.setValue("instockid",rowscount.get(0).getLong("instockid"));
+                insertSQL.setValue("itemid", iteminfo.getLongValue("itemid"));
+                insertSQL.setValue("qty", iteminfo.getBigDecimal("qty"));
+                insertSQL.setValue("undeliqty", iteminfo.getBigDecimal("qty"));
+                insertSQL.setValue("remarks", iteminfo.getStringValue("remarks"));
+                i++;
+                sqlList.add(insertSQL.getSQL());
+            } else {
+                Rows rows = dbConnect.runSqlQuery(
+                        "SELECT status from st_dbstockbill WHERE st_dbstockbillid = "
+                                + st_dbstockbillid);
+                if (rows.isNotEmpty()) {
+                    if (rows.get(0).getString("status").equals("新建")) {
+
+                        UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "st_dbstockbilldetail");
+                        updateSQL.setUniqueid(iteminfo.getLong("st_dbstockbilldetailid"));
+                        updateSQL.setSiteid(siteid);
+                        updateSQL.setValue("itemid", iteminfo.getLongValue("itemid"));
+                        updateSQL.setValue("qty", iteminfo.getBigDecimal("qty"));
+                        updateSQL.setValue("undeliqty", iteminfo.getBigDecimal("qty"));
+                        updateSQL.setValue("remarks", iteminfo.getStringValue("remarks"));
+                        sqlList.add(updateSQL.getSQL());
+                    } else {
+                        return getErrReturnObject().setErrMsg("非新建状态下无法编辑").toString();
+                    }
+
+                } else {
+                    return getErrReturnObject().setErrMsg("该销售调拨单不存在").toString();
+                }
+            }
+
+        }
+        dbConnect.runSqlUpdate(sqlList);
+        return querStcokbillItemsList();
+    }
+
+
+    @API(title = "调拨单明细列表", apiversion = R.ID2025061915094203.v1.class)
+    @CACHEING
+    public String querStcokbillItemsList() throws YosException {
+        /*
+         * 过滤条件设置
+         */
+        StringBuffer where = new StringBuffer(" 1=1 ");
+        if (content.containsKey("where")) {
+            JSONObject whereObject = content.getJSONObject("where");
+            if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
+                where.append(" and(");
+                where.append("t4.itemname like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append("or t4.model like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append("or t4.spec like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append("or t4.itemno like'%").append(whereObject.getString("condition")).append("%' ");
+                where.append(")");
+            }
+        }
+        Long st_dbstockbillid = content.getLong("st_dbstockbillid");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_dbstockbilldetail","*");
+        querySQL.setTableAlias("t1");
+        querySQL.addJoinTable(JOINTYPE.left, "st_stock", "t2", "t1.instockid = t2.stockid AND t1.siteid = t2.siteid");
+        querySQL.addJoinTable(JOINTYPE.left, "st_stock", "t3", "t1.outstockid = t3.stockid AND t1.siteid = t3.siteid");
+        querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t4", "t1.itemid=t4.itemid and t1.siteid = t4.siteid","itemno","itemname"
+                ,"spec","model");
+        querySQL.addJoinTable(JOINTYPE.left, "plm_unit", "t5", "t4.unitid=t5.unitid and t4.siteid = t5.siteid","unitname");
+
+        querySQL.addQueryFields("outstockno", "t3.stockno");
+        querySQL.addQueryFields("outstockname", "t3.stockname");
+        querySQL.addQueryFields("instockno", "t2.stockno");
+        querySQL.addQueryFields("instockname", "t2.stockname");
+        querySQL.setWhere("t1.siteid", siteid);
+        querySQL.setWhere("t1.st_dbstockbillid",st_dbstockbillid);
+        Rows rows = querySQL.query();
+
+
+
+        return getSucReturnObject().setData(rows).toString();
+    }
+
+
+    @API(title = "删除明细", apiversion = R.ID2025061915102603.v1.class)
+    @CACHEING_CLEAN(apiClass = {dbstockbill.class, dbstockbilldetail.class})
+    public String deletemx() throws YosException {
+
+
+        JSONArray st_dbstockbilldetailids = content.getJSONArray("st_dbstockbilldetailids");
+        BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, st_dbstockbilldetailids.size());
+        long st_dbstockbillid = 0;
+        for (Object o : st_dbstockbilldetailids) {
+            long st_dbstockbilldetailid = Long.parseLong(o.toString());
+            Rows RowsStatus = dbConnect.runSqlQuery("select t1.st_dbstockbilldetailid,t2.status,t1.st_dbstockbillid from st_dbstockbilldetail t1 left join st_dbstockbill t2 on t1.st_dbstockbillid=t2.st_dbstockbillid and t1.siteid=t2.siteid where t1.siteid='"
+                    + siteid + "' and t1.st_dbstockbilldetailid='" + st_dbstockbilldetailid + "'");
+
+            if (RowsStatus.isNotEmpty()) {
+                st_dbstockbillid = RowsStatus.get(0).getLong("st_dbstockbillid");
+                if (!RowsStatus.get(0).getString("status").equals("新建")) {
+                    batchDeleteErr.addErr(st_dbstockbilldetailid, "非新建状态的调拨单明细无法删除");
+                    continue;
+                }
+            }
+            ArrayList<String> list = new ArrayList<>();
+            list.add("delete from st_dbstockbilldetail where siteid='" + siteid
+                    + "' and st_dbstockbilldetailid=" + st_dbstockbilldetailid);
+
+            dbConnect.runSqlUpdate(list);
+        }
+        //重新排序
+        updateRowNo(st_dbstockbillid);
+        return batchDeleteErr.getReturnObject().toString();
+    }
+    /**
+     * 重新将行进行排序
+     *
+     * @param
+     * @throws YosException
+     */
+    public void updateRowNo(Long st_dbstockbillid) throws YosException {
+        String sql = "SELECT st_dbstockbilldetailid from st_dbstockbilldetail WHERE st_dbstockbillid= " + st_dbstockbillid + " and siteid = '" + siteid + "' ORDER  BY st_dbstockbilldetailid asc ";
+        ArrayList<Long> st_dbstockbilldetailids = dbConnect.runSqlQuery(sql).toArrayList("st_dbstockbilldetailid", new ArrayList<>());
+        ArrayList<String> sqlList = new ArrayList<>();
+        int rowno = 1;
+        for (Long id : st_dbstockbilldetailids) {
+            sqlList.add("UPDATE st_dbstockbilldetail SET rowno=" + rowno + " WHERE st_dbstockbilldetailid = " + id);
+            rowno++;
+        }
+        dbConnect.runSqlUpdate(sqlList);
+    }
+
+
+}

+ 167 - 0
src/custom/restcontroller/webmanage/sale/dbstockbill/dbstockbilldetailsku.java

@@ -0,0 +1,167 @@
+package restcontroller.webmanage.sale.dbstockbill;
+
+import beans.data.BatchDeleteErr;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import common.Controller;
+import common.YosException;
+import common.annotation.API;
+import common.data.InsertSQL;
+import common.data.Rows;
+import common.data.RowsMap;
+import common.data.SQLFactory;
+import org.apache.poi.hssf.record.DVALRecord;
+import restcontroller.R;
+
+import java.util.ArrayList;
+
+public class dbstockbilldetailsku extends Controller {
+    public dbstockbilldetailsku(JSONObject content) throws YosException {
+        super(content);
+    }
+    @API(title = "判断序列号是否符合条件", apiversion = R.ID2025061915095203.v1.class)
+    public String judgesku() throws YosException {
+        long st_dbstockbillid = content.getLong("st_dbstockbillid");
+        long st_dbstockbilldetailid = content.getLong("st_dbstockbilldetailid");
+        String sku=content.getString("sku");
+        long instockid=0;
+        long outstockid=0;
+        long skustockid=0;
+        long itemid=0;
+        Rows dbstockbillrows =dbConnect.runSqlQuery("select * from st_dbstockbill where st_dbstockbillid='"+st_dbstockbillid+"' and siteid='"+siteid+"'");
+        Rows skurows =dbConnect.runSqlQuery("select * from sa_itemsku where sku='"+sku+"' and siteid='"+siteid+"'");
+        if(dbstockbillrows.isEmpty()){
+            return getErrReturnObject().setErrMsg("调拨单不存在").toString();
+        }else{
+            outstockid=dbstockbillrows.get(0).getLong("outstockid");
+            instockid=dbstockbillrows.get(0).getLong("instockid");
+        }
+        if(skurows.isEmpty()){
+            return getErrReturnObject().setErrMsg("序列号" + sku + "不存在").toString();
+        }else{
+            if(skurows.get(0).getString("status").equals("作废")){
+                return getErrReturnObject().setErrMsg("序列号" + sku + "已作废").toString();
+            }
+            skustockid=skurows.get(0).getLong("stockid");
+            itemid=skurows.get(0).getLong("itemid");
+        }
+        ArrayList<String> sqllist =new ArrayList<>();
+        if(st_dbstockbilldetailid==0){
+            Rows dbstockbilldetailrows =dbConnect.runSqlQuery("select * from st_dbstockbilldetail where st_dbstockbillid='"+st_dbstockbillid+"' and siteid='"+siteid+"' and itemid="+itemid);
+            if(dbstockbilldetailrows.isEmpty()){
+                if(outstockid!=skustockid){
+                    return getErrReturnObject().setErrMsg("序列号" + sku + "所在仓库与调出仓库不符").toString();
+                }
+
+                InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_dbstockbilldetail");
+                st_dbstockbilldetailid =  createTableID("st_dbstockbilldetail");
+                insertSQL.setUniqueid(st_dbstockbilldetailid);
+                insertSQL.setSiteid(siteid);
+                insertSQL.setValue("itemid", itemid);
+                insertSQL.setValue("qty", 1);
+                insertSQL.setValue("undeliqty", 1);
+                insertSQL.setValue("st_dbstockbillid", st_dbstockbillid);
+                insertSQL.setValue("outstockid", outstockid);
+                insertSQL.setValue("instockid", instockid);
+                insertSQL.setValue("rowno", 1);
+                sqllist.add(insertSQL.getSQL());
+
+                InsertSQL insertSQL1 = SQLFactory.createInsertSQL(this, "st_dbstockbilldetailsku");
+                insertSQL1.setUniqueid(createTableID("st_dbstockbilldetailsku"));
+                insertSQL1.setSiteid(siteid);
+                insertSQL1.setValue("sku", sku);
+                insertSQL1.setValue("st_dbstockbilldetailid", st_dbstockbilldetailid);
+                insertSQL1.setValue("st_dbstockbillid", st_dbstockbillid);
+                insertSQL1.setValue("outstockid", outstockid);
+                sqllist.add(insertSQL1.getSQL());
+            }else{
+                String result =getresult(dbstockbilldetailrows.get(0).getLong("st_dbstockbilldetailid"),itemid,skustockid,sku);
+                if(result.equals("success")){
+                    InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_dbstockbilldetailsku");
+                    insertSQL.setUniqueid(createTableID("st_dbstockbilldetailsku"));
+                    insertSQL.setSiteid(siteid);
+                    insertSQL.setValue("sku", sku);
+                    insertSQL.setValue("st_dbstockbilldetailid", dbstockbilldetailrows.get(0).getLong("st_dbstockbilldetailid"));
+                    insertSQL.setValue("st_dbstockbillid", st_dbstockbillid);
+                    insertSQL.setValue("outstockid", outstockid);
+                    sqllist.add(insertSQL.getSQL());
+                    //sqllist.add("update st_dbstockbilldetail set qty=qty+1,undeliqty=undeliqty+1 where st_dbstockbilldetailid="+dbstockbilldetailrows.get(0).getLong("st_dbstockbilldetailid"));
+                }else {
+                    return getErrReturnObject().setErrMsg(result).toString();
+                }
+            }
+        }else{
+            String result =getresult(st_dbstockbilldetailid,itemid,skustockid,sku);
+            if(result.equals("success")){
+                InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_dbstockbilldetailsku");
+                insertSQL.setUniqueid(createTableID("st_dbstockbilldetailsku"));
+                insertSQL.setSiteid(siteid);
+                insertSQL.setValue("sku", sku);
+                insertSQL.setValue("st_dbstockbilldetailid", st_dbstockbilldetailid);
+                insertSQL.setValue("st_dbstockbillid", st_dbstockbillid);
+                insertSQL.setValue("outstockid", outstockid);
+                sqllist.add(insertSQL.getSQL());
+                //sqllist.add("update st_dbstockbilldetail set qty=qty+1,undeliqty=undeliqty+1 where st_dbstockbilldetailid="+st_dbstockbilldetailid);
+            }else {
+                return getErrReturnObject().setErrMsg(result).toString();
+            }
+        }
+        dbConnect.runSqlUpdate(sqllist);
+        updateRowNo(st_dbstockbillid);
+
+        return getSucReturnObject().toString();
+    }
+
+    @API(title = "删除明细", apiversion = R.ID2025061915095803.v1.class)
+    public String deletemxsku() throws YosException {
+        JSONArray st_dbstockbilldetailskuids = content.getJSONArray("st_dbstockbilldetailskuids");
+        BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, st_dbstockbilldetailskuids.size());
+        for (Object o : st_dbstockbilldetailskuids) {
+            long st_dbstockbilldetailskuid = Long.parseLong(o.toString());
+            Rows RowsStatus = dbConnect.runSqlQuery("select t1.st_dbstockbillid,t1.status from st_dbstockbill t1 " +
+                    "inner join st_dbstockbilldetailsku t2 on t1.st_dbstockbillid=t2.st_dbstockbillid and t1.siteid=t2.siteid  where t2.siteid='"
+                    + siteid + "' and t2.st_dbstockbilldetailskuid='" + st_dbstockbilldetailskuid + "'");
+
+            if (RowsStatus.isNotEmpty()) {
+                if (!RowsStatus.get(0).getString("status").equals("新建")) {
+                    batchDeleteErr.addErr(st_dbstockbilldetailskuid, "非新建状态的调拨单明细序列号信息无法删除");
+                    continue;
+                }
+            }
+
+            dbConnect.runSqlUpdate(
+                    "delete from st_dbstockbilldetailsku where siteid='" + siteid + "' and st_dbstockbilldetailskuid=" + st_dbstockbilldetailskuid);
+        }
+        return batchDeleteErr.getReturnObject().toString();
+    }
+    public String getresult(long st_dbstockbilldetailid,long itemid,long skustockid,String sku) throws YosException {
+        Rows dbstockbilldetailrows =dbConnect.runSqlQuery("select * from st_dbstockbilldetail where st_dbstockbilldetailid='"+st_dbstockbilldetailid+"' and siteid='"+siteid+"'");
+        if(dbstockbilldetailrows.isEmpty()){
+            return "该调拨单表体不存在";
+        }else{
+            if(dbstockbilldetailrows.get(0).getLong("itemid")!=itemid){
+                return "序列号" + sku+"不属于该货品";
+            }
+            if(dbstockbilldetailrows.get(0).getLong("outstockid")!=skustockid){
+                return "序列号" + sku + "所在仓库与调出仓库不符";
+            }
+            Rows dbstockbilldetailskurows =dbConnect.runSqlQuery("select * from st_dbstockbilldetailsku where st_dbstockbilldetailid='"+st_dbstockbilldetailid+"' and siteid='"+siteid+"'");
+            RowsMap  dbstockbilldetailskuRowsMap = dbstockbilldetailskurows.toRowsMap("sku");
+            if(dbstockbilldetailskuRowsMap.containsKey(sku)){
+                return "序列号" + sku + "重复";
+            }
+        }
+        return "success";
+    }
+    public void updateRowNo(Long st_dbstockbillid) throws YosException {
+        String sql = "SELECT st_dbstockbilldetailid from st_dbstockbilldetail WHERE st_dbstockbillid= " + st_dbstockbillid + " and siteid = '" + siteid + "' ORDER  BY st_dbstockbilldetailid asc ";
+        ArrayList<Long> st_dbstockbilldetailids = dbConnect.runSqlQuery(sql).toArrayList("st_dbstockbilldetailid", new ArrayList<>());
+        ArrayList<String> sqlList = new ArrayList<>();
+        int rowno = 1;
+        for (Long id : st_dbstockbilldetailids) {
+            sqlList.add("UPDATE st_dbstockbilldetail SET rowno=" + rowno + " WHERE st_dbstockbilldetailid = " + id);
+            rowno++;
+        }
+        dbConnect.runSqlUpdate(sqlList);
+    }
+}

+ 33 - 19
src/custom/restcontroller/webmanage/sale/order/OrderItems.java

@@ -152,7 +152,21 @@ public class OrderItems extends Controller {
             BigDecimal price;
             BigDecimal saleprice;
             BigDecimal custamount=new BigDecimal(0);
+            BigDecimal rwpricerate=new BigDecimal(1);
             BigDecimal pricerate=new BigDecimal(1);
+
+            SQLFactory sqlFactory = new SQLFactory(this, "商品等级价格查询");
+            sqlFactory.addParameter("siteid", siteid);
+            sqlFactory.addParameter("itemid", itemid);
+            sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
+            Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
+            if (rows.isNotEmpty()) {
+                pricerate = rows.get(0).getBigDecimal("discountrate");
+                //如果折扣率为0,则默认按照1计算
+                pricerate = (pricerate.compareTo(BigDecimal.ZERO) == 0 ? new BigDecimal(1) : pricerate);
+            }
+
+
             int year= Year.now().getValue();
             int quarter= YearMonth.now().get(IsoFields.QUARTER_OF_YEAR);
             Rows custamountrows =dbConnect.runSqlQuery("select * from sa_agents where sys_enterpriseid="+sys_enterpriseid+" and siteid='"+siteid+"'");
@@ -160,7 +174,7 @@ public class OrderItems extends Controller {
                 custamount=custamountrows.get(0).getBigDecimal("custamount");
                 if(custamountrows.get(0).getInteger("year")==year && custamountrows.get(0).getInteger("quarter")==quarter){
                     if(custamountrows.get(0).getBigDecimal("pricerate").compareTo(BigDecimal.ZERO)>0){
-                        pricerate=custamountrows.get(0).getBigDecimal("pricerate");
+                        rwpricerate=custamountrows.get(0).getBigDecimal("pricerate");
                     }
                 }
             }
@@ -185,10 +199,10 @@ public class OrderItems extends Controller {
 
 
             if (isInsert) {
-                price=price.multiply(pricerate).add(custamount);
-                sqlList.add(orderItemsHelper.getInsertSQL(customproperties, sa_orderitemsid, item, itemRow, type, defaultprice, price, saleprice, itemPrice.getMarketprice(), spec, promotionitems, width, length,custamount).getSQL());
+                price=price.multiply(rwpricerate).add(custamount);
+                sqlList.add(orderItemsHelper.getInsertSQL(customproperties, sa_orderitemsid, item, itemRow, type, defaultprice, price, saleprice, itemPrice.getMarketprice(), spec, promotionitems, width, length,custamount,rwpricerate,pricerate).getSQL());
             } else {
-                price=price.multiply(pricerate).add(content.getBigDecimal("custamount"));
+                price=price.multiply(rwpricerate).add(content.getBigDecimal("custamount"));
                 sqlList.add(orderItemsHelper.getUpdateSQL(sa_orderitemsid, item, itemRow, type, defaultprice, price, saleprice, width, length).getSQL());
             }
 
@@ -659,8 +673,8 @@ public class OrderItems extends Controller {
 //        sqlFactory.addParameter("sa_orderid", sa_orderid);
 //        sqlFactory.addParameter_SQL("where", where);
 //        Rows rows = dbConnect.runSqlQuery(sqlFactory);
-        int year= Year.now().getValue();
-        int quarter= YearMonth.now().get(IsoFields.QUARTER_OF_YEAR);
+//        int year= Year.now().getValue();
+//        int quarter= YearMonth.now().get(IsoFields.QUARTER_OF_YEAR);
 
 
         QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems","*");
@@ -673,12 +687,12 @@ public class OrderItems extends Controller {
         querySQL.addJoinTable(JOINTYPE.left, "sa_promotion_items", "t4",
                 "t4.sa_promotion_itemsid = t1.sa_promotion_itemsid and t4.siteid = t1.siteid and t4.sa_promotionid=" + sa_promotionid,"packagetypemx","saledqty","groupqty");
 
-        querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t5", "t5.sys_enterpriseid = "+sys_enterpriseid+" and year="+year+" and quarter="+quarter+" AND t5.siteid = t1.siteid");
+//        querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t5", "t5.sys_enterpriseid = "+sys_enterpriseid+" and year="+year+" and quarter="+quarter+" AND t5.siteid = t1.siteid");
 
         querySQL.addQueryFields("candispatchqty", "ifnull(t2.candispatchqty, 0)");
         querySQL.addQueryFields("cansaleqty", "ifnull(t2.cansaleqty, 0)");
         querySQL.addQueryFields("totalaty", "ifnull(t2.qty, 0)");
-        querySQL.addQueryFields("rwpricerate", "ifnull(t5.pricerate, 1)");
+//        querySQL.addQueryFields("rwpricerate", "ifnull(t5.pricerate, 1)");
 
         querySQL.addQueryFields("stockstatus", "(SELECT (CASE WHEN t2.cansaleqty>=t3.stockstatus1 THEN '充足' WHEN t2.cansaleqty<=t3.stockstatus2 THEN '缺货' ELSE '紧缺' END))");
         if(sa_promotionid>0){
@@ -721,12 +735,12 @@ public class OrderItems extends Controller {
         RowsMap itempriceRowsMap = itempriceRows.toRowsMap("itemno");
 
 
-        SQLFactory sqlFactory4 = new SQLFactory(this, "商品等级价格查询");
-        sqlFactory4.addParameter("siteid", siteid);
-        sqlFactory4.addParameter_in("itemid", ids);
-        sqlFactory4.addParameter("sys_enterpriseid", sys_enterpriseid);
-        Rows pricegradeRows = dbConnect.runSqlQuery(sqlFactory4);
-        RowsMap pricegradeRowsMap = pricegradeRows.toRowsMap("itemid");
+//        SQLFactory sqlFactory4 = new SQLFactory(this, "商品等级价格查询");
+//        sqlFactory4.addParameter("siteid", siteid);
+//        sqlFactory4.addParameter_in("itemid", ids);
+//        sqlFactory4.addParameter("sys_enterpriseid", sys_enterpriseid);
+//        Rows pricegradeRows = dbConnect.runSqlQuery(sqlFactory4);
+//        RowsMap pricegradeRowsMap = pricegradeRows.toRowsMap("itemid");
 
         JSONArray jsonArray = new JSONArray();
         if(content.getLongValue("onlyquery")==0){
@@ -799,11 +813,11 @@ public class OrderItems extends Controller {
             if (!row.containsKey("invbalqty")) {
                 row.put("invbalqty", BigDecimal.ZERO);
             }
-            if (pricegradeRowsMap.containsKey(row.getString("itemid"))) {
-                row.put("pricerate",pricegradeRowsMap.get(row.getString("itemid")).get(0).getBigDecimal("discountrate"));
-            }else{
-                row.put("pricerate",new BigDecimal(1));
-            }
+//            if (pricegradeRowsMap.containsKey(row.getString("itemid"))) {
+//                row.put("pricerate",pricegradeRowsMap.get(row.getString("itemid")).get(0).getBigDecimal("discountrate"));
+//            }else{
+//                row.put("pricerate",new BigDecimal(1));
+//            }
 
             row.put("attinfos", attinfoRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
             row.put("contractprice", 0);

+ 3 - 1
src/custom/restcontroller/webmanage/sale/order/OrderItemsHelper.java

@@ -587,7 +587,7 @@ public class OrderItemsHelper extends BaseClass {
 
     public InsertSQL getInsertSQL(JSONArray customproperties, long sa_orderitemsid, JSONObject item, Row itemRow, String type,
                                   BigDecimal defaultprice, BigDecimal price, BigDecimal saleprice, BigDecimal marketprice,
-                                  String spec, Rows promotionitems,long width,long length,BigDecimal custamount) throws YosException {
+                                  String spec, Rows promotionitems,long width,long length,BigDecimal custamount,BigDecimal rwpricerate,BigDecimal pricerate) throws YosException {
         Long itemid = item.getLong("itemid");
         BigDecimal qty = item.getBigDecimal("qty");
         RowsMap promotionitemsRowsMap = promotionitems.toRowsMap("sa_promotion_itemsid");
@@ -619,6 +619,8 @@ public class OrderItemsHelper extends BaseClass {
         insertSQL.setValue("batchno", item.getOrDefault("batchno", "null"));
         insertSQL.setValue("spec", spec);
         insertSQL.setValue("custamount",custamount);
+        insertSQL.setValue("rwpricerate",rwpricerate);
+        insertSQL.setValue("pricerate",pricerate);
         insertSQL.setValue("sa_promotion_itemsid", item.getLongValue("sa_promotion_itemsid"));
         String deliverydate = item.getStringValue("deliverydate");
         Rows rows = dbConnect.runSqlQuery("SELECT deliverydate,defaultprice from sa_orderitems WHERE sa_orderitemsid =" + sa_orderitemsid);

+ 1 - 1
src/custom/restcontroller/webmanage/sale/stockbill/SQL/即时库存新增.sql

@@ -1,2 +1,2 @@
 insert into st_invbal (siteid, st_invbalid,changeuserid,changeby, changedate,stockid,itemid,qty)
-values ($siteid$, $st_invbalid$,$userid$, $username$, CURRENT_TIME, 0,$itemid$,$qty$);
+values ($siteid$, $st_invbalid$,$userid$, $username$, CURRENT_TIME, $stockid$,$itemid$,$qty$);

+ 4 - 1
src/custom/restcontroller/webmanage/sale/stockbill/stockbill.java

@@ -60,6 +60,7 @@ public class stockbill extends Controller {
         }
         Long departmentid = content.getLongValue("departmentid");
         String type = content.getStringValue("type");
+        String typemx = content.getStringValue("typemx");
         String remarks = content.getStringValue("remarks");
         String billdate = content.getStringValue("billdate");
         String outplace = content.getStringValue("outplace");
@@ -88,6 +89,7 @@ public class stockbill extends Controller {
             insertSQL.setValue("rec_contactsid", rec_contactsid);
             insertSQL.setValue("departmentid", departmentid);
             insertSQL.setValue("type", type);
+            insertSQL.setValue("typemx", typemx);
             insertSQL.setValue("remarks", remarks);
             insertSQL.setValue("billdate", billdate);
             insertSQL.setValue("billno", createBillCode("stockbill"));
@@ -98,6 +100,7 @@ public class stockbill extends Controller {
             insertSQL.setValue("invoice_taxno", invoice_taxno);
             insertSQL.setValue("tracknumber", tracknumber);
             insertSQL.setValue("isconfirm", isconfirm);
+
             insertSQL.setValue("period", content.getStringValue("period"));
 
             insertSQL.setValue("createby", username);
@@ -733,7 +736,7 @@ public class stockbill extends Controller {
 //                                 + "' and fbatchno='" + fbatchno + "'");
 //             }
              BigDecimal qty = isinstock ? row.getBigDecimal("qty") : row.getBigDecimal("qty").negate();
-             if(invbalsRowsMap.containsKey(itemid)){
+             if(!invbalsRowsMap.containsKey(itemid)){
                  SQLFactory sqlFactory = new SQLFactory(this, "即时库存新增");
                  sqlFactory.addParameter("st_invbalid", createTableID("st_invbal"));
                  sqlFactory.addParameter("qty", qty);

+ 2 - 2
src/custom/restcontroller/webmanage/sale/toolscode/SQL/商品序列号档案新增.sql

@@ -1,2 +1,2 @@
-insert into sa_itemsku (siteid, sa_itemskuid,createuserid,createby,createdate,changeuserid,changeby, changedate,sku,islimit,isused,itemid,sa_agentsid,stockid,status,changenotes,mono)
-values ($siteid$, $sa_itemskuid$,$userid$,$username$, CURRENT_TIME,$userid$, $username$, CURRENT_TIME, $sku$,$islimit$,0,$itemid$,$sa_agentsid$,$stockid$,'在库','','');
+insert into sa_itemsku (siteid, sa_itemskuid,createuserid,createby,createdate,changeuserid,changeby, changedate,sku,islimit,isused,itemid,sa_agentsid,stockid,status,changenotes,mono,isyj)
+values ($siteid$, $sa_itemskuid$,$userid$,$username$, CURRENT_TIME,$userid$, $username$, CURRENT_TIME, $sku$,$islimit$,0,$itemid$,$sa_agentsid$,$stockid$,'在库','','',$isyj$);

+ 2 - 1
src/custom/restcontroller/webmanage/sale/toolscode/SQL/商品序列号档案更新.sql

@@ -7,7 +7,8 @@ SET
     islimit = $islimit$,
     itemid=$itemid$,
     stockid=$stockid$,
-    sa_agentsid = $sa_agentsid$
+    sa_agentsid = $sa_agentsid$,
+    isyj=$isyj$
 WHERE sa_itemskuid = $sa_itemskuid$ and siteid=$siteid$
 
 

+ 1 - 0
src/custom/restcontroller/webmanage/sale/toolscode/SQL/商品序列号档案详情查询.sql

@@ -6,6 +6,7 @@ SELECT
 	t1.isused,
 	t1.itemid,
     t1.sa_agentsid,
+    t1.isyj,
 	t2.itemno,
 	t2.itemname,
 	t2.spec,

+ 4 - 0
src/custom/restcontroller/webmanage/sale/toolscode/toolscode.java

@@ -130,6 +130,7 @@ public class toolscode extends Controller {
                     sqlFactoryupload.addParameter("islimit", 0);
                     sqlFactoryupload.addParameter("sys_enterpriseid", 0);
                     sqlFactoryupload.addParameter("stockid", 0);
+                    sqlFactoryupload.addParameter("isyj", 0);
 
                     sqllist.add(sqlFactoryupload.getSQL());
                     sqllist.add(DataContrlLog.createLog(this, "sa_itemsku", sa_itemskuid, "导入", "商品序列号导入成功").getSQL());
@@ -189,6 +190,7 @@ public class toolscode extends Controller {
         long itemid = content.getLong("itemid");
         String sku = content.getString("sku");
         boolean islimit = content.getBooleanValue("islimit");
+        boolean isyj = content.getBooleanValue("isyj");
         SQLFactory sqlFactory = new SQLFactory(this, "商品序列号档案新增");
 
         if (sa_itemskuid <= 0 || dbConnect.runSqlQuery("select sa_itemskuid from sa_itemsku where sa_itemskuid=" + sa_itemskuid).isEmpty()) {
@@ -201,6 +203,7 @@ public class toolscode extends Controller {
             sqlFactory.addParameter("itemid", itemid);
             sqlFactory.addParameter("stockid", stockid);
             sqlFactory.addParameter("islimit", islimit);
+            sqlFactory.addParameter("isyj", isyj);
             sqlFactory.addParameter("sku", sku);
             sqlList.add(DataContrlLog.createLog(this, "sa_itemsku", sa_itemskuid, "新增", "商品序列号档案新增成功").getSQL());
         } else {
@@ -222,6 +225,7 @@ public class toolscode extends Controller {
                     sqlFactory.addParameter("sa_agentsid", sa_agentsid);
                     sqlFactory.addParameter("islimit", islimit);
                     sqlFactory.addParameter("itemid", itemid);
+                    sqlFactory.addParameter("isyj", isyj);
                     sqlFactory.addParameter("stockid", stockid);
                     sqlFactory.addParameter("sku", sku);
                     sqlList.add(DataContrlLog.createLog(this, "sa_itemsku", sa_itemskuid, "更新", "商品序列号档案更新成功").getSQL());