Просмотр исходного кода

Merge branch 'develop' into develop_green

# Conflicts:
#	src/custom/restcontroller/webmanage/sale/order/OrderItems.java
hu 4 месяцев назад
Родитель
Сommit
6318e3847b

+ 1 - 1
pom.xml

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

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

@@ -6931,6 +6931,16 @@ public class R {
         public static class v1 {
         }
     }
+
+    public static class ID2025121309582703 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025121314111503 {
+        public static class v1 {
+        }
+    }
 }
 
 

+ 2 - 2
src/custom/restcontroller/sale/serviceorder/serviceorder.java

@@ -200,12 +200,12 @@ public class serviceorder extends Controller {
         sqlList.add(sqlFactoryupdate.getSQL());
 
         if (issumbit) {
-            Rows agents = dbConnect.runSqlQuery("select * from sa_agents where status=1 and siteid='" + siteid + "' and sys_enterpriseid=" + rows.get(0).getLong("sys_enterpriseid"));
+            Rows agents = dbConnect.runSqlQuery("select * from sa_agents where status=1 and signingstate!='停用(已止)' and siteid='" + siteid + "' and sys_enterpriseid=" + rows.get(0).getLong("sys_enterpriseid"));
             if (agents.isNotEmpty()) {
                 if (agents.get(0).getBoolean("isservice")) {
                     sqlList.add("update sa_serviceorder set status='待受理',sys_enterpriseid_service=" + agents.get(0).getLong("sys_enterpriseid") + " where sa_serviceorderid=" + sa_serviceorderid);
                 } else {
-                    Rows serviceagents = dbConnect.runSqlQuery("select t1.sys_enterpriseid,t2.province,t2.city,t2.county from sa_agents t1 inner join sa_agents_salescope  t2  on  t1.sa_agentsid=t2.sa_agentsid and t1.siteid=t2.siteid where t1.siteid='" + siteid + "' and t1.isservice=1");
+                    Rows serviceagents = dbConnect.runSqlQuery("select t1.sys_enterpriseid,t2.province,t2.city,t2.county from sa_agents t1 inner join sa_agents_salescope  t2  on  t1.sa_agentsid=t2.sa_agentsid and t1.siteid=t2.siteid where t1.siteid='" + siteid + "' and status=1 and signingstate!='停用(已止)' and t1.isservice=1");
                     RowsMap countyRowsMap = serviceagents.toRowsMap("county");
                     RowsMap cityRowsMap = serviceagents.toRowsMap("city");
                     RowsMap provinceRowsMap = serviceagents.toRowsMap("province");

+ 233 - 72
src/custom/restcontroller/webmanage/sale/order/OrderItems.java

@@ -46,6 +46,165 @@ public class OrderItems extends Controller {
         super(content);
     }
 
+    @API(title = "配件订单明细新增或更新", apiversion = R.ID2025121314111503.v1.class, intervaltime = 200)
+    @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, ToolBill.class, accessoryorder.class})
+    public String insertOrUpdate_pj() throws YosException {
+        Long sa_orderid = content.getLong("sa_orderid");
+        Long sys_enterpriseid = content.getLong("sys_enterpriseid");
+        JSONArray items = content.getJSONArray("items");
+        //辅助类
+        OrderItemsHelper orderItemsHelper = new OrderItemsHelper(this);
+        ArrayList<String> sqlList = new ArrayList<>();
+
+        Rows orderRows = getOrderRows(this, sa_orderid);
+        if (orderRows.isEmpty()) {
+            return getErrReturnObject().setErrMsg("数据不存在,无法添加").toString();
+        } else {
+            if (!orderRows.get(0).getString("status").equals("新建") && !orderRows.get(0).getString("status").equals("提交") && !orderRows.get(0).getString("status").equals("预提交")) {
+                return getErrReturnObject().setErrMsg("该状态无法操作").toString();
+            }
+        }
+
+        //通过版本更新订单表头数据
+        beans.order.Order.updateOrderWithVersion(this);
+
+        String type = orderRows.get(0).getString("type");
+
+        //批量查询商品信息
+        RowsMap itemRowsMap = orderItemsHelper.getItemRowsMap(items);
+
+        BigDecimal sumqty = BigDecimal.ZERO;
+        ArrayList<Long> sa_orderitemsids_insert =new ArrayList<>();
+        for (Object obj : items) {
+
+            JSONObject item = (JSONObject) obj;
+            Long itemid = item.getLong("itemid");
+            Long sa_orderitemsid = item.getLong("sa_orderitemsid");
+            BigDecimal qty = item.getBigDecimal("qty");
+            sumqty = sumqty.add(qty);
+
+            Row itemRow = getItemRow(itemid);
+
+            Boolean isInsert = true;
+            JSONArray customproperties = new JSONArray();
+            if (sa_orderitemsid <= 0) {
+                Rows rows;
+                if(!type.equals("配件订单")){
+                    rows= dbConnect.runSqlQuery("SELECT sa_orderitemsid,price from sa_orderitems WHERE siteid='" + siteid + "' and itemid=" + itemid + " and sa_orderid=" + sa_orderid + " and sa_promotion_itemsid=" + item.getLongValue("sa_promotion_itemsid"));
+                }else{
+                    if(StringUtils.isBlank(item.getStringValue("cardno"))){
+                        rows= dbConnect.runSqlQuery("SELECT t1.sa_orderitemsid,qty from sa_orderitems t1  WHERE t1.siteid='" + siteid + "' and ifnull(cardno,'')='' and t1.itemid=" + itemid + " and t1.sa_orderid=" + sa_orderid);
+                    }else{
+                        rows= dbConnect.runSqlQuery("SELECT t1.sa_orderitemsid,qty from sa_orderitems t1  WHERE t1.siteid='" + siteid + "' and t1.itemid=" + itemid + " and t1.sa_orderid=" + sa_orderid + " and ifnull(t1.cardno,'')='"+item.getStringValue("cardno")+"'");
+                    }
+
+                }
+
+                if (rows.isEmpty()) {
+                    sa_orderitemsid = createTableID("sa_orderitems");
+                } else {
+                    //System.out.println(beans.order.Order.getDefaultIsRepeatValue(siteid, type));
+                    if (beans.order.Order.getDefaultIsRepeatValue(siteid, type)) {
+                        sa_orderitemsid = createTableID("sa_orderitems");
+                        isInsert = true;
+                    } else {
+                        //price1 = rows.get(0).getBigDecimal("price");
+                        sa_orderitemsid = rows.get(0).getLong("sa_orderitemsid");
+                        item.put("qty",item.getBigDecimal("qty").add(rows.get(0).getBigDecimal("qty")));
+                        isInsert = false;
+                    }
+
+                }
+            } else {
+                isInsert = false;
+            }
+            if (!isInsert) {
+                if (dbConnect.runSqlQuery("SELECT 1 from sa_orderitems WHERE itemid=" + itemid + " and sa_orderid=" + sa_orderid + " and siteid='" + siteid + "'").isEmpty()) {
+                    continue;
+                }
+            }
+
+            //是否符合商品起订量和增量判断
+            orderItemsHelper.compareQty(type, itemRowsMap, item, itemRow, new Rows());
+
+            BigDecimal defaultprice;
+            BigDecimal price;
+            BigDecimal saleprice;
+
+
+            //价格
+            ItemPrice itemPrice = ItemPrice.getItemPrice(this, sys_enterpriseid, itemid);
+            price = orderItemsHelper.getPrice(orderRows.get(0), itemPrice, item);
+            saleprice = orderItemsHelper.getSalePrice(orderRows.get(0), itemPrice, item, itemRowsMap);
+            if (price.compareTo(BigDecimal.ZERO) < 0) {
+                return getErrReturnObject().setErrMsg("价格不可小于0").toString();
+            }
+            defaultprice = price;
+            if (isInsert) {
+                sa_orderitemsids_insert.add(sa_orderitemsid);
+                sqlList.add(orderItemsHelper.getInsertSQL(customproperties, sa_orderitemsid, item, itemRow, type, defaultprice, price, saleprice, itemPrice.getMarketprice(), "", new Rows(), 0, 0, BigDecimal.ZERO, BigDecimal.valueOf(1),  BigDecimal.valueOf(1)).getSQL());
+                if (item.getLongValue("sa_workorderid") != 0) {
+                    sqlList.add("update sa_workorder_node_items set sourceid=" + sa_orderid + ",sourcetable='sa_order' where sa_workorderid=" + item.getLongValue("sa_workorderid") + " and itemid=" + item.getLong("itemid"));
+                }
+            } else {
+                price = item.getBigDecimal("price");
+                defaultprice=item.getBigDecimal("defaultprice");
+                sqlList.add(orderItemsHelper.getUpdateSQL(sa_orderitemsid, item, itemRow, type, defaultprice, price, saleprice, 0,0).getSQL());
+            }
+
+
+        }
+
+        dbConnect.runSqlUpdate(sqlList);
+        //重新排序
+        updateRowNo(sa_orderid);
+        //更新订单扣款信息
+        updateAccountclassinfos(sa_orderid);
+
+        if(type.equals("配件订单")){
+            dbConnect.runSqlUpdate("UPDATE sa_order o JOIN (SELECT  sa_orderid,GROUP_CONCAT(DISTINCT delivery SEPARATOR '+') AS delivery FROM sa_orderitems where sa_orderid="+sa_orderid+" GROUP BY sa_orderid) od ON o.sa_orderid = od.sa_orderid SET  o.delivery = od.delivery ");
+        }
+        sqlList=new ArrayList<>();
+        if (type.equals("配件订单")) {
+            Rows rowsdetails = dbConnect.runSqlQuery("select t1.price,t1.amount,t1.sa_orderitemsid,t1.itemid,ifnull(t2.iswriteoff,0) iswriteoff,t3.begdate,t3.enddate from sa_orderitems t1 " +
+                    "left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid " +
+                    "left join sa_warrantycard t3 on t1.cardno=t3.cardno and t1.siteid=t3.siteid and t3.isvoid=0 and t3.deleted=0 where t1.sa_orderid=" + sa_orderid);
+            for (Row rowsdetail : rowsdetails) {
+                String billingstatus = "";
+                BigDecimal price = rowsdetail.getBigDecimal("price");
+                BigDecimal amount = rowsdetail.getBigDecimal("amount");
+                String begdate = rowsdetail.getString("begdate");
+                String enddate = rowsdetail.getString("enddate");
+                if (StringUtils.isBlank(begdate) || StringUtils.isBlank(enddate)) {
+                    billingstatus = "保外收费";
+                } else {
+                    Date date = new Date();
+                    if (date.before(rowsdetail.getDate("enddate"))) {
+                        if (rowsdetail.getBoolean("iswriteoff")) {
+                            billingstatus = "保内收费";
+                        } else {
+                            billingstatus = "保内免费";
+                            if(sa_orderitemsids_insert.contains(rowsdetail.getLong("sa_orderitemsid"))){
+                                price = BigDecimal.ZERO;
+                                amount = BigDecimal.ZERO;
+                            }
+
+                        }
+                    }else{
+                        billingstatus = "保外收费";
+                    }
+                }
+                if(!billingstatus.equals("保内收费")){
+                    sqlList.add("update sa_orderitems set canoffqty=0 where sa_orderitemsid=" + rowsdetail.getLong("sa_orderitemsid"));
+                }
+                sqlList.add("update sa_orderitems set price=" + price + ",amount=" + amount + ",billingstatus='" + billingstatus + "' where sa_orderitemsid=" + rowsdetail.getLong("sa_orderitemsid"));
+            }
+        }
+        dbConnect.runSqlUpdate(sqlList);
+
+        return getSucReturnObject().toString();
+    }
+
     @API(title = "新增或更新", apiversion = R.ID20221109093602.v1.class, intervaltime = 200)
     @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, ToolBill.class, accessoryorder.class})
     public String insertOrUpdate() throws YosException {
@@ -76,7 +235,7 @@ public class OrderItems extends Controller {
         RowsMap itemRowsMap = orderItemsHelper.getItemRowsMap(items);
 
         BigDecimal sumqty = BigDecimal.ZERO;
-        ArrayList<Long> sa_orderitemsids_insert =new ArrayList<>();
+        ArrayList<Long> sa_orderitemsids_insert = new ArrayList<>();
         for (Object obj : items) {
             JSONObject item = (JSONObject) obj;
             Long itemid = item.getLong("itemid");
@@ -115,13 +274,13 @@ public class OrderItems extends Controller {
 
                 spec = orderItemsHelper.getCustomSpec(itemRowsMap, item);
                 Rows rows = new Rows();
-                if(!type.equals("配件订单")){
-                    rows= dbConnect.runSqlQuery("SELECT sa_orderitemsid,price from sa_orderitems WHERE siteid='" + siteid + "' and itemid=" + itemid + " and sa_orderid=" + sa_orderid + " and sa_promotion_itemsid=" + item.getLongValue("sa_promotion_itemsid"));
-                }else{
-                    if(StringUtils.isBlank(item.getStringValue("cardno"))){
-                        rows= dbConnect.runSqlQuery("SELECT t1.sa_orderitemsid,qty from sa_orderitems t1  WHERE t1.siteid='" + siteid + "' and ifnull(cardno,'')='' and t1.itemid=" + itemid + " and t1.sa_orderid=" + sa_orderid);
-                    }else{
-                        rows= dbConnect.runSqlQuery("SELECT t1.sa_orderitemsid,qty from sa_orderitems t1  WHERE t1.siteid='" + siteid + "' and t1.itemid=" + itemid + " and t1.sa_orderid=" + sa_orderid + " and ifnull(t1.cardno,'')='"+item.getStringValue("cardno")+"'");
+                if (!type.equals("配件订单")) {
+                    rows = dbConnect.runSqlQuery("SELECT sa_orderitemsid,price from sa_orderitems WHERE siteid='" + siteid + "' and itemid=" + itemid + " and sa_orderid=" + sa_orderid + " and sa_promotion_itemsid=" + item.getLongValue("sa_promotion_itemsid"));
+                } else {
+                    if (StringUtils.isBlank(item.getStringValue("cardno"))) {
+                        rows = dbConnect.runSqlQuery("SELECT t1.sa_orderitemsid,qty from sa_orderitems t1  WHERE t1.siteid='" + siteid + "' and ifnull(cardno,'')='' and t1.itemid=" + itemid + " and t1.sa_orderid=" + sa_orderid);
+                    } else {
+                        rows = dbConnect.runSqlQuery("SELECT t1.sa_orderitemsid,qty from sa_orderitems t1  WHERE t1.siteid='" + siteid + "' and t1.itemid=" + itemid + " and t1.sa_orderid=" + sa_orderid + " and ifnull(t1.cardno,'')='" + item.getStringValue("cardno") + "'");
                     }
 
                 }
@@ -136,7 +295,7 @@ public class OrderItems extends Controller {
                     } else {
                         //price1 = rows.get(0).getBigDecimal("price");
                         sa_orderitemsid = rows.get(0).getLong("sa_orderitemsid");
-                        item.put("qty",item.getBigDecimal("qty").add(rows.get(0).getBigDecimal("qty")));
+                        item.put("qty", item.getBigDecimal("qty").add(rows.get(0).getBigDecimal("qty")));
                         isInsert = false;
                     }
 
@@ -179,8 +338,8 @@ public class OrderItems extends Controller {
 //            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 + "'");
-            if(custamountrows.isNotEmpty() && !type.equals("配件订单")){
-                if(custamountrows.get(0).getDouble("pricerate")>0){
+            if (custamountrows.isNotEmpty() && !type.equals("配件订单")) {
+                if (custamountrows.get(0).getDouble("pricerate") > 0) {
                     rwpricerate = custamountrows.get(0).getBigDecimal("pricerate");
                 }
             }
@@ -252,10 +411,10 @@ public class OrderItems extends Controller {
         } else {
             dbConnect.runSqlUpdate("UPDATE sa_order set abstract ='' WHERE sa_orderid='" + sa_orderid + "'");
         }
-        if(type.equals("配件订单")){
-            dbConnect.runSqlUpdate("UPDATE sa_order o JOIN (SELECT  sa_orderid,GROUP_CONCAT(DISTINCT delivery SEPARATOR '+') AS delivery FROM sa_orderitems where sa_orderid="+sa_orderid+" GROUP BY sa_orderid) od ON o.sa_orderid = od.sa_orderid SET  o.delivery = od.delivery ");
+        if (type.equals("配件订单")) {
+            dbConnect.runSqlUpdate("UPDATE sa_order o JOIN (SELECT  sa_orderid,GROUP_CONCAT(DISTINCT delivery SEPARATOR '+') AS delivery FROM sa_orderitems where sa_orderid=" + sa_orderid + " GROUP BY sa_orderid) od ON o.sa_orderid = od.sa_orderid SET  o.delivery = od.delivery ");
         }
-        sqlList=new ArrayList<>();
+        sqlList = new ArrayList<>();
         if (type.equals("配件订单")) {
             Rows rowsdetails = dbConnect.runSqlQuery("select t1.price,t1.amount,t1.sa_orderitemsid,t1.itemid,ifnull(t2.iswriteoff,0) iswriteoff,t3.begdate,t3.enddate from sa_orderitems t1 " +
                     "left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid " +
@@ -275,17 +434,17 @@ public class OrderItems extends Controller {
                             billingstatus = "保内收费";
                         } else {
                             billingstatus = "保内免费";
-                            if(sa_orderitemsids_insert.contains(rowsdetail.getLong("sa_orderitemsid"))){
+                            if (sa_orderitemsids_insert.contains(rowsdetail.getLong("sa_orderitemsid"))) {
                                 price = BigDecimal.ZERO;
                                 amount = BigDecimal.ZERO;
                             }
 
                         }
-                    }else{
+                    } else {
                         billingstatus = "保外收费";
                     }
                 }
-                if(!billingstatus.equals("保内收费")){
+                if (!billingstatus.equals("保内收费")) {
                     sqlList.add("update sa_orderitems set canoffqty=0 where sa_orderitemsid=" + rowsdetail.getLong("sa_orderitemsid"));
                 }
                 sqlList.add("update sa_orderitems set price=" + price + ",amount=" + amount + ",billingstatus='" + billingstatus + "' where sa_orderitemsid=" + rowsdetail.getLong("sa_orderitemsid"));
@@ -309,25 +468,25 @@ public class OrderItems extends Controller {
         BigDecimal canoffqty = content.getBigDecimal("canoffqty");
         Rows orderRows = dbConnect.runSqlQuery("SELECT status,sonum,type from sa_order WHERE sa_orderid=" + sa_orderid + " and siteid='" + siteid + "'");
         Rows orderitemsRows = dbConnect.runSqlQuery("SELECT sa_orderitemsid,qty,billingstatus,rowno from sa_orderitems WHERE sa_orderid=" + sa_orderid + " and sa_orderitemsid='" + sa_orderitemsid + "'");
-        if(orderRows.isEmpty()){
+        if (orderRows.isEmpty()) {
             return getErrReturnObject().setErrMsg("配件订单不存在").toString();
         }
-        if(!orderRows.get(0).getString("type").equals("配件订单")){
+        if (!orderRows.get(0).getString("type").equals("配件订单")) {
             return getErrReturnObject().setErrMsg("非配件订单无法更新可核销数").toString();
         }
-        if(orderRows.get(0).getString("status").equals("审核")){
-            return getErrReturnObject().setErrMsg("配件订单【"+orderRows.get(0).getString("sonum")+"】已审核,无法更新可核销数").toString();
+        if (orderRows.get(0).getString("status").equals("审核")) {
+            return getErrReturnObject().setErrMsg("配件订单【" + orderRows.get(0).getString("sonum") + "】已审核,无法更新可核销数").toString();
         }
-        if(orderitemsRows.isEmpty()){
+        if (orderitemsRows.isEmpty()) {
             return getErrReturnObject().setErrMsg("订单明细不存在").toString();
         }
-        if(!orderitemsRows.get(0).getString("billingstatus").equals("保内收费")){
+        if (!orderitemsRows.get(0).getString("billingstatus").equals("保内收费")) {
             //return getErrReturnObject().setErrMsg("行号【"+orderitemsRows.get(0).getString("rowno")+"】为非保内收费配件,无法更新可核销数").toString();
         }
-        if(orderitemsRows.get(0).getBigDecimal("qty").compareTo(canoffqty)<0){
+        if (orderitemsRows.get(0).getBigDecimal("qty").compareTo(canoffqty) < 0) {
             return getErrReturnObject().setErrMsg("可核销数不可大于商品明细行数量").toString();
         }
-        dbConnect.runSqlUpdate("update sa_orderitems set canoffqty="+canoffqty+" where sa_orderitemsid="+sa_orderitemsid);
+        dbConnect.runSqlUpdate("update sa_orderitems set canoffqty=" + canoffqty + " where sa_orderitemsid=" + sa_orderitemsid);
         return getSucReturnObject().toString();
     }
 
@@ -343,14 +502,16 @@ public class OrderItems extends Controller {
         Rows rows = new Rows();
         for (Object obj : items) {
             JSONObject item = (JSONObject) obj;
-            Long itemid = item.getLongValue("itemid");
-            JSONArray customproperties = new JSONArray();
-            customproperties = orderItemsHelper.getCustomProperties(itemRowsMap, item);
+            if (item != null) {
+                Long itemid = item.getLongValue("itemid");
+                JSONArray customproperties = new JSONArray();
+                customproperties = orderItemsHelper.getCustomProperties(itemRowsMap, item);
 
-            String custompropertie = customproperties.toJSONString().replace("[", "").replace("]", "").replace("\"", "");
+                String custompropertie = customproperties.toJSONString().replace("[", "").replace("]", "").replace("\"", "");
 
-            Rows temprows = dbConnect.runSqlQuery("SELECT itemname from  sa_orderitems WHERE sa_orderid=" + sa_orderid + " and siteid='" + siteid + "' and itemid=" + itemid + " and ifnull(customproperties,'')='" + custompropertie + "'");
-            rows.addAll(temprows);
+                Rows temprows = dbConnect.runSqlQuery("SELECT itemname from  sa_orderitems WHERE sa_orderid=" + sa_orderid + " and siteid='" + siteid + "' and itemid=" + itemid + " and ifnull(customproperties,'')='" + custompropertie + "'");
+                rows.addAll(temprows);
+            }
         }
         Rows orderRows = beans.order.Order.getOrderRows(this, sa_orderid);
         String type = orderRows.get(0).getString("type");
@@ -716,14 +877,14 @@ public class OrderItems extends Controller {
         QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems", "*");
         querySQL.setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.left, "st_invbal_sale", "t2", "t2.siteid = t1.siteid AND t2.itemid = t1.itemid", "cansaleqty", "candispatchqty");
-        querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t3.itemid = t1.itemid and t3.siteid = t1.siteid", "orderminqty_auxunit", "orderaddqty_auxunit", "spec", "iscustomsize", "widthschemeid", "lengthschemeid", "standards", "k3outcode","outplace","aftersalesitemno");
+        querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t3.itemid = t1.itemid and t3.siteid = t1.siteid", "orderminqty_auxunit", "orderaddqty_auxunit", "spec", "iscustomsize", "widthschemeid", "lengthschemeid", "standards", "k3outcode", "outplace", "aftersalesitemno");
         if (sa_promotionid > 0) {
             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");
         }
         if (type.equals("配件订单")) {
             querySQL.addJoinTable(JOINTYPE.left, "sa_workorder", "t5", "t1.sa_workorderid=t5.sa_workorderid and t1.siteid=t5.siteid");
-            querySQL.addJoinTable(JOINTYPE.left, "sa_warrantycard", "t6", "t6.cardno=t1.cardno and t6.siteid=t1.siteid", "sku","address");
-            querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t7", "t7.itemid=t6.itemid and t7.siteid=t6.siteid","iswriteoff");
+            querySQL.addJoinTable(JOINTYPE.left, "sa_warrantycard", "t6", "t6.cardno=t1.cardno and t6.siteid=t1.siteid", "sku", "address");
+            querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t7", "t7.itemid=t6.itemid and t7.siteid=t6.siteid", "iswriteoff");
         }
         querySQL.addQueryFields("candispatchqty", "ifnull(t2.candispatchqty, 0)");
         querySQL.addQueryFields("cansaleqty", "ifnull(t2.cansaleqty, 0)");
@@ -1024,10 +1185,10 @@ public class OrderItems extends Controller {
     //查询订单列表(管理端)
     public QuerySQL queryAllListManage(String where) throws YosException {
 
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems", "sa_orderitemsid", "itemid", "rowno", "itemno", "itemname", "unit", "qty", "undeliqty", "saleprice", "defaultprice", "price", "amount", "remarks", "customproperties", "batchcontrol", "model", "conversionrate", "marketprice", "defaultprice", "defaultamount", "auxqty", "needdate", "deliedqty", "rebateamount", "invoiceamount", "writeoffamount", "auxunit", "sa_orderid", "deliverydate", "returnqty", "stockno", "position", "batchno", "isfreeze", "decorationrebateflag","isclose","custamount");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems", "sa_orderitemsid", "itemid", "rowno", "itemno", "itemname", "unit", "qty", "undeliqty", "saleprice", "defaultprice", "price", "amount", "remarks", "customproperties", "batchcontrol", "model", "conversionrate", "marketprice", "defaultprice", "defaultamount", "auxqty", "needdate", "deliedqty", "rebateamount", "invoiceamount", "writeoffamount", "auxunit", "sa_orderid", "deliverydate", "returnqty", "stockno", "position", "batchno", "isfreeze", "decorationrebateflag", "isclose", "custamount");
         querySQL.setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t3.itemid = t1.itemid and t3.siteid = t1.siteid", "orderminqty_auxunit", "orderminqty", "orderaddqty_auxunit", "orderaddqty", "spec", "standards", "packageqty", "delivery", "k3outcode");
-        querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t5", "t5.sa_orderid = t1.sa_orderid and t5.siteid = t1.siteid", "sonum", "type", "typemx", "status", "billdate", "submitdate", "checkdate", "tradefield", "closedate","createby");
+        querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t5", "t5.sa_orderid = t1.sa_orderid and t5.siteid = t1.siteid", "sonum", "type", "typemx", "status", "billdate", "submitdate", "checkdate", "tradefield", "closedate", "createby");
         querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t6", "t6.sys_enterpriseid = t5.sys_enterpriseid and t6.siteid = t5.siteid", "agentnum");
         querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t7", "t7.sys_enterpriseid = t5.sys_enterpriseid and t7.siteid = t5.siteid", "enterprisename", "abbreviation");
         querySQL.addJoinTable(JOINTYPE.left, "plm_itemclass", "t8", "t8.itemclassid = t3.marketingcategory and t8.siteid = t3.siteid", "itemclassname");
@@ -1347,7 +1508,8 @@ public class OrderItems extends Controller {
 //
 //            sqlList.add(sqlFactory.getSQL());
 //
-////            content.put("sa_orderitemsid", sa_orderitemsid);
+
+    /// /            content.put("sa_orderitemsid", sa_orderitemsid);
 //
 //        }
 //
@@ -1413,14 +1575,13 @@ public class OrderItems extends Controller {
 //        }
 //
 //    }
-
     @API(title = "行关闭", apiversion = R.ID2025102210393903.v1.class)
     @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class})
     public String close() throws YosException {
-        boolean isclose= content.getBoolean("isclose");
-        long sa_orderid=content.getLong("sa_orderid");
+        boolean isclose = content.getBoolean("isclose");
+        long sa_orderid = content.getLong("sa_orderid");
         JSONArray sa_orderitemsids = content.getJSONArray("sa_orderitemsids");
-        String closereason=content.getStringValue("closereason");
+        String closereason = content.getStringValue("closereason");
         ArrayList<String> sqlList = new ArrayList<>();
         Rows rows = getOrderRows(this, sa_orderid);
         if (rows.isEmpty()) {
@@ -1430,47 +1591,48 @@ public class OrderItems extends Controller {
         QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems", "*").setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.inner, "sa_order", "t2", "t1.siteid = t2.siteid and t1.sa_orderid = t2.sa_orderid");
         querySQL.setSiteid(siteid);
-        querySQL.setWhere("t1.sa_orderitemsid",sa_orderitemsids);
-        querySQL.setWhere("t2.sa_orderid",sa_orderid);
+        querySQL.setWhere("t1.sa_orderitemsid", sa_orderitemsids);
+        querySQL.setWhere("t2.sa_orderid", sa_orderid);
         Rows rowsdetails = querySQL.query();
-        closevalidate(isclose,row,rowsdetails);
+        closevalidate(isclose, row, rowsdetails);
 
         /******** 行关闭状态更新 ********/
         Date date = getDate();
-        BigDecimal returnamount =BigDecimal.ZERO;// 退还金额
-        for(Row rowsdetail :rowsdetails){
+        BigDecimal returnamount = BigDecimal.ZERO;// 退还金额
+        for (Row rowsdetail : rowsdetails) {
             BigDecimal amount = rowsdetail.getBigDecimal("amount");// 订单金额
             BigDecimal price = rowsdetail.getBigDecimal("price");// 单价
             BigDecimal qty = rowsdetail.getBigDecimal("qty");// 订单数量
-            BigDecimal undeliqty = rowsdetail.getBigDecimal("undeliqty");;// 订单未发货数量
+            BigDecimal undeliqty = rowsdetail.getBigDecimal("undeliqty");
+            ;// 订单未发货数量
             BigDecimal sendqty = qty.subtract(undeliqty);
-            BigDecimal sendamount =price.multiply(sendqty).setScale(2, RoundingMode.HALF_UP);
+            BigDecimal sendamount = price.multiply(sendqty).setScale(2, RoundingMode.HALF_UP);
             returnamount = returnamount.add(amount.subtract(sendamount));
 
-            sqlList.add("update sa_orderitems set isclose="+isclose+",closereason='"+closereason+"',closeby='"+username+"',closedate=CURRENT_TIME where sa_orderitemsid="+rowsdetail.getLong("sa_orderitemsid"));
+            sqlList.add("update sa_orderitems set isclose=" + isclose + ",closereason='" + closereason + "',closeby='" + username + "',closedate=CURRENT_TIME where sa_orderitemsid=" + rowsdetail.getLong("sa_orderitemsid"));
         }
 
-        Rows freezRows = dbConnect.runSqlQuery("select * from sa_accountbalance_freez where sourcetable='sa_order' and sourceid="+sa_orderid);
-        Row freezRow= null;
+        Rows freezRows = dbConnect.runSqlQuery("select * from sa_accountbalance_freez where sourcetable='sa_order' and sourceid=" + sa_orderid);
+        Row freezRow = null;
         if (!freezRows.isEmpty()) {
             freezRow = freezRows.get(0);
         }
         if (isclose) {
             if (freezRow != null) {
                 BigDecimal amount = freezRow.getBigDecimal("amount");// 冻结金额
-                sqlList.add("update sa_accountbalance_freez set amount="+amount.subtract(returnamount)+" where sa_accountbalance_freezid="+freezRow.getLong("sa_accountbalance_freezid"));
-                sqlList.add("update sa_accountbalance set freezamount=freezamount-"+returnamount+" where sa_accountbalanceid="+freezRow.getLong("sa_accountbalanceid"));
+                sqlList.add("update sa_accountbalance_freez set amount=" + amount.subtract(returnamount) + " where sa_accountbalance_freezid=" + freezRow.getLong("sa_accountbalance_freezid"));
+                sqlList.add("update sa_accountbalance set freezamount=freezamount-" + returnamount + " where sa_accountbalanceid=" + freezRow.getLong("sa_accountbalanceid"));
 
-                if (amount.subtract(returnamount).compareTo(BigDecimal.ZERO)<=0) {
-                    sqlList.add("delete from  sa_accountbalance_freez where sa_accountbalance_freezid="+freezRow.getLong("sa_accountbalance_freezid"));
+                if (amount.subtract(returnamount).compareTo(BigDecimal.ZERO) <= 0) {
+                    sqlList.add("delete from  sa_accountbalance_freez where sa_accountbalance_freezid=" + freezRow.getLong("sa_accountbalance_freezid"));
                 }
             }
-            sqlList.add(DataContrlLog.createLog(this, "sa_order", sa_orderid, "关闭", "行"+rowsdetails.toJsonArray("rowno")+"关闭成功")
+            sqlList.add(DataContrlLog.createLog(this, "sa_order", sa_orderid, "关闭", "行" + rowsdetails.toJsonArray("rowno") + "关闭成功")
                     .getSQL());
         } else {
             if (freezRow == null) {
-                Rows accountbalanceRows = dbConnect.runSqlQuery("select * from sa_accountbalance where sys_enterpriseid="+row.getLong("sys_enterpriseid")+" and sa_accountclassid="+row.getLong("sa_accountclassid"));
-                if(accountbalanceRows.isNotEmpty()){
+                Rows accountbalanceRows = dbConnect.runSqlQuery("select * from sa_accountbalance where sys_enterpriseid=" + row.getLong("sys_enterpriseid") + " and sa_accountclassid=" + row.getLong("sa_accountclassid"));
+                if (accountbalanceRows.isNotEmpty()) {
                     InsertSQL frezzInsertSQL = SQLFactory.createInsertSQL(this, "sa_accountbalance_freez");
                     frezzInsertSQL.setUniqueid(createTableID("sa_accountbalance_freez"));
                     frezzInsertSQL.setSiteid(siteid);
@@ -1482,23 +1644,23 @@ public class OrderItems extends Controller {
                     frezzInsertSQL.setValue("createby", username);
                     frezzInsertSQL.setDateValue("createdate");
                     sqlList.add(frezzInsertSQL.getSQL());
-                    sqlList.add("update sa_accountbalance set freezamount=freezamount+"+returnamount+" where sa_accountbalanceid="+accountbalanceRows.get(0).getLong("sa_accountbalanceid"));
-                }else{
+                    sqlList.add("update sa_accountbalance set freezamount=freezamount+" + returnamount + " where sa_accountbalanceid=" + accountbalanceRows.get(0).getLong("sa_accountbalanceid"));
+                } else {
                     return getErrReturnObject().setErrMsg("账户不存在").toString();
                 }
             } else {
                 BigDecimal amount = freezRow.getBigDecimal("amount");// 冻结金额
-                sqlList.add("update sa_accountbalance_freez set amount="+amount.add(returnamount)+" where sa_accountbalance_freezid="+freezRow.getLong("sa_accountbalance_freezid"));
-                sqlList.add("update sa_accountbalance set freezamount=freezamount+"+returnamount+" where sa_accountbalanceid="+freezRow.getLong("sa_accountbalanceid"));
+                sqlList.add("update sa_accountbalance_freez set amount=" + amount.add(returnamount) + " where sa_accountbalance_freezid=" + freezRow.getLong("sa_accountbalance_freezid"));
+                sqlList.add("update sa_accountbalance set freezamount=freezamount+" + returnamount + " where sa_accountbalanceid=" + freezRow.getLong("sa_accountbalanceid"));
             }
-            sqlList.add(DataContrlLog.createLog(this, "sa_order", sa_orderid, "反关闭", "行"+rowsdetails.toJsonArray("rowno")+"反关闭成功")
+            sqlList.add(DataContrlLog.createLog(this, "sa_order", sa_orderid, "反关闭", "行" + rowsdetails.toJsonArray("rowno") + "反关闭成功")
                     .getSQL());
         }
         /******** 增加总仓可销售量 ********/
         if (isclose) {
-            sqlList.addAll(updateIcinvbal_sale(rowsdetails,true, true));
+            sqlList.addAll(updateIcinvbal_sale(rowsdetails, true, true));
         } else {
-            sqlList.addAll(updateIcinvbal_sale(rowsdetails,false, true));
+            sqlList.addAll(updateIcinvbal_sale(rowsdetails, false, true));
         }
         dbConnect.runSqlUpdate(sqlList);
         if (isclose) {
@@ -1511,17 +1673,16 @@ public class OrderItems extends Controller {
                         "WHERE t1.sa_accountbalanceid="+accountbalancerows.get(0).getLong("sa_accountbalanceid")+" and t2.sourcetable='sa_order' and t2.sourceid="+sa_orderid);
                 dbConnect.runSqlUpdate("delete from sa_accountbalance_freez t1 WHERE t1.sourcetable='sa_order' and t1.sourceid="+sa_orderid);
             }
-        }else{
-            dbConnect.runSqlUpdate("update sa_order set status='审核',closeby='',closedate=null where sa_orderid=" +sa_orderid);
+        } else {
+            dbConnect.runSqlUpdate("update sa_order set status='审核',closeby='',closedate=null where sa_orderid=" + sa_orderid);
         }
 
 
-
         return getSucReturnObject().toString();
     }
 
 
-    public void closevalidate(boolean isclose,Row order,Rows orderdetails) throws YosException {
+    public void closevalidate(boolean isclose, Row order, Rows orderdetails) throws YosException {
         if (isclose && !order.getString("status").equals("审核")) {
             throw new YosException("非审核状态下不可关闭");
         }
@@ -1536,18 +1697,18 @@ public class OrderItems extends Controller {
         QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill_items", "*").setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.inner, "st_stockbill", "t2", "t1.siteid = t2.siteid and t1.st_stockbillid = t2.st_stockbillid");
         querySQL.setSiteid(siteid);
-        querySQL.setWhere("t1.sa_orderitemsid",orderdetails.toArrayList("sa_orderitemsid"));
+        querySQL.setWhere("t1.sa_orderitemsid", orderdetails.toArrayList("sa_orderitemsid"));
         querySQL.setWhere("t2.status='新建'");
         Rows rows = querySQL.query();
         RowsMap rowsMap = rows.toRowsMap("sa_orderitemsid");
-        for(Row row :orderdetails){
+        for (Row row : orderdetails) {
             int rownum = row.getInteger("rowno");
             if (isclose) {
                 if (row.getBoolean("isclose")) {
                     throw new YosException("行" + rownum
                             + "已经关闭,不可重复关闭");
                 }
-                if (row.getBigDecimal("undeliqty").compareTo(BigDecimal.ZERO)==0) {
+                if (row.getBigDecimal("undeliqty").compareTo(BigDecimal.ZERO) == 0) {
                     throw new YosException("行" + rownum
                             + "已发货完毕,不可关闭");
                 }

+ 116 - 0
src/custom/restcontroller/webmanage/sale/workorder/workorder.java

@@ -1,6 +1,7 @@
 package restcontroller.webmanage.sale.workorder;
 
 import beans.brand.Brand;
+import beans.data.BatchDeleteErr;
 import beans.datacontrllog.DataContrlLog;
 import beans.datateam.DataTeam;
 import beans.itemprice.ItemPrice;
@@ -1009,6 +1010,121 @@ public class workorder extends Controller {
         return getSucReturnObject().toString();
     }
 
+    @API(title = "批量完结工单(仅用于刷数据)", apiversion = R.ID2025121309582703.v1.class)
+    public String completeorder_piliang() throws YosException {
+        JSONArray sa_workorderids = content.getJSONArray("sa_workorderids");
+        ArrayList<String> sqlList = new ArrayList<>();
+        BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, sa_workorderids.size());
+        for(Object object :sa_workorderids){
+            long sa_workorderid  =Long.parseLong(object.toString());
+            Rows rows = dbConnect
+                    .runSqlQuery("select sa_serviceorderid,status,billno,type,finishby,finishdate from sa_workorder where sa_workorderid ='"
+                            + sa_workorderid + "' and  siteid='" + siteid + "'");
+            if (rows.get(0).getString("type").equals("安装") && rows.get(0).getString("status").equals("提交")) {
+                Rows itemrows = dbConnect.runSqlQuery("select t1.sku,t3.scenecontact,t3.scenecontactphonenumber,t3.sa_customersid,t5.sa_agentsid customeragentsid," +
+                        "case when t3.sa_customersid!=0 then t5.name else t3.name end name,case when t3.sa_customersid!=0 then t5.phonenumber else t3.phonenumber end phonenumber," +
+                        "t3.province,t3.city,t3.county, case when t3.sa_customersid!=0 then t5.address else t3.address end address,ifnull(t2.warrantyday,0) warrantyday,t4.sa_agentsid,t3.sys_enterpriseid,t6.sa_agentsid sa_agentsid_to,t6.agentnum toagentnum,t7.itemid from sa_serviceorderitems t1  \n" +
+                        "                     inner join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid  \n" +
+                        "                     left join sa_serviceorder t3 on t1.sa_serviceorderid=t3.sa_serviceorderid and t1.siteid=t3.siteid  \n" +
+                        "                     left join sa_agents t4 on t3.sys_enterpriseid=t4.sys_enterpriseid and t3.siteid=t4.siteid  \n" +
+                        "                     left join sa_customers t5 on t5.sa_customersid=t3.sa_customersid and t5.siteid=t3.siteid  \n" +
+                        "                     left join sa_agents t6 on t3.sys_enterpriseid_service=t6.sys_enterpriseid and t3.siteid=t6.siteid  \n" +
+                        "                     left join sa_itemsku t7 on t7.sku=t1.sku and t7.siteid=t1.siteid " +
+                        "where t1.sa_serviceorderid=" + rows.get(0).getLong("sa_serviceorderid") + " and t1.siteid='" + siteid + "' ");
+
+                if (itemrows.isNotEmpty()) {
+
+                    //判断客户id
+                    long sa_customersid = 0;
+                    //判断客户id对应的经销商id
+                    long customeragentsid = 0;
+                    if (itemrows.get(0).getLong("sa_customersid") != 0) {
+                        sa_customersid = itemrows.get(0).getLong("sa_customersid");
+                        customeragentsid = itemrows.get(0).getLong("customeragentsid");
+                    }else {
+//                     return getErrReturnObject().setErrMsg("客户不存在").toString();
+//                    InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_customers");
+//                    sa_customersid = createTableID("sa_customers");
+//                    insertSQL.setUniqueid(sa_customersid);
+//                    insertSQL.setSiteid(siteid);
+//                    if (itemrows.get(0).getLong("sa_agentsid") == 0) {
+//                        insertSQL.setValue("sa_agentsid", itemrows.get(0).getLong("sa_agentsid_to"));
+//                        customeragentsid = itemrows.get(0).getLong("sa_agentsid_to");
+//                    } else {
+//                        insertSQL.setValue("sa_agentsid", itemrows.get(0).getLong("sa_agentsid"));
+//                        customeragentsid = itemrows.get(0).getLong("sa_agentsid");
+//                    }
+//                    insertSQL.setValue("sa_agentsid_to", itemrows.get(0).getLong("sa_agentsid_to"));
+//                    insertSQL.setValue("name", itemrows.get(0).getString("name"));
+//                    insertSQL.setValue("phonenumber", itemrows.get(0).getString("phonenumber"));
+//                    insertSQL.setValue("province", itemrows.get(0).getString("province"));
+//                    insertSQL.setValue("city", itemrows.get(0).getString("city"));
+//                    insertSQL.setValue("county", itemrows.get(0).getString("county"));
+//                    insertSQL.setValue("address", itemrows.get(0).getString("address"));
+//                    insertSQL.setValue("sa_customersid", sa_customersid);
+//                    insertSQL.setValue("itemid", itemrows.get(0).getLong("itemid"));
+//                    sqlList.add(insertSQL.getSQL());
+                    }
+                    LocalDate now;
+                    if(StringUtils.isBlank(rows.get(0).getString("finishdate"))){
+                         now = LocalDate.now();
+                    }else{
+                         now = LocalDate.parse(getDate_Str(rows.get(0).getDate("finishdate")));
+                    }
+
+
+                    // 将当前日期加上年
+                    LocalDate futureDate = now.plusYears(itemrows.get(0).getInteger("warrantyday"));
+
+                    // 定义日期格式
+                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+                    // 格式化日期
+                    String formattedDate = futureDate.format(formatter);
+
+                    InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_warrantycard");
+                    insertSQL.setUniqueid(createTableID("sa_warrantycard"));
+                    insertSQL.setSiteid(siteid);
+                    if(sa_customersid!=0){
+                        insertSQL.setValue("sa_agentsid", customeragentsid);
+                        insertSQL.setValue("toagentnum", itemrows.get(0).getString("toagentnum"));
+                    }else{
+                        insertSQL.setValue("sa_agentsid", itemrows.get(0).getString("sa_agentsid_to"));
+                        insertSQL.setValue("toagentnum", itemrows.get(0).getString("toagentnum"));
+                    }
+
+                    insertSQL.setValue("sku", itemrows.get(0).getString("sku"));
+                    insertSQL.setValue("cardno", createBillCode("warrantycard"));
+                    insertSQL.setValue("sa_customersid", sa_customersid);
+                    insertSQL.setValue("name", itemrows.get(0).getString("scenecontact"));
+                    insertSQL.setValue("phonenumber", itemrows.get(0).getString("scenecontactphonenumber"));
+                    insertSQL.setValue("address", itemrows.get(0).getString("address"));
+                    insertSQL.setValue("province", itemrows.get(0).getString("province"));
+                    insertSQL.setValue("city", itemrows.get(0).getString("city"));
+                    insertSQL.setValue("county", itemrows.get(0).getString("county"));
+                    insertSQL.setValue("enddate", formattedDate);
+                    insertSQL.setValue("begdate", now.format(formatter));
+                    insertSQL.setValue("itemid",  itemrows.get(0).getLong("itemid"));
+                    insertSQL.setValue("createby", rows.get(0).getString("finishby"));
+                    insertSQL.setValue("createdate", StringUtils.isBlank(rows.get(0).getString("finishdate"))?"CURRENT_TIME":rows.get(0).getString("finishdate"));
+                    if (dbConnect.runSqlQuery("select * from sa_warrantycard where sku='" + itemrows.get(0).getString("sku") + "' and siteid='" + siteid + "' and isvoid=0").isNotEmpty()) {
+                        batchDeleteErr.addErr(sa_workorderid, "该序列号已安装,无法再次安装");
+                        continue;
+                    }else{
+                        sqlList.add(insertSQL.getSQL());
+                    }
+                    sqlList.add("update sa_workorder set status='已完工' where sa_workorderid=" + sa_workorderid);
+                }
+
+
+            }
+        }
+
+        dbConnect.runSqlUpdate(sqlList);
+
+        return batchDeleteErr.getReturnObject().toString();
+    }
+
     @API(title = "完结工单", apiversion = R.ID20230209144903.v1.class)
     @CACHEING_CLEAN(apiversions = {workorder.class, serviceorder.class})
     public String completeorder() throws YosException {