Przeglądaj źródła

Merge branch 'develop' into develop-test

# Conflicts:
#	pom.xml
#	src/custom/restcontroller/R.java
shenjingwei 1 miesiąc temu
rodzic
commit
62f0b6c6b5

+ 1 - 1
pom.xml

@@ -108,7 +108,7 @@
         <dependency>
         <dependency>
             <groupId>com.yunlian.yos</groupId>
             <groupId>com.yunlian.yos</groupId>
             <artifactId>yos-core</artifactId>
             <artifactId>yos-core</artifactId>
-            <version>3.4.19</version>
+            <version>3.4.20</version>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>com.microsoft.sqlserver</groupId>
             <groupId>com.microsoft.sqlserver</groupId>

+ 9 - 2
src/custom/beans/stockbill/bills/XSCK.java

@@ -91,6 +91,8 @@ public class XSCK extends BasicBill {
         }
         }
         //库存校验
         //库存校验
         RowsMap invbalsRowsMap = SQLFactory.createQuerySQL(dbConnect, "st_invbal").setWhere("siteid", siteid).setWhere("itemid", itemRows.toArrayList("itemid")).query().toRowsMap("itemid");
         RowsMap invbalsRowsMap = SQLFactory.createQuerySQL(dbConnect, "st_invbal").setWhere("siteid", siteid).setWhere("itemid", itemRows.toArrayList("itemid")).query().toRowsMap("itemid");
+        StringBuffer errmsg = new StringBuffer("");
+        boolean iserr = false;
         for (Row row : itemRows) {
         for (Row row : itemRows) {
             if (!row.getBoolean("isnegative") && row.getBoolean("ismodule")) {
             if (!row.getBoolean("isnegative") && row.getBoolean("ismodule")) {
                 long itemid = row.getLong("itemid");
                 long itemid = row.getLong("itemid");
@@ -98,17 +100,22 @@ public class XSCK extends BasicBill {
                 BigDecimal qty = row.getBigDecimal("qty");
                 BigDecimal qty = row.getBigDecimal("qty");
                 if (!isInStock(ischeck)) {
                 if (!isInStock(ischeck)) {
                     if (!invbalsRowsMap.containsKey(String.valueOf(itemid)) || !invbalsRowsMap.get(String.valueOf(itemid)).toRowsMap("stockid").containsKey(String.valueOf(stockid))) {
                     if (!invbalsRowsMap.containsKey(String.valueOf(itemid)) || !invbalsRowsMap.get(String.valueOf(itemid)).toRowsMap("stockid").containsKey(String.valueOf(stockid))) {
-                        throw new YosException("行【" + row.getString("rowno") + "】不能负库存出库");
+                        errmsg.append("行【" + row.getString("rowno") + "】不能负库存出库;");
+                        iserr = true;
                     } else {
                     } else {
                         BigDecimal invbalqty = invbalsRowsMap.get(String.valueOf(itemid)).toRowsMap("stockid").get(String.valueOf(stockid)).get(0).getBigDecimal("qty");
                         BigDecimal invbalqty = invbalsRowsMap.get(String.valueOf(itemid)).toRowsMap("stockid").get(String.valueOf(stockid)).get(0).getBigDecimal("qty");
                         if (invbalqty.compareTo(qty) < 0) {
                         if (invbalqty.compareTo(qty) < 0) {
-                            throw new YosException("行【" + row.getString("rowno") + "】不能负库存出库");
+                            errmsg.append("行【" + row.getString("rowno") + "】不能负库存出库;");
+                            iserr = true;
                         }
                         }
                     }
                     }
                 }
                 }
 
 
             }
             }
         }
         }
+        if (iserr) {
+            throw new YosException(String.valueOf(errmsg));
+        }
 
 
         if ((ischeck && rb == 1) || (!ischeck && rb == 0)) {
         if ((ischeck && rb == 1) || (!ischeck && rb == 0)) {
 //            if (order_paymentnode.equals("3") && !Accountbalance.judgeBalance(dbConnect, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), itemRows.toRowsMap("sa_orderitemsidnum").get("0").sum("amount"))) {
 //            if (order_paymentnode.equals("3") && !Accountbalance.judgeBalance(dbConnect, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), itemRows.toRowsMap("sa_orderitemsidnum").get("0").sum("amount"))) {

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

@@ -7230,6 +7230,11 @@ public class R {
         public static class v1 {
         public static class v1 {
         }
         }
     }
     }
+
+    public static class ID2026030610111602 {
+        public static class v1 {
+        }
+    }
 }
 }
 
 
 
 

+ 7 - 3
src/custom/restcontroller/sale/order/Order.java

@@ -89,6 +89,10 @@ public class Order extends Controller {
             expressformrowsMap = expressformQuery.query().toRowsMap("sa_orderid");
             expressformrowsMap = expressformQuery.query().toRowsMap("sa_orderid");
         }
         }
 
 
+        SQLFactory sqlFactory2 = new SQLFactory(this, "查询最新的快递信息");
+        sqlFactory2.addParameter_in("sa_orderid",sa_orderids);
+        RowsMap expressformrowsMap2=dbConnect.runSqlQuery(sqlFactory2).toRowsMap("sa_orderid");
+
         RowsMap ContactsRowsMap = beans.order.Order.getContactsRowsMap(this, rows.toArrayList("rec_contactsid", new ArrayList<>()));
         RowsMap ContactsRowsMap = beans.order.Order.getContactsRowsMap(this, rows.toArrayList("rec_contactsid", new ArrayList<>()));
         for (Row row : rows) {
         for (Row row : rows) {
             Rows dataRows = dataRowsMap.getOrDefault(row.getString("sa_orderid"), new Rows());
             Rows dataRows = dataRowsMap.getOrDefault(row.getString("sa_orderid"), new Rows());
@@ -105,9 +109,9 @@ public class Order extends Controller {
                 row.put("contacts", new Row());
                 row.put("contacts", new Row());
             }
             }
             //查询快递信息
             //查询快递信息
-            if (expressformrowsMap.containsKey(row.getString("sa_orderid"))) {
-                row.put("expressform_mailno", expressformrowsMap.get(row.getString("sa_orderid")).get(0).getString("mailno"));
-                row.put("expressform_txlogisticid", expressformrowsMap.get(row.getString("sa_orderid")).get(0).getString("txlogisticid"));
+            if (expressformrowsMap2.containsKey(row.getString("sa_orderid"))) {
+                row.put("expressform_mailno", expressformrowsMap2.get(row.getString("sa_orderid")).get(0).getString("mailno"));
+                row.put("expressform_txlogisticid", expressformrowsMap2.get(row.getString("sa_orderid")).get(0).getString("tracknumber"));
 
 
             } else {
             } else {
                 row.put("expressform_mailno", "");
                 row.put("expressform_mailno", "");

+ 20 - 0
src/custom/restcontroller/sale/order/SQL/查询最新的快递信息.sql

@@ -0,0 +1,20 @@
+SELECT
+    createdate,
+    mailno,
+    tracknumber,
+    sa_orderid
+FROM (
+         SELECT
+             t.createdate,
+             t.mailno,
+             t.tracknumber,
+             t.sa_orderid,
+             ROW_NUMBER() OVER (PARTITION BY t.sa_orderid ORDER BY t.createdate DESC) AS rn
+         FROM (
+                  SELECT DISTINCT t1.createdate,t1.mailno,t1.tracknumber,t2.sa_orderid
+                  FROM st_stockbill t1
+                           INNER JOIN st_stockbill_items t2 ON t2.st_stockbillid=t1.st_stockbillid
+                  WHERE t2.sa_orderid IN $sa_orderid$
+              ) t
+     ) ranked_results
+WHERE rn = 1

+ 8 - 2
src/custom/restcontroller/webmanage/role/role.java

@@ -366,8 +366,11 @@ public class role extends Controller {
     public String roleAuthReportSelect() throws YosException {
     public String roleAuthReportSelect() throws YosException {
         long roleid = content.getLong("roleid");
         long roleid = content.getLong("roleid");
         ArrayList<Long> sys_reportid = dbConnect.runSqlQuery("select sys_reportid from sys_rolereportauth where roleid=" + roleid).toArrayList("sys_reportid", new ArrayList<>());
         ArrayList<Long> sys_reportid = dbConnect.runSqlQuery("select sys_reportid from sys_rolereportauth where roleid=" + roleid).toArrayList("sys_reportid", new ArrayList<>());
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sys_report", "sys_reportid", "name", "type").setTableAlias("t1");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sys_report", "sys_reportid", "name").setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.inner, "sys_systemapp", "t2", "t1.systemappid=t2.systemappid", "systemappname");
         querySQL.addJoinTable(JOINTYPE.inner, "sys_systemapp", "t2", "t1.systemappid=t2.systemappid", "systemappname");
+        querySQL.addJoinTable(JOINTYPE.left, "sys_reporttype", "t3", "t1.sys_reportid = t3.sys_reportid and t3.siteid='" + siteid + "'");
+        querySQL.addQueryFields("type", "group_concat(t3.type separator ',')");
+        querySQL.addGroupBy("t1.sys_reportid", "t1.name", "t2.systemappname");
         querySQL.setWhere("ifnull(t1.siteid, '') = '' or t1.siteid = '" + siteid + "'");
         querySQL.setWhere("ifnull(t1.siteid, '') = '' or t1.siteid = '" + siteid + "'");
         querySQL.setWhere("t1.isused", true);
         querySQL.setWhere("t1.isused", true);
         querySQL.setWhere("t1.sys_reportid", Op.NOT_IN, sys_reportid);
         querySQL.setWhere("t1.sys_reportid", Op.NOT_IN, sys_reportid);
@@ -380,8 +383,11 @@ public class role extends Controller {
     public String roleAuthReportQuery() throws YosException {
     public String roleAuthReportQuery() throws YosException {
         long roleid = content.getLong("roleid");
         long roleid = content.getLong("roleid");
         QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sys_rolereportauth", "sys_reportid").setTableAlias("t1");
         QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sys_rolereportauth", "sys_reportid").setTableAlias("t1");
-        querySQL.addJoinTable(JOINTYPE.inner, "sys_report", "t2", "t1.sys_reportid=t2.sys_reportid", "name", "type");
+        querySQL.addJoinTable(JOINTYPE.inner, "sys_report", "t2", "t1.sys_reportid=t2.sys_reportid", "name");
         querySQL.addJoinTable(JOINTYPE.inner, "sys_systemapp", "t3", "t2.systemappid=t3.systemappid", "systemappname");
         querySQL.addJoinTable(JOINTYPE.inner, "sys_systemapp", "t3", "t2.systemappid=t3.systemappid", "systemappname");
+        querySQL.addJoinTable(JOINTYPE.left, "sys_reporttype", "t4", "t1.sys_reportid = t4.sys_reportid and t4.siteid='" + siteid + "'");
+        querySQL.addQueryFields("type", "group_concat(t4.type separator ',')");
+        querySQL.addGroupBy("t1.sys_reportid", "t2.name", "t3.systemappname");
         querySQL.setWhere("t1.roleid", roleid);
         querySQL.setWhere("t1.roleid", roleid);
         querySQL.setWhere("ifnull(t2.siteid, '') = '' or t2.siteid = '" + siteid + "'");
         querySQL.setWhere("ifnull(t2.siteid, '') = '' or t2.siteid = '" + siteid + "'");
         querySQL.setWhere("t2.isused", true);
         querySQL.setWhere("t2.isused", true);

+ 20 - 0
src/custom/restcontroller/webmanage/sale/accessoryorder/SQL/查询最新的快递信息.sql

@@ -0,0 +1,20 @@
+SELECT
+    createdate,
+    mailno,
+    tracknumber,
+    sa_orderid
+FROM (
+         SELECT
+             t.createdate,
+             t.mailno,
+             t.tracknumber,
+             t.sa_orderid,
+             ROW_NUMBER() OVER (PARTITION BY t.sa_orderid ORDER BY t.createdate DESC) AS rn
+         FROM (
+                  SELECT DISTINCT t1.createdate,t1.mailno,t1.tracknumber,t2.sa_orderid
+                  FROM st_stockbill t1
+                           INNER JOIN st_stockbill_items t2 ON t2.st_stockbillid=t1.st_stockbillid
+                  WHERE t2.sa_orderid IN $sa_orderid$
+              ) t
+     ) ranked_results
+WHERE rn = 1

+ 8 - 3
src/custom/restcontroller/webmanage/sale/accessoryorder/accessoryorder.java

@@ -161,6 +161,11 @@ public class accessoryorder extends Controller {
             expressformrowsMap = expressformQuery.query().toRowsMap("sa_orderid");
             expressformrowsMap = expressformQuery.query().toRowsMap("sa_orderid");
         }
         }
 
 
+        SQLFactory sqlFactory = new SQLFactory(this, "查询最新的快递信息");
+        sqlFactory.addParameter_in("sa_orderid",rows.toArrayList("sa_orderid"));
+        RowsMap expressformrowsMap2=dbConnect.runSqlQuery(sqlFactory).toRowsMap("sa_orderid");
+
+
         //查询区域信息
         //查询区域信息
 //        QuerySQL areaQuery = SQLFactory.createQuerySQL(this, "sa_salearea", "areanum","areaname","areafullname").setTableAlias("t1");
 //        QuerySQL areaQuery = SQLFactory.createQuerySQL(this, "sa_salearea", "areanum","areaname","areafullname").setTableAlias("t1");
 //        areaQuery.addJoinTable(JOINTYPE.inner, "sys_enterprise_tradefield ", "t2", "t2.sa_saleareaid = t1.sa_saleareaid","sys_enterpriseid");
 //        areaQuery.addJoinTable(JOINTYPE.inner, "sys_enterprise_tradefield ", "t2", "t2.sa_saleareaid = t1.sa_saleareaid","sys_enterpriseid");
@@ -219,9 +224,9 @@ public class accessoryorder extends Controller {
             if (expressformrowsMap.containsKey(row.getString("sa_orderid"))) {
             if (expressformrowsMap.containsKey(row.getString("sa_orderid"))) {
                 row.put("expressform", expressformrowsMap.get(row.getString("sa_orderid")).get(0));
                 row.put("expressform", expressformrowsMap.get(row.getString("sa_orderid")).get(0));
             }
             }
-            if (expressformrowsMap.containsKey(row.getString("sa_orderid"))) {
-                row.put("expressform_mailno", expressformrowsMap.get(row.getString("sa_orderid")).get(0).getString("mailno"));
-                row.put("expressform_txlogisticid", expressformrowsMap.get(row.getString("sa_orderid")).get(0).getString("txlogisticid"));
+            if (expressformrowsMap2.containsKey(row.getString("sa_orderid"))) {
+                row.put("expressform_mailno", expressformrowsMap2.get(row.getString("sa_orderid")).get(0).getString("mailno"));
+                row.put("expressform_txlogisticid", expressformrowsMap2.get(row.getString("sa_orderid")).get(0).getString("tracknumber"));
 
 
             } else {
             } else {
                 row.put("expressform_mailno", "");
                 row.put("expressform_mailno", "");

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

@@ -168,6 +168,7 @@ public class dbstockbill extends Controller {
             if (reportMap.containsKey(row.getLong("st_dbstockbillid"))) {
             if (reportMap.containsKey(row.getLong("st_dbstockbillid"))) {
                 row.put("printcount", reportMap.get(row.getLong("st_dbstockbillid")));
                 row.put("printcount", reportMap.get(row.getLong("st_dbstockbillid")));
             }
             }
+            row.putIfAbsent("printcount", 0);
         }
         }
 
 
         return getSucReturnObject().setData(rows).toString();
         return getSucReturnObject().setData(rows).toString();

+ 44 - 34
src/custom/restcontroller/webmanage/sale/expressform/expressform.java

@@ -3,6 +3,7 @@ package restcontroller.webmanage.sale.expressform;
 import beans.attachment.Attachment;
 import beans.attachment.Attachment;
 import beans.data.BatchDeleteErr;
 import beans.data.BatchDeleteErr;
 import beans.datacontrllog.DataContrlLog;
 import beans.datacontrllog.DataContrlLog;
+import beans.report.Report;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.JSONObject;
 import common.Controller;
 import common.Controller;
@@ -71,13 +72,13 @@ public class expressform extends Controller {
             }
             }
             Rows rcvRows = dbConnect.runSqlQuery("select * from sys_enterprise_contacts where workaddress=1 and sys_enterpriseid=" + sys_enterpriseid + " order by case when type='配件' then 1 else 0 end " + orderby);
             Rows rcvRows = dbConnect.runSqlQuery("select * from sys_enterprise_contacts where workaddress=1 and sys_enterpriseid=" + sys_enterpriseid + " order by case when type='配件' then 1 else 0 end " + orderby);
             if (rcvRows.isNotEmpty()) {
             if (rcvRows.isNotEmpty()) {
-                rcv_name = StringUtils.isBlank(rcvRows.get(0).getString("name"))?rcv_name:rcvRows.get(0).getString("name");
-                rcv_phone =StringUtils.isBlank(rcvRows.get(0).getString("phonenumber"))?rcv_phone:rcvRows.get(0).getString("phonenumber");
-                rcv_mobile =StringUtils.isBlank(rcvRows.get(0).getString("telephone"))?rcv_mobile:rcvRows.get(0).getString("telephone");
-                rcv_prov =StringUtils.isBlank(rcvRows.get(0).getString("province"))?rcv_prov:rcvRows.get(0).getString("province");
-                rcv_city = StringUtils.isBlank(rcvRows.get(0).getString("city"))?rcv_city:rcvRows.get(0).getString("city");
-                rcv_county = StringUtils.isBlank(rcvRows.get(0).getString("county"))?rcv_county:rcvRows.get(0).getString("county");
-                rcv_address =StringUtils.isBlank(rcvRows.get(0).getString("address"))?rcv_address:rcvRows.get(0).getString("address");
+                rcv_name = StringUtils.isBlank(rcvRows.get(0).getString("name")) ? rcv_name : rcvRows.get(0).getString("name");
+                rcv_phone = StringUtils.isBlank(rcvRows.get(0).getString("phonenumber")) ? rcv_phone : rcvRows.get(0).getString("phonenumber");
+                rcv_mobile = StringUtils.isBlank(rcvRows.get(0).getString("telephone")) ? rcv_mobile : rcvRows.get(0).getString("telephone");
+                rcv_prov = StringUtils.isBlank(rcvRows.get(0).getString("province")) ? rcv_prov : rcvRows.get(0).getString("province");
+                rcv_city = StringUtils.isBlank(rcvRows.get(0).getString("city")) ? rcv_city : rcvRows.get(0).getString("city");
+                rcv_county = StringUtils.isBlank(rcvRows.get(0).getString("county")) ? rcv_county : rcvRows.get(0).getString("county");
+                rcv_address = StringUtils.isBlank(rcvRows.get(0).getString("address")) ? rcv_address : rcvRows.get(0).getString("address");
             }
             }
             expressformid = createTableID(tableName);
             expressformid = createTableID(tableName);
             InsertSQL insertSQL = SQLFactory.createInsertSQL(this, tableName);
             InsertSQL insertSQL = SQLFactory.createInsertSQL(this, tableName);
@@ -157,9 +158,9 @@ public class expressform extends Controller {
                     updateSQL.setDateValue("changedate");
                     updateSQL.setDateValue("changedate");
                     sqlList.add(updateSQL.getSQL());
                     sqlList.add(updateSQL.getSQL());
 
 
-                    Rows expressform_stockbillrows = dbConnect.runSqlQuery("select * from sa_expressform_stockbill where expressformid="+expressformid);
-                    for (Row row:expressform_stockbillrows) {
-                        sqlList.add("update st_stockbill set txlogisticid='"+rows.get(0).getString("txlogisticid")+"',mailno='"+mailno+"' where st_stockbillid="+row.getLong("st_stockbillid"));
+                    Rows expressform_stockbillrows = dbConnect.runSqlQuery("select * from sa_expressform_stockbill where expressformid=" + expressformid);
+                    for (Row row : expressform_stockbillrows) {
+                        sqlList.add("update st_stockbill set txlogisticid='" + rows.get(0).getString("txlogisticid") + "',mailno='" + mailno + "' where st_stockbillid=" + row.getLong("st_stockbillid"));
                     }
                     }
                     sqlList.add(DataContrlLog.createLog(this, "expressform", expressformid, "更新", "快递信息更新成功").getSQL());
                     sqlList.add(DataContrlLog.createLog(this, "expressform", expressformid, "更新", "快递信息更新成功").getSQL());
                 } else {
                 } else {
@@ -229,6 +230,15 @@ public class expressform extends Controller {
         querySQL.setPage(pageSize, pageNumber);
         querySQL.setPage(pageSize, pageNumber);
         Rows rows = querySQL.query();
         Rows rows = querySQL.query();
 
 
+        ArrayList<Long> ids = rows.toArrayList("expressformid", new ArrayList<>());
+        HashMap<Long, Integer> reportMap = Report.getViewCount(this, "expressform", ids);
+        for (Row row : rows) {
+            if (reportMap.containsKey(row.getLong("expressformid"))) {
+                row.put("printcount", reportMap.get(row.getLong("expressformid")));
+            }
+            row.putIfAbsent("printcount", 0);
+        }
+
         return getSucReturnObject().setData(rows).toString();
         return getSucReturnObject().setData(rows).toString();
     }
     }
 
 
@@ -258,7 +268,7 @@ public class expressform extends Controller {
             }
             }
             ArrayList<String> sqllist = new ArrayList<>();
             ArrayList<String> sqllist = new ArrayList<>();
             sqllist.add("delete from expressform where siteid='" + siteid + "' and expressformid=" + expressformid);
             sqllist.add("delete from expressform where siteid='" + siteid + "' and expressformid=" + expressformid);
-            sqllist.add("delete from sa_expressform_stockbill where siteid='" + siteid + "' and expressformid="+expressformid);
+            sqllist.add("delete from sa_expressform_stockbill where siteid='" + siteid + "' and expressformid=" + expressformid);
             //sqllist.add("delete from expressformbillcodes where siteid='" + siteid + "' and expressformid=" + expressformid);
             //sqllist.add("delete from expressformbillcodes where siteid='" + siteid + "' and expressformid=" + expressformid);
             dbConnect.runSqlUpdate(sqllist);
             dbConnect.runSqlUpdate(sqllist);
         }
         }
@@ -318,7 +328,7 @@ public class expressform extends Controller {
         querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.sys_enterpriseid = t3.sys_enterpriseid AND t1.siteid = t3.siteid",
         querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.sys_enterpriseid = t3.sys_enterpriseid AND t1.siteid = t3.siteid",
                 "agentnum");
                 "agentnum");
         querySQL.addJoinTable(JOINTYPE.inner, "sa_expressform_stockbill", "t4", "t1.st_stockbillid = t4.st_stockbillid AND t1.siteid = t4.siteid");
         querySQL.addJoinTable(JOINTYPE.inner, "sa_expressform_stockbill", "t4", "t1.st_stockbillid = t4.st_stockbillid AND t1.siteid = t4.siteid");
-        querySQL.addJoinTable(JOINTYPE.left, "sys_department", "t5", "t5.departmentid = t1.departmentid AND t1.siteid = t5.siteid","depname");
+        querySQL.addJoinTable(JOINTYPE.left, "sys_department", "t5", "t5.departmentid = t1.departmentid AND t1.siteid = t5.siteid", "depname");
 
 
         querySQL.setWhere("t1.siteid", siteid);
         querySQL.setWhere("t1.siteid", siteid);
         querySQL.setWhere("t1.type='销售出库' and t4.expressformid='" + expressformid + "'");
         querySQL.setWhere("t1.type='销售出库' and t4.expressformid='" + expressformid + "'");
@@ -358,10 +368,10 @@ public class expressform extends Controller {
             if (StringUtils.isNotBlank(row.getString("txlogisticid"))) {
             if (StringUtils.isNotBlank(row.getString("txlogisticid"))) {
                 //return getErrReturnObject().setErrMsg("销售出库单" + row.getString("billno") + ",已关联快递信息单!,不得重复关联!").toString();
                 //return getErrReturnObject().setErrMsg("销售出库单" + row.getString("billno") + ",已关联快递信息单!,不得重复关联!").toString();
             }
             }
-            InsertSQL insertSQL =SQLFactory.createInsertSQL(this,"sa_expressform_stockbill");
+            InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_expressform_stockbill");
             insertSQL.setUniqueid(createTableID("sa_expressform_stockbill"));
             insertSQL.setUniqueid(createTableID("sa_expressform_stockbill"));
             insertSQL.setSiteid(siteid);
             insertSQL.setSiteid(siteid);
-            insertSQL.setValue("st_stockbillid",  row.getLong("st_stockbillid"));
+            insertSQL.setValue("st_stockbillid", row.getLong("st_stockbillid"));
             insertSQL.setValue("expressformid", expressformid);
             insertSQL.setValue("expressformid", expressformid);
             sqlList.add(insertSQL.getSQL());
             sqlList.add(insertSQL.getSQL());
             sqlList.add("update st_stockbill set txlogisticid='" + txlogisticid + "',mailno='" + mailno + "' where st_stockbillid=" + row.getLong("st_stockbillid"));
             sqlList.add("update st_stockbill set txlogisticid='" + txlogisticid + "',mailno='" + mailno + "' where st_stockbillid=" + row.getLong("st_stockbillid"));
@@ -387,7 +397,7 @@ public class expressform extends Controller {
             return getErrReturnObject().setErrMsg("未选中任何销售出库单!").toString();
             return getErrReturnObject().setErrMsg("未选中任何销售出库单!").toString();
         }
         }
         //sqlList.add("update st_stockbill set txlogisticid='',mailno='' where st_stockbillid in" + st_stockbillids.toJSONString().replace("[", "(").replace("]", ")"));
         //sqlList.add("update st_stockbill set txlogisticid='',mailno='' where st_stockbillid in" + st_stockbillids.toJSONString().replace("[", "(").replace("]", ")"));
-        sqlList.add("delete from sa_expressform_stockbill where expressformid="+expressformid+" and st_stockbillid in" + st_stockbillids.toJSONString().replace("[", "(").replace("]", ")"));
+        sqlList.add("delete from sa_expressform_stockbill where expressformid=" + expressformid + " and st_stockbillid in" + st_stockbillids.toJSONString().replace("[", "(").replace("]", ")"));
         dbConnect.runSqlUpdate(sqlList);
         dbConnect.runSqlUpdate(sqlList);
         return getSucReturnObject().toString();
         return getSucReturnObject().toString();
     }
     }
@@ -481,40 +491,40 @@ public class expressform extends Controller {
         JSONArray expressformids = content.getJSONArray("expressformids");
         JSONArray expressformids = content.getJSONArray("expressformids");
         ArrayList<String> sqlList = new ArrayList<>();
         ArrayList<String> sqlList = new ArrayList<>();
         QuerySQL querySQL = SQLFactory.createQuerySQL(this, "expressform", "*");
         QuerySQL querySQL = SQLFactory.createQuerySQL(this, "expressform", "*");
-        querySQL.addJoinTable(JOINTYPE.left, "sv_agents", "t2", " t1.sys_enterpriseid = t2.sys_enterpriseid and t1.siteid = t2.siteid","agentnum","abbreviation");
+        querySQL.addJoinTable(JOINTYPE.left, "sv_agents", "t2", " t1.sys_enterpriseid = t2.sys_enterpriseid and t1.siteid = t2.siteid", "agentnum", "abbreviation");
         querySQL.setTableAlias("t1");
         querySQL.setTableAlias("t1");
         querySQL.setWhere("t1.siteid", siteid);
         querySQL.setWhere("t1.siteid", siteid);
         querySQL.setWhere("t1.expressformid", expressformids);
         querySQL.setWhere("t1.expressformid", expressformids);
         Rows rows = querySQL.query();
         Rows rows = querySQL.query();
         BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, expressformids.size());
         BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, expressformids.size());
-        for(Row row : rows){
+        for (Row row : rows) {
             if (row.getBoolean("success")) {
             if (row.getBoolean("success")) {
-                batchDeleteErr.addErr(row.getString("txlogisticid"),row.getString("agentnum"),row.getString("abbreviation"), "该快递信息单已成功申请电子面单");
+                batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "该快递信息单已成功申请电子面单");
                 continue;
                 continue;
             } else if (StringUtils.isNotBlank(row.getString("mailno"))) {
             } else if (StringUtils.isNotBlank(row.getString("mailno"))) {
-                batchDeleteErr.addErr(row.getString("txlogisticid"),row.getString("agentnum"),row.getString("abbreviation"), "该快递信息单已有快递面单单号,不需要重复申请!");
+                batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "该快递信息单已有快递面单单号,不需要重复申请!");
                 continue;
                 continue;
             } else if ("关闭".equals(row.getString("status"))) {
             } else if ("关闭".equals(row.getString("status"))) {
-                batchDeleteErr.addErr(row.getString("txlogisticid"),row.getString("agentnum"),row.getString("abbreviation"), "该快递信息单已关闭,不能申请电子面单!");
+                batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "该快递信息单已关闭,不能申请电子面单!");
                 continue;
                 continue;
             } else if (!"YTO".equalsIgnoreCase(row.getString("logisticproviderid"))) {
             } else if (!"YTO".equalsIgnoreCase(row.getString("logisticproviderid"))) {
-                batchDeleteErr.addErr(row.getString("txlogisticid"),row.getString("agentnum"),row.getString("abbreviation"), "目前只支持申请圆通的电子面单");
+                batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "目前只支持申请圆通的电子面单");
                 continue;
                 continue;
             }
             }
             String ordertype = row.getString("ordertype");
             String ordertype = row.getString("ordertype");
             Rows expressvalRows = dbConnect.runSqlQuery("select * from expressval where siteid='" + siteid + "' and logisticproviderid='YTO' and ordertype='" + ordertype + "'");
             Rows expressvalRows = dbConnect.runSqlQuery("select * from expressval where siteid='" + siteid + "' and logisticproviderid='YTO' and ordertype='" + ordertype + "'");
             if (expressvalRows.isEmpty()) {
             if (expressvalRows.isEmpty()) {
-                batchDeleteErr.addErr(row.getString("txlogisticid"),row.getString("agentnum"),row.getString("abbreviation"), "数据表'expressVal'中,缺少圆通快递开放平台的对接信息! 发货方式: " + ordertype + ";快递公司: YTO");
+                batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "数据表'expressVal'中,缺少圆通快递开放平台的对接信息! 发货方式: " + ordertype + ";快递公司: YTO");
                 continue;
                 continue;
             }
             }
             Rows expresssdrRows = dbConnect.runSqlQuery("select * from expresssdr where siteid='" + siteid + "' and expresssdrid=" + rows.get(0).getLong("expresssdrid"));
             Rows expresssdrRows = dbConnect.runSqlQuery("select * from expresssdr where siteid='" + siteid + "' and expresssdrid=" + rows.get(0).getLong("expresssdrid"));
 
 
             if (expresssdrRows.isEmpty()) {
             if (expresssdrRows.isEmpty()) {
-                batchDeleteErr.addErr(row.getString("txlogisticid"),row.getString("agentnum"),row.getString("abbreviation"), "未设置默认发件人信息");
+                batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "未设置默认发件人信息");
                 continue;
                 continue;
             }
             }
             if (StringUtils.isBlank(row.getString("ordertype"))) {
             if (StringUtils.isBlank(row.getString("ordertype"))) {
-                batchDeleteErr.addErr(row.getString("txlogisticid"),row.getString("agentnum"),row.getString("abbreviation"), "未设置快递付款类型");
+                batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "未设置快递付款类型");
                 continue;
                 continue;
             }
             }
             String url_mailno = expressvalRows.get(0).getString("url_mailno");
             String url_mailno = expressvalRows.get(0).getString("url_mailno");
@@ -549,7 +559,7 @@ public class expressform extends Controller {
             Item item = new Item(row.getString("itemname"), row.getInteger("number"), row.getDouble("itemsweight"));
             Item item = new Item(row.getString("itemname"), row.getInteger("number"), row.getDouble("itemsweight"));
             requestOrder.setItems(new Item[]{item});
             requestOrder.setItems(new Item[]{item});
             //Map<String, Object> resultMap = new HashMap<>();
             //Map<String, Object> resultMap = new HashMap<>();
-            Map<String, Object> resultMap= client.sendRequestForMailNo(requestOrder);
+            Map<String, Object> resultMap = client.sendRequestForMailNo(requestOrder);
             if (resultMap != null) {
             if (resultMap != null) {
                 String code = (String) resultMap.get("code");
                 String code = (String) resultMap.get("code");
                 if ("200".equals(code)) {//成功
                 if ("200".equals(code)) {//成功
@@ -567,9 +577,9 @@ public class expressform extends Controller {
                     updateSQL.setValue("success", 1);
                     updateSQL.setValue("success", 1);
                     updateSQL.setValue("changeby", username);
                     updateSQL.setValue("changeby", username);
                     updateSQL.setDateValue("changedate");
                     updateSQL.setDateValue("changedate");
-                    Rows expressform_stockbillrows = dbConnect.runSqlQuery("select * from sa_expressform_stockbill where expressformid="+row.getLong("expressformid"));
-                    for (Row row1:expressform_stockbillrows) {
-                        sqlList.add("update st_stockbill set txlogisticid='"+row.getString("txlogisticid")+"',mailno='"+(String) resultMap.get("mailNo")+"' where st_stockbillid="+row1.getLong("st_stockbillid"));
+                    Rows expressform_stockbillrows = dbConnect.runSqlQuery("select * from sa_expressform_stockbill where expressformid=" + row.getLong("expressformid"));
+                    for (Row row1 : expressform_stockbillrows) {
+                        sqlList.add("update st_stockbill set txlogisticid='" + row.getString("txlogisticid") + "',mailno='" + (String) resultMap.get("mailNo") + "' where st_stockbillid=" + row1.getLong("st_stockbillid"));
                     }
                     }
 
 
                     sqlList.add(updateSQL.getSQL());
                     sqlList.add(updateSQL.getSQL());
@@ -584,19 +594,19 @@ public class expressform extends Controller {
                     updateSQL.setValue("changeby", username);
                     updateSQL.setValue("changeby", username);
                     updateSQL.setDateValue("changedate");
                     updateSQL.setDateValue("changedate");
                     sqlList.add(updateSQL.getSQL());
                     sqlList.add(updateSQL.getSQL());
-                    batchDeleteErr.addErr(row.getString("txlogisticid"),row.getString("agentnum"),row.getString("abbreviation"),  (String) resultMap.get("reason"));
+                    batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), (String) resultMap.get("reason"));
                     continue;
                     continue;
                 }
                 }
             } else {
             } else {
-                batchDeleteErr.addErr(row.getString("txlogisticid"),row.getString("agentnum"),row.getString("abbreviation"), "请求电子面单接口超时");
+                batchDeleteErr.addErr(row.getString("txlogisticid"), row.getString("agentnum"), row.getString("abbreviation"), "请求电子面单接口超时");
                 continue;
                 continue;
             }
             }
         }
         }
         dbConnect.runSqlUpdate(sqlList);
         dbConnect.runSqlUpdate(sqlList);
-        HashMap<String,Object> result=new HashMap<>();
-        String success= "共申请"+expressformids.size()+"张圆通电子面单号,其中失败"+ batchDeleteErr.size()+"张!";
-        result.put("success",success);
-        result.put("errinfo",batchDeleteErr.getReturnObject());
+        HashMap<String, Object> result = new HashMap<>();
+        String success = "共申请" + expressformids.size() + "张圆通电子面单号,其中失败" + batchDeleteErr.size() + "张!";
+        result.put("success", success);
+        result.put("errinfo", batchDeleteErr.getReturnObject());
         return getSucReturnObject().setData(result).toString();
         return getSucReturnObject().setData(result).toString();
     }
     }
 
 

+ 287 - 1
src/custom/restcontroller/webmanage/sale/order/Order.java

@@ -2174,6 +2174,291 @@ public class Order extends Controller {
         return getSucReturnObject().setData(result).toString();
         return getSucReturnObject().setData(result).toString();
     }
     }
 
 
+    @API(title = "批量一键出库_配件2", apiversion = R.ID2026030610111602.v1.class)
+    public String oneClickcreateStockbills_pj2() throws YosException {
+        JSONArray sa_orderitemsids = content.getJSONArray("sa_orderitemsids");
+        JSONArray noneeddeliverys = content.getJSONArray("noneeddeliverys");
+//        String outplace=content.getString("outplace");
+        ArrayList<String> sqlList = new ArrayList<>();
+        QuerySQL orderQuerySQL = SQLFactory.createQuerySQL(this, "sa_order", "sa_orderid", "sys_enterpriseid", "sys_enterprise_financeid", "rec_contactsid", "logisticsmethod", "invoicetaxno", "invoicename", "invoiceaddress", "contact", "address", "phonenumber", "province", "city", "county", "remarks");
+        orderQuerySQL.setTableAlias("t1");
+        orderQuerySQL.addJoinTable(JOINTYPE.inner, "sa_orderitems", "t2", "t2.sa_orderid=t1.sa_orderid and t1.siteid=t2.siteid", "sa_orderitemsid", "itemid", "undeliqty", "defaultprice", "itemno", "itemname", "model", "price", "delivery");
+        orderQuerySQL.addJoinTable(JOINTYPE.inner, "plm_item", "t3", "t2.itemid=t3.itemid and t3.siteid=t2.siteid", "skucontrol", "outplace");
+        orderQuerySQL.setWhere("t1.siteid", siteid);
+        orderQuerySQL.setWhere("t2.sa_orderitemsid", sa_orderitemsids);
+        orderQuerySQL.setWhere("t1.status='审核' and t1.type='配件订单' and t2.undeliqty>0 and ifnull(t2.delivery,'')!='' and t2.isclose=0");
+        orderQuerySQL.addQueryFields("remarksdetail", "t2.remarks");
+        Rows orderRows = orderQuerySQL.query();
+
+        QuerySQL orderQuerySQL_jundge = SQLFactory.createQuerySQL(this, "sa_order", "sa_orderid", "status", "sonum", "type", "delivery");
+        orderQuerySQL_jundge.setTableAlias("t1");
+        orderQuerySQL_jundge.addJoinTable(JOINTYPE.inner, "sa_orderitems", "t2", "t2.sa_orderid=t1.sa_orderid and t1.siteid=t2.siteid", "sa_orderitemsid", "itemid", "undeliqty", "defaultprice", "remarks", "itemno", "itemname", "model", "price", "rowno", "isclose");
+        orderQuerySQL_jundge.addJoinTable(JOINTYPE.left, "sa_agents", "t4", "t4.sys_enterpriseid=t1.sys_enterpriseid and t4.siteid=t1.siteid", "agentnum");
+        orderQuerySQL_jundge.addJoinTable(JOINTYPE.left, "sys_enterprise", "t5", "t5.sys_enterpriseid=t4.sys_enterpriseid and t5.siteid=t4.siteid", "enterprisename", "abbreviation");
+        orderQuerySQL_jundge.setWhere("t1.siteid", siteid);
+        orderQuerySQL_jundge.setWhere("t2.sa_orderitemsid", sa_orderitemsids);
+        Rows orderRows_jundge = orderQuerySQL_jundge.query();
+        Rows errRows = new Rows();
+        for (Row row : orderRows_jundge) {
+            Row errRow = new Row();
+            if (!row.getString("status").equals("审核")) {
+                errRow.put("sa_orderid", row.getLong("sa_orderid"));
+                errRow.put("sonum", row.getString("sonum"));
+                errRow.put("agentnum", row.getString("agentnum"));
+                errRow.put("status", row.getString("status"));
+                errRow.put("abbreviation", row.getString("abbreviation"));
+                errRow.put("delivery", row.getString("delivery"));
+                errRow.put("errreason", "非审核状态不可发货");
+                errRows.add(errRow);
+            } else if (!row.getString("type").equals("配件订单")) {
+                errRow.put("sa_orderid", row.getLong("sa_orderid"));
+                errRow.put("sonum", row.getString("sonum"));
+                errRow.put("agentnum", row.getString("agentnum"));
+                errRow.put("status", row.getString("status"));
+                errRow.put("abbreviation", row.getString("abbreviation"));
+                errRow.put("delivery", row.getString("delivery"));
+                errRow.put("errreason", "非配件申请单不可发货");
+                errRows.add(errRow);
+            } else if (row.getDouble("undeliqty") <= 0) {
+                errRow.put("sa_orderid", row.getLong("sa_orderid"));
+                errRow.put("sonum", row.getString("sonum"));
+                errRow.put("agentnum", row.getString("agentnum"));
+                errRow.put("status", row.getString("status"));
+                errRow.put("abbreviation", row.getString("abbreviation"));
+                errRow.put("delivery", row.getString("delivery"));
+                errRow.put("errreason", "行号" + row.getString("rowno") + "的商品已发货,不可发货");
+                errRows.add(errRow);
+            } else if (row.getBoolean("isclose")) {
+                errRow.put("sa_orderid", row.getLong("sa_orderid"));
+                errRow.put("sonum", row.getString("sonum"));
+                errRow.put("agentnum", row.getString("agentnum"));
+                errRow.put("status", row.getString("status"));
+                errRow.put("abbreviation", row.getString("abbreviation"));
+                errRow.put("delivery", row.getString("delivery"));
+                errRow.put("errreason", "行号" + row.getString("rowno") + "的商品已关闭,不可发货");
+                errRows.add(errRow);
+            } else if (StringUtils.isBlank(row.getString("delivery"))) {
+                errRow.put("sa_orderid", row.getLong("sa_orderid"));
+                errRow.put("sonum", row.getString("sonum"));
+                errRow.put("agentnum", row.getString("agentnum"));
+                errRow.put("status", row.getString("status"));
+                errRow.put("abbreviation", row.getString("abbreviation"));
+                errRow.put("delivery", row.getString("delivery"));
+                errRow.put("errreason", "行号" + row.getString("rowno") + "的商品发货方式为空,不可发货");
+                errRows.add(errRow);
+            }
+//            else if(row.getString("delivery").equals("随货")){
+//                errRow.put("sa_orderid",row.getLong("sa_orderid"));
+//                errRow.put("sonum",row.getString("sonum"));
+//                errRow.put("agentnum",row.getString("agentnum"));
+//                errRow.put("status",row.getString("status"));
+//                errRow.put("abbreviation",row.getString("abbreviation"));
+//                errRow.put("delivery",row.getString("delivery"));
+//                errRow.put("errreason","行号"+row.getString("rowno")+"的商品发货方式为随货,不可发货");
+//                errRows.add(errRow);
+//            }
+        }
+
+
+        QuerySQL stockbillQuerySQL = SQLFactory.createQuerySQL(this, "st_stockbill_items");
+        stockbillQuerySQL.setTableAlias("t1");
+        stockbillQuerySQL.addJoinTable(JOINTYPE.inner, "st_stockbill", "t2", "t2.st_stockbillid=t1.st_stockbillid and t1.siteid=t2.siteid");
+        stockbillQuerySQL.addJoinTable(JOINTYPE.left, "sa_orderitems", "t4", "t4.sa_orderitemsid=t1.sa_orderitemsid and t4.siteid=t1.siteid", "sa_orderid");
+        stockbillQuerySQL.setWhere("t1.siteid", siteid);
+        if (orderRows.toArrayList("sa_orderitemsid").isEmpty()) {
+            stockbillQuerySQL.setWhere("1=2");
+        } else {
+            stockbillQuerySQL.setWhere("t1.sa_orderitemsid", orderRows.toArrayList("sa_orderitemsid"));
+        }
+        Rows stockbillRows = stockbillQuerySQL.query();
+        RowsMap stockbillRowsMap = stockbillRows.toRowsMap("sa_orderitemsid");
+        RowsMap orderRows_jundgeMap = orderRows_jundge.toRowsMap("sa_orderid");
+        for (Row row : stockbillRows) {
+            Row errRow = new Row();
+            if (orderRows_jundgeMap.containsKey(row.getString("sa_orderid"))) {
+                errRow.put("sa_orderid", orderRows_jundgeMap.get(row.getString("sa_orderid")).get(0).getLong("sa_orderid"));
+                errRow.put("sonum", orderRows_jundgeMap.get(row.getString("sa_orderid")).get(0).getString("sonum"));
+                errRow.put("agentnum", orderRows_jundgeMap.get(row.getString("sa_orderid")).get(0).getString("agentnum"));
+                errRow.put("status", orderRows_jundgeMap.get(row.getString("sa_orderid")).get(0).getString("status"));
+                errRow.put("abbreviation", orderRows_jundgeMap.get(row.getString("sa_orderid")).get(0).getString("abbreviation"));
+                errRow.put("delivery", orderRows_jundgeMap.get(row.getString("sa_orderid")).get(0).getString("delivery"));
+                errRow.put("errreason", "已存在出库单");
+                errRows.add(errRow);
+            }
+        }
+
+        RowsMap errRowsMap = errRows.toRowsMap("sa_orderid");
+        Set<String> errSet = errRowsMap.keySet();
+        for (String sa_orderid : errSet) {
+            if (errRowsMap.get(sa_orderid).size() > 1) {
+                String errreason = String.join(", ", errRowsMap.get(sa_orderid).toArrayList("errreason"));
+                for (Row row : errRowsMap.get(sa_orderid)) {
+                    row.put("errreason", errreason);
+                }
+            }
+        }
+        LinkedHashSet<Row> linkedSet = new LinkedHashSet<>(errRows);
+        Rows errRows_result = new Rows();
+        for (Row row : linkedSet) {
+            errRows_result.add(row);
+        }
+
+        Rows orderRows_result = new Rows();
+        for (Row row : orderRows) {
+            if (!stockbillRowsMap.containsKey(row.getString("sa_orderitemsid"))) {
+                orderRows_result.add(row);
+            }
+        }
+//        if(stockbillRows.isNotEmpty()){
+//            return getErrReturnObject().setErrMsg("存在配件申请单明细已生成销售出库单,无法一键出库").toString();
+//        }
+
+        //RowsMap enterprisefinancerowsMap =enterprisefinancerows.toRowsMap("sys_enterpriseid");
+        RowsMap addressMap = orderRows_result.toRowsMap("address");
+        RowsMap deliveryrowsMap = orderRows_result.toRowsMap("delivery");
+        Set<String> addressSet = addressMap.keySet();
+        Set<String> deliverySet = deliveryrowsMap.keySet();
+        for (Object object : noneeddeliverys) {
+            deliverySet.remove((String) object);
+        }
+        int stockbillcount = 0;
+
+        QuerySQL accountbalanceQuerySQL = SQLFactory.createQuerySQL(this, "sa_accountbalance", "*");
+        accountbalanceQuerySQL.setTableAlias("t1");
+        accountbalanceQuerySQL.addJoinTable(JOINTYPE.inner, "sa_accountclass", "t2", "t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid");
+        accountbalanceQuerySQL.setWhere("t1.siteid", siteid);
+        accountbalanceQuerySQL.setWhere("t2.accountname='现金账户'");
+        accountbalanceQuerySQL.setWhere("t1.sys_enterpriseid", orderRows_result.toArrayList("sys_enterpriseid"));
+        Rows accountbalancerows = accountbalanceQuerySQL.query();
+        RowsMap accountbalancerowsMap = accountbalancerows.toRowsMap("sys_enterpriseid");
+
+        Rows departmenthrrows = dbConnect.runSqlQuery("select t1.*,t2.depname from sys_departmenthrid t1 left join sys_department t2 on t1.departmentid=t2.departmentid where t1.hrid=" + hrid);
+        for (String address : addressSet) {
+            for (String delivery : deliverySet) {
+                if (addressMap.get(address).toRowsMap("delivery").containsKey(delivery)) {
+                    Rows orderdetailRows = addressMap.get(address).toRowsMap("delivery").get(delivery);
+                    long st_stockbillid = createTableID("st_stockbill");
+                    InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill");
+                    insertSQL.setUniqueid(st_stockbillid);
+                    insertSQL.setSiteid(siteid);
+                    insertSQL.setValue("sys_enterpriseid", orderdetailRows.get(0).getLong("sys_enterpriseid"));
+                    insertSQL.setValue("rec_contactsid", orderdetailRows.get(0).getLong("rec_contactsid"));
+                    insertSQL.setValue("sa_accountclassid", accountbalancerows.isNotEmpty() ? accountbalancerows.get(0).getLong("sa_accountclassid") : 0);
+                    insertSQL.setValue("departmentid", departmenthrrows.isNotEmpty() ? departmenthrrows.get(0).getLong("departmentid") : 0);
+                    insertSQL.setValue("stockid", 0);
+                    insertSQL.setValue("type", "销售出库");
+                    insertSQL.setValue("typemx", "");
+                    insertSQL.setValue("sa_supplierid", 0);
+                    insertSQL.setValue("rb", 1);
+                    insertSQL.setValue("remarks", orderdetailRows.toJsonArray("remarks").toString().replace("[", "").replace("]", "").replace("\"", ""));
+                    insertSQL.setDateValue("billdate");
+                    insertSQL.setValue("billno", createBillCode("stockbill"));
+
+
+                    insertSQL.setValue("outplace", orderdetailRows.get(0).getString("outplace"));
+                    insertSQL.setValue("delivery", orderdetailRows.get(0).getString("delivery"));
+                    insertSQL.setValue("logisticsmethod", "");
+                    insertSQL.setValue("invoice_enterprisename", orderdetailRows.get(0).getString("invoicename"));
+                    insertSQL.setValue("invoice_address", orderdetailRows.get(0).getString("invoiceaddress"));
+                    insertSQL.setValue("invoice_taxno", orderdetailRows.get(0).getString("invoicetaxno"));
+                    insertSQL.setValue("name", orderdetailRows.get(0).getString("contact"));
+                    insertSQL.setValue("phonenumber", orderdetailRows.get(0).getString("phonenumber"));
+                    insertSQL.setValue("address", orderdetailRows.get(0).getString("address"));
+                    insertSQL.setValue("province", orderdetailRows.get(0).getString("province"));
+                    insertSQL.setValue("city", orderdetailRows.get(0).getString("city"));
+                    insertSQL.setValue("county", orderdetailRows.get(0).getString("county"));
+
+                    insertSQL.setValue("tracknumber", "");
+                    insertSQL.setValue("isconfirm", 0);
+
+                    insertSQL.setValue("period", getDate_Str().substring(0, 7));
+
+                    insertSQL.setValue("createby", username);
+                    insertSQL.setDateValue("createdate");
+                    insertSQL.setValue("changeby", username);
+                    insertSQL.setDateValue("changedate");
+                    insertSQL.setValue("status", "新建");
+                    insertSQL.setValue("payamount", 0);
+                    insertSQL.setValue("paydiscountamount", 0);
+                    sqlList.add(insertSQL.getSQL());
+
+                    sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "新增", "销售出库单新增成功").getSQL());
+
+                    int i = 1;
+                    BigDecimal payamount = BigDecimal.ZERO;
+                    RowsMap itemRowsMap = SQLFactory.createQuerySQL(this, "plm_item", "*").setTableAlias("t1").addJoinTable(JOINTYPE.left, "st_stock", "t2", "t1.siteid = t2.siteid and t1.stockno = t2.stockno", "stockid").setWhere("itemid", orderdetailRows.toArrayList("itemid")).query().toRowsMap("itemid");
+                    RowsMap stockRowsMap = SQLFactory.createQuerySQL(this, "st_stock", "stockid", "stockno").query().toRowsMap("stockno");
+
+
+                    for (Row row : orderdetailRows) {
+                        payamount = payamount.add(row.getBigDecimal("undeliqty").multiply(row.getBigDecimal("price")));
+                        insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items");
+                        insertSQL.setUniqueid(createTableID("st_stockbill_items"));
+                        insertSQL.setSiteid(siteid);
+                        insertSQL.setValue("rowno", i);
+                        insertSQL.setValue("st_stockbillid", st_stockbillid);
+                        insertSQL.setValue("sa_orderitemsid", row.getLong("sa_orderitemsid"));
+                        insertSQL.setValue("itemid", row.getLong("itemid"));
+                        insertSQL.setValue("sa_orderid", row.getLong("sa_orderid"));
+                        insertSQL.setValue("qty", row.getLong("undeliqty"));
+                        insertSQL.setValue("discountrate", 1);
+                        insertSQL.setValue("sa_dispatch_itemsid", 0);
+                        insertSQL.setValue("defaultprice", row.getBigDecimal("price"));
+                        insertSQL.setValue("remarks", row.getString("remarksdetail"));
+                        insertSQL.setValue("itemno", row.getString("itemno"));
+                        insertSQL.setValue("itemname", row.getString("itemname"));
+                        insertSQL.setValue("model", row.getString("model"));
+                        insertSQL.setValue("price", row.getBigDecimal("price"));
+                        insertSQL.setValue("amount", row.getBigDecimal("undeliqty").multiply(row.getBigDecimal("price")));
+                        insertSQL.setValue("untaxedprice", row.getBigDecimal("price").divide(new BigDecimal(1.13), 2, BigDecimal.ROUND_HALF_UP));
+                        insertSQL.setValue("untaxedamount", row.getBigDecimal("undeliqty").multiply(row.getBigDecimal("price").divide(new BigDecimal(1.13), 2, BigDecimal.ROUND_HALF_UP)));
+                        insertSQL.setValue("skucontrol", row.getBoolean("skucontrol"));
+                        if (itemRowsMap.containsKey(row.getString("itemid"))) {
+                            if (itemRowsMap.get(row.getString("itemid")).get(0).getBoolean("ismodule")) {
+                                insertSQL.setValue("stockid", stockRowsMap.get("105").get(0).getLong("stockid"));
+                            } else {
+                                insertSQL.setValue("stockid", stockRowsMap.get("101").get(0).getLong("stockid"));
+                            }
+                        } else {
+                            insertSQL.setValue("stockid", 0);
+                        }
+                        i++;
+                        sqlList.add(insertSQL.getSQL());
+                    }
+                    String depname = departmenthrrows.isNotEmpty() ? departmenthrrows.get(0).getString("depname") : "";
+                    if (depname.equals("售后部")) {
+                        if (accountbalancerowsMap.containsKey(sys_enterpriseid)) {
+                            if (accountbalancerowsMap.get(sys_enterpriseid).get(0).getBigDecimal("discountamount").compareTo(BigDecimal.ZERO) > 0) {
+                                if (accountbalancerowsMap.get(sys_enterpriseid).get(0).getBigDecimal("discountamount").compareTo(payamount) > 0) {
+                                    sqlList.add("update st_stockbill set payamount=0,paydiscountamount=" + payamount + " where st_stockbillid=" + st_stockbillid);
+                                } else {
+                                    sqlList.add("update st_stockbill set payamount=" + payamount.subtract(accountbalancerowsMap.get(sys_enterpriseid).get(0).getBigDecimal("discountamount")) + ",paydiscountamount=" + accountbalancerowsMap.get(sys_enterpriseid).get(0).getBigDecimal("discountamount") + " where st_stockbillid=" + st_stockbillid);
+                                }
+                            } else {
+                                sqlList.add("update st_stockbill set payamount=" + payamount + " where st_stockbillid=" + st_stockbillid);
+                            }
+                        } else {
+                            sqlList.add("update st_stockbill set payamount=" + payamount + " where st_stockbillid=" + st_stockbillid);
+                        }
+                    } else {
+                        sqlList.add("update st_stockbill set payamount=" + payamount + " where st_stockbillid=" + st_stockbillid);
+                    }
+
+
+//                    sqlList.add("update st_stockbill set payamount="+payamount+" where st_stockbillid="+st_stockbillid);
+                    stockbillcount++;
+                }
+            }
+        }
+        dbConnect.runSqlUpdate(sqlList);
+        HashMap<String, Object> result = new HashMap<>();
+        String success = "已生成" + addressSet.size() + " 家经销商,共" + stockbillcount + "张出库单;失败" + errRows_result.toRowsMap("agentnum").size() + "家经销商,共" + errRows_result.toRowsMap("sonum").size() + "张订单!";
+        result.put("success", success);
+        result.put("errinfo", errRows_result);
+        return getSucReturnObject().setData(result).toString();
+    }
+
+
     @API(title = "提交", apiversion = R.ID20221108153402.v1.class, intervaltime = 5000)
     @API(title = "提交", apiversion = R.ID20221108153402.v1.class, intervaltime = 5000)
     @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, cashbill.class, promotion.class, restcontroller.webmanage.sale.promotion.promotion.class, accessoryorder.class})
     @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, cashbill.class, promotion.class, restcontroller.webmanage.sale.promotion.promotion.class, accessoryorder.class})
     public String submit() throws YosException {
     public String submit() throws YosException {
@@ -3676,7 +3961,7 @@ public class Order extends Controller {
     @CACHEING
     @CACHEING
     public String stockbillList() throws YosException {
     public String stockbillList() throws YosException {
         Long sa_orderid = content.getLong("sa_orderid");
         Long sa_orderid = content.getLong("sa_orderid");
-        QuerySQL stockbillQuery = SQLFactory.createQuerySQL(this, "st_stockbill", "rb", "billdate", "status", "billno", "remarks", "st_stockbillid").setTableAlias("t1");
+        QuerySQL stockbillQuery = SQLFactory.createQuerySQL(this, "st_stockbill", "rb", "billdate", "status", "billno", "remarks", "st_stockbillid","tracknumber","mailno").setTableAlias("t1");
         stockbillQuery.addJoinTable(JOINTYPE.left, "st_stockbill_items", "t2", "t2.st_stockbillid = t1.st_stockbillid");
         stockbillQuery.addJoinTable(JOINTYPE.left, "st_stockbill_items", "t2", "t2.st_stockbillid = t1.st_stockbillid");
         stockbillQuery.setWhere("t2.sa_orderid", sa_orderid);
         stockbillQuery.setWhere("t2.sa_orderid", sa_orderid);
         stockbillQuery.setDistinct(true);
         stockbillQuery.setDistinct(true);
@@ -3684,6 +3969,7 @@ public class Order extends Controller {
         for (Row row : rows) {
         for (Row row : rows) {
             int rb = row.getInteger("rb");
             int rb = row.getInteger("rb");
             row.put("rb", rb == 1 ? "蓝" : "红");
             row.put("rb", rb == 1 ? "蓝" : "红");
+            row.put("expressform_mailno", row.getString("mailno"));
         }
         }
         return getSucReturnObject().setData(rows).toString();
         return getSucReturnObject().setData(rows).toString();
     }
     }

+ 8 - 0
src/custom/restcontroller/webmanage/sale/stockbill/stockbill.java

@@ -511,6 +511,14 @@ public class stockbill extends Controller {
 
 
         }
         }
 
 
+        HashMap<Long, Integer> reportMap = Report.getViewCount(this, "st_stockbill", ids);
+        for (Row row : rows) {
+            if (reportMap.containsKey(row.getLong("st_stockbillid"))) {
+                row.put("printcount", reportMap.get(row.getLong("st_stockbillid")));
+            }
+            row.putIfAbsent("printcount", 0);
+        }
+
 
 
         return getSucReturnObject().setData(rows).toString();
         return getSucReturnObject().setData(rows).toString();
     }
     }

+ 23 - 14
src/custom/restcontroller/yxb/yxb.java

@@ -20,46 +20,53 @@ public class yxb extends Controller {
 
 
     @API(title = "营销宝数据同步查询", apiversion = R.ID2026030512342901.v1.class)
     @API(title = "营销宝数据同步查询", apiversion = R.ID2026030512342901.v1.class)
     public String getdata() throws YosException {
     public String getdata() throws YosException {
-        String lastrequestdata = content.getStringValue("lastrequestdata");//上次请求的时间
         HashMap<String, YxbResult> resultData = new HashMap<>();//数据更新对象
         HashMap<String, YxbResult> resultData = new HashMap<>();//数据更新对象
 
 
-        Rows yxb_datasyncRows;
-        if (lastrequestdata.isEmpty()) {
-            yxb_datasyncRows = dbConnect.runSqlQuery("select ownertable,ownerid from yxb_datasync");
-        } else {
-            yxb_datasyncRows = dbConnect.runSqlQuery("select ownertable,ownerid from yxb_datasync where changedate>'" + lastrequestdata + "'");
+        long yxb_datasyncid = 0;
+        Rows maxyxb_datasync = dbConnect.runSqlQuery("select max(yxb_datasyncid)as yxb_datasyncid from yxb_datasync");
+        if (maxyxb_datasync.isNotEmpty()) {
+            yxb_datasyncid = maxyxb_datasync.get(0).getLong("yxb_datasyncid");
         }
         }
-        RowsMap rowsMap = yxb_datasyncRows.toRowsMap("ownertable");
+
+        RowsMap rowsMap = dbConnect.runSqlQuery("select ownertable,ownerid from yxb_datasync where yxb_datasyncid<=" + yxb_datasyncid + " group by ownertable,ownerid").toRowsMap("ownertable");
         for (String tablename : rowsMap.keySet()) {
         for (String tablename : rowsMap.keySet()) {
             String uniquecolumnname = getuniquecolumnname(tablename);
             String uniquecolumnname = getuniquecolumnname(tablename);
+
+            Rows datasyncRows = rowsMap.get(tablename);
+            ArrayList<String> idlist = datasyncRows.toArrayList("ownerid");//当前表的所有待更新数据ID
             QuerySQL querySQL;
             QuerySQL querySQL;
-            ArrayList<String> idlist = rowsMap.get(tablename).toArrayList("ownerid");//当前表的所有待更新数据ID
             if (tablename.equalsIgnoreCase("sys_userrole")) {
             if (tablename.equalsIgnoreCase("sys_userrole")) {
                 //如果是账号角色授权表,则单独处理
                 //如果是账号角色授权表,则单独处理
-                querySQL = SQLFactory.createQuerySQL(this, tablename, "userid").setTableAlias("t1");
+                querySQL = SQLFactory.createQuerySQL(this, tablename, uniquecolumnname, "userid","siteid").setTableAlias("t1");
                 querySQL.addJoinTable(JOINTYPE.inner, "sys_role", "t2", "t1.roleid=t2.roleid", "rolename", "remarks");
                 querySQL.addJoinTable(JOINTYPE.inner, "sys_role", "t2", "t1.roleid=t2.roleid", "rolename", "remarks");
                 querySQL.setWhere(uniquecolumnname, idlist);
                 querySQL.setWhere(uniquecolumnname, idlist);
+                querySQL.setDistinct(true);
+            } else if (tablename.equalsIgnoreCase("sys_users")) {
+                querySQL = SQLFactory.createQuerySQL(this, tablename, "userid", "accountno", "name", "status", "phonenumber");
+            } else if (tablename.equalsIgnoreCase("sys_usersite")) {
+                querySQL = SQLFactory.createQuerySQL(this, tablename, "usersiteid", "userid", "siteid", "usertype");
             } else {
             } else {
                 querySQL = SQLFactory.createQuerySQL(this, tablename);
                 querySQL = SQLFactory.createQuerySQL(this, tablename);
                 querySQL.setWhere(uniquecolumnname, idlist);
                 querySQL.setWhere(uniquecolumnname, idlist);
             }
             }
-            Rows datarows = querySQL.query();//查询出所有的待同步的数据
+            Rows datarows = querySQL.query();
+            //查询出所有的待同步的数据
             idlist.removeAll(datarows.toArrayList(uniquecolumnname));//排除存在的数据id,即为已经删除的数据的数据ID
             idlist.removeAll(datarows.toArrayList(uniquecolumnname));//排除存在的数据id,即为已经删除的数据的数据ID
-            resultData.put(tablename, new YxbResult(datarows, idlist));
+            resultData.put(tablename, new YxbResult(datarows, idlist, yxb_datasyncid));
         }
         }
         return getSucReturnObject().setData(JSONObject.from(resultData)).toString();
         return getSucReturnObject().setData(JSONObject.from(resultData)).toString();
     }
     }
 
 
     @API(title = "营销宝数据同步确认", apiversion = R.ID2026030513573201.v1.class)
     @API(title = "营销宝数据同步确认", apiversion = R.ID2026030513573201.v1.class)
     public String getdatareback() throws YosException {
     public String getdatareback() throws YosException {
-        String lastrequestdata = content.getStringValue("lastrequestdata");//上次请求的时间
+        long yxb_datasyncid = content.getLongValue("yxb_datasyncid");
         String tablename = content.getStringValue("tablename");
         String tablename = content.getStringValue("tablename");
         JSONArray ids = content.getJSONArray("ids");
         JSONArray ids = content.getJSONArray("ids");
         if (!ids.isEmpty()) {
         if (!ids.isEmpty()) {
             DeleteSQL deleteSQL = SQLFactory.createDeleteSQL(this, "yxb_datasync");
             DeleteSQL deleteSQL = SQLFactory.createDeleteSQL(this, "yxb_datasync");
             deleteSQL.setWhere("ownertable", tablename);
             deleteSQL.setWhere("ownertable", tablename);
             deleteSQL.setWhere("ownerid", ids);
             deleteSQL.setWhere("ownerid", ids);
-            deleteSQL.setWhere("changedate", Op.LTE, lastrequestdata);//将该时间之前的记录全部删除
+            deleteSQL.setWhere("yxb_datasyncid", Op.LTE, yxb_datasyncid);//将该ID之前的记录全部删除
             deleteSQL.delete();
             deleteSQL.delete();
         }
         }
         return getSucReturnObject().toString();
         return getSucReturnObject().toString();
@@ -70,10 +77,12 @@ public class yxb extends Controller {
     class YxbResult {
     class YxbResult {
         public Rows dataRows;
         public Rows dataRows;
         public ArrayList<String> deleteIDs;
         public ArrayList<String> deleteIDs;
+        public long yxb_datasyncid;
 
 
-        public YxbResult(Rows dataRows, ArrayList<String> deleteIDs) {
+        public YxbResult(Rows dataRows, ArrayList<String> deleteIDs, long yxb_datasyncid) {
             this.dataRows = dataRows;
             this.dataRows = dataRows;
             this.deleteIDs = deleteIDs;
             this.deleteIDs = deleteIDs;
+            this.yxb_datasyncid = yxb_datasyncid;
         }
         }
     }
     }
 }
 }