Jelajahi Sumber

配件核销单明细新增审核数量和红字出库单号功能及bug修复

hu 4 bulan lalu
induk
melakukan
be56074379

+ 5 - 1
src/custom/beans/accountbalance/Accountbalance.java

@@ -266,7 +266,11 @@ public class Accountbalance extends BaseClass {
                 String content = "您的" + accountclassrows.get(0).getString("accountname") + "已支出【" + cashbillEntity.getAmount() + "】元";
                 new Accountbalance().sendMsg(dbConnect, userInfo, content, cashbillEntity.getOwnerid(), sys_enterpriseid);
             }
-            sqlList.add(DataContrlLog.createLog(new Controller(new JSONObject()), "sa_cashbill", sa_cashbillid, "审核", cashbillEntity.getRemarks()).getSQL());
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("siteid",userInfo.getSiteId());
+            jsonObject.put("username",userInfo.getUserName());
+            jsonObject.put("userid",userInfo.getUserId());
+            sqlList.add(DataContrlLog.createLog(new Controller(jsonObject), "sa_cashbill", sa_cashbillid, "审核", cashbillEntity.getRemarks()).getSQL());
         } else {
             sqlFactory.addParameter("status", "新建");
             sqlFactory.addParameter("checkby", "");

+ 24 - 13
src/custom/beans/stockbill/bills/BasicBill.java

@@ -106,20 +106,23 @@ public abstract class BasicBill {
                 throw new YosException("表体数量不能小于0");
             }
             if (rb == 0) {
-                Rows olditemRows = dbConnect.runSqlQuery("select * from st_stockbill_items where siteid='" + siteid + "' and st_stockbillid=" + billRow.getLong("sourceid"));
-                RowsMap olditemRowsMap = olditemRows.toRowsMap("st_stockbill_itemsid");
-                for (Row row : itemRows) {
-                    if (StringUtils.isNotBlank(row.getString("sourceobject")) && row.getString("sourceobject").equals("st_stockbill_items")) {
-                        if (olditemRowsMap.containsKey(row.getString("sourceid"))) {
-                            Row row1 = olditemRowsMap.get(row.getString("sourceid")).get(0);
-                            if (row.getBigDecimal("qty").compareTo((row1.getBigDecimal("qty").subtract(row1.getBigDecimal("hongqty")))) > 0) {
-                                throw new YosException("行号为:" + row.getString("rowno") + "的商品红冲数量超过原单可红冲数量" + row1.getBigDecimal("qty").subtract(row1.getBigDecimal("hongqty")));
+                if(!billRow.getString("sourceobject").equals("tpartreimbursement")){
+                    Rows olditemRows = dbConnect.runSqlQuery("select * from st_stockbill_items where siteid='" + siteid + "' and st_stockbillid=" + billRow.getLong("sourceid"));
+                    RowsMap olditemRowsMap = olditemRows.toRowsMap("st_stockbill_itemsid");
+                    for (Row row : itemRows) {
+                        if (StringUtils.isNotBlank(row.getString("sourceobject")) && row.getString("sourceobject").equals("st_stockbill_items")) {
+                            if (olditemRowsMap.containsKey(row.getString("sourceid"))) {
+                                Row row1 = olditemRowsMap.get(row.getString("sourceid")).get(0);
+                                if (row.getBigDecimal("qty").compareTo((row1.getBigDecimal("qty").subtract(row1.getBigDecimal("hongqty")))) > 0) {
+                                    throw new YosException("行号为:" + row.getString("rowno") + "的商品红冲数量超过原单可红冲数量" + row1.getBigDecimal("qty").subtract(row1.getBigDecimal("hongqty")));
+                                }
+                            } else {
+                                throw new YosException("行号为:" + row.getString("rowno") + "的物料不在原单中,不可进行红冲");
                             }
-                        } else {
-                            throw new YosException("行号为:" + row.getString("rowno") + "的物料不在原单中,不可进行红冲");
                         }
                     }
                 }
+
             }
         } else {
             if(StringUtils.isBlank(period)){
@@ -146,6 +149,11 @@ public abstract class BasicBill {
         sqlList.addAll(updateMCode(ischeck));//更新序列号
         sqlList.addAll(updateHongqty(ischeck));//更新红冲数量
         sqlList.addAll(updateStatus(ischeck));//更新状态
+        if(ischeck){
+            sqlList.add(DataContrlLog.createLog(controller, "st_stockbill", st_stockbillid, "审核",  billRow.getString("type")+"单审核成功").getSQL());
+        }else{
+            sqlList.add(DataContrlLog.createLog(controller, "st_stockbill", st_stockbillid, "反审核", billRow.getString("type")+"单反审核成功").getSQL());
+        }
         return sqlList;
     }
 
@@ -221,9 +229,12 @@ public abstract class BasicBill {
         ArrayList<String> sqlList = new ArrayList<>();
         if (rb == 0) {
             for (Row row : itemRows) {
-                long sourceid = row.getLong("sourceid");
-                BigDecimal qty = ischeck ? row.getBigDecimal("qty") : row.getBigDecimal("qty").negate();
-                sqlList.add("update st_stockbill_items set hongqty=ifnull(hongqty,0)+" + qty + " where st_stockbill_itemsid=" + sourceid);
+                if(row.getString("sourceobject").equals("st_stockbill_items")){
+                    long sourceid = row.getLong("sourceid");
+                    BigDecimal qty = ischeck ? row.getBigDecimal("qty") : row.getBigDecimal("qty").negate();
+                    sqlList.add("update st_stockbill_items set hongqty=ifnull(hongqty,0)+" + qty + " where st_stockbill_itemsid=" + sourceid);
+                }
+
             }
         }
         return sqlList;

+ 94 - 21
src/custom/beans/stockbill/bills/XSCK.java

@@ -4,6 +4,7 @@ import beans.accountbalance.Accountbalance;
 import beans.accountbalance.CashbillEntity;
 import beans.parameter.Parameter;
 import com.alibaba.fastjson2.JSONObject;
+import common.BaseClass;
 import common.Controller;
 import common.YosException;
 import common.data.*;
@@ -43,6 +44,20 @@ public class XSCK extends BasicBill {
             if (billRow.getBigDecimal("paydiscountamount").compareTo(discountamount) > 0) {
                 throw new YosException("优惠金额不能大于可用优惠金额");
             }
+            if(billRow.getString("sourceobject").equals("tpartreimbursement")){
+                QuerySQL querySQL = SQLFactory.createQuerySQL(controller, "sa_tpartreimbursementdetail", "sa_tpartreimbursementdetailid","isverified","qty","sa_orderitemsid");
+                querySQL.setTableAlias("t1");
+                querySQL.addJoinTable(BaseClass.JOINTYPE.inner, "sa_tpartreimbursement", "t3", "t1.sa_tpartreimbursementid = t3.sa_tpartreimbursementid AND t1.siteid = t3.siteid");
+                querySQL.setSiteid(siteid);
+                querySQL.setWhere("t1.hongbillno='"+billno+"'");
+                Rows rows = querySQL.query();
+                for (Row row : rows) {
+                    if (row.getBoolean("isverified")) {
+                        throw new YosException("存在记录已核销,请检查");
+                    }
+                }
+            }
+
             /*
               库存校验
              */
@@ -64,10 +79,13 @@ public class XSCK extends BasicBill {
             if (order_paymentnode.equals("3") && !Accountbalance.judgeBalance(dbConnect, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), itemRows.sum("amount"))) {
                 throw new YosException("账户余额不足,还差" + Accountbalance.InsufficientBalance(dbConnect, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), itemRows.sum("amount")) + "元!");
             }
-            Rows rowsjudge = dbConnect.runSqlQuery("select * from (select sa_orderitemsid,sum(qty) qty from st_stockbill_items where st_stockbillid ='" + st_stockbillid + "' group by sa_orderitemsid) t1 inner join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid where t1.qty>t2.undeliqty");
-            if (rowsjudge.isNotEmpty()) {
-                throw new YosException("存在商品已完全出库,无法反审核");
+            if(!billRow.getString("sourceobject").equals("tpartreimbursement")){
+                Rows rowsjudge = dbConnect.runSqlQuery("select * from (select sa_orderitemsid,sum(qty) qty from st_stockbill_items where st_stockbillid ='" + st_stockbillid + "' group by sa_orderitemsid) t1 inner join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid where t1.qty>t2.undeliqty");
+                if (rowsjudge.isNotEmpty()) {
+                    throw new YosException("存在商品已完全出库,无法反审核");
+                }
             }
+
         }
     }
 
@@ -102,19 +120,48 @@ public class XSCK extends BasicBill {
                     JSONObject createCashbillPay = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
                     sqlList.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
                 }
-                Rows rowsOrderDetail = dbConnect.runSqlQuery("select t1.undeliqty,t1.deliedqty,t1.qty,t1.sa_orderitemsid from sa_orderitems t1 where t1.sa_orderitemsid in (select sa_orderitemsid from st_stockbill_items where sa_orderitemsid>0 and st_stockbillid=" + st_stockbillid + ")");
-                RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid");
-                Rows rowsDispatchDetailGroup = dbConnect.runSqlQuery("select sum(t1.qty) qty,t1.sa_orderitemsid,t1.siteid from st_stockbill_items t1  where t1.sa_orderitemsid>0 and t1.st_stockbillid=" + st_stockbillid + " group by t1.sa_orderitemsid,t1.siteid");
-                for (Row row : rowsDispatchDetailGroup) {
-                    sqlList.add("update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").add(row.getBigDecimal("qty")) + ",deliedqty=" + (rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty").subtract(row.getBigDecimal("qty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
+                if(!billRow.getString("sourceobject").equals("tpartreimbursement")){
+                    Rows rowsOrderDetail = dbConnect.runSqlQuery("select t1.undeliqty,t1.deliedqty,t1.qty,t1.sa_orderitemsid from sa_orderitems t1 where t1.sa_orderitemsid in (select sa_orderitemsid from st_stockbill_items where sa_orderitemsid>0 and st_stockbillid=" + st_stockbillid + ")");
+                    RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid");
+                    Rows rowsDispatchDetailGroup = dbConnect.runSqlQuery("select sum(t1.qty) qty,t1.sa_orderitemsid,t1.siteid from st_stockbill_items t1  where t1.sa_orderitemsid>0 and t1.st_stockbillid=" + st_stockbillid + " group by t1.sa_orderitemsid,t1.siteid");
+                    for (Row row : rowsDispatchDetailGroup) {
+                        sqlList.add("update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").add(row.getBigDecimal("qty")) + ",deliedqty=" + (rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty").subtract(row.getBigDecimal("qty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
 
-                    sqlList.add("update sa_orderitems set tobeoffqty=case when tobeoffqty-" + row.getDouble("qty") + ">0 then tobeoffqty-" + row.getDouble("qty")+" else 0 end where billingstatus='保内收费' and sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
-                }
-                for (Row row : itemRows) {
-                    if (row.getBoolean("skucontrol")) {
-                        sqlList.add("update st_stockbill_items set wmsuploadflag2=0 where st_stockbill_itemsid=" + row.getLong("st_stockbill_itemsid"));
+                        sqlList.add("update sa_orderitems set tobeoffqty=case when tobeoffqty-" + row.getDouble("qty") + ">0 then tobeoffqty-" + row.getDouble("qty")+" else 0 end where billingstatus='保内收费' and sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
+                    }
+                    for (Row row : itemRows) {
+                        if (row.getBoolean("skucontrol")) {
+                            sqlList.add("update st_stockbill_items set wmsuploadflag2=0 where st_stockbill_itemsid=" + row.getLong("st_stockbill_itemsid"));
+                        }
                     }
+                }else{
+                    QuerySQL querySQL = SQLFactory.createQuerySQL(controller, "sa_tpartreimbursementdetail", "sa_tpartreimbursementdetailid","isverified","qty","sa_orderitemsid");
+                    querySQL.setTableAlias("t1");
+                    querySQL.addJoinTable(BaseClass.JOINTYPE.inner, "sa_tpartreimbursement", "t3", "t1.sa_tpartreimbursementid = t3.sa_tpartreimbursementid AND t1.siteid = t3.siteid");
+                    querySQL.setSiteid(siteid);
+                    querySQL.setWhere("t1.hongbillno='"+billno+"'");
+
+                    Rows rows = querySQL.query();
+
+
+                    QuerySQL querySQLgroup = SQLFactory.createQuerySQL(controller, "sa_tpartreimbursementdetail", "sa_orderitemsid");
+                    querySQLgroup.setTableAlias("t1");
+                    querySQLgroup.addJoinTable(BaseClass.JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid");
+                    querySQLgroup.setSiteid(siteid);
+                    querySQLgroup.addQueryFields("sumqty", "sum(t1.checkqty)");
+                    querySQLgroup.setWhere("t1.hongbillno='"+ billno+"'");
+                    querySQLgroup.addGroupBy("sa_orderitemsid");
+                    Rows rowsgroup = querySQLgroup.query();
+
+                    for (Row row : rows) {
+                        sqlList.add("update sa_tpartreimbursementdetail set isverified=1 where sa_tpartreimbursementdetailid=" + row.getLong("sa_tpartreimbursementdetailid"));
+                    }
+                    for (Row row : rowsgroup) {
+                        sqlList.add("update sa_orderitems set verifiedqty=ifnull(verifiedqty,0)+"+row.getBigDecimal("sumqty")+" where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
+                    }
+
                 }
+
             }
 
 
@@ -147,14 +194,40 @@ public class XSCK extends BasicBill {
                     JSONObject createCashbillPay = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
                     sqlList.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
                 }
-                Rows rowsDispatchDetailGroup = dbConnect.runSqlQuery("select sum(t1.qty) qty,t1.sa_orderitemsid,t1.siteid from st_stockbill_items t1  where t1.sa_orderitemsid>0 and t1.st_stockbillid=" + st_stockbillid + " group by t1.sa_orderitemsid,t1.siteid");
-                for (Row row : rowsDispatchDetailGroup) {
-                    sqlList.add("update sa_orderitems set undeliqty=undeliqty-" + row.getDouble("qty") + ",deliedqty=deliedqty+" + row.getDouble("qty") + ",offstatus=if(billingstatus='保内收费','待核销','不可核销'),offdate=CURRENT_TIME  where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
-                    sqlList.add("update sa_orderitems set tobeoffqty=case when tobeoffqty+" + row.getDouble("qty") + ">canoffqty then canoffqty else tobeoffqty+" + row.getDouble("qty") + " end where billingstatus='保内收费' and sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
-                }
-                for (Row row : itemRows) {
-                    if (row.getBoolean("skucontrol")) {
-                        sqlList.add("update st_stockbill_items set wmsuploadflag2=1 where st_stockbill_itemsid=" + row.getLong("st_stockbill_itemsid"));
+                if(!billRow.getString("sourceobject").equals("tpartreimbursement")){
+                    Rows rowsDispatchDetailGroup = dbConnect.runSqlQuery("select sum(t1.qty) qty,t1.sa_orderitemsid,t1.siteid from st_stockbill_items t1  where t1.sa_orderitemsid>0 and t1.st_stockbillid=" + st_stockbillid + " group by t1.sa_orderitemsid,t1.siteid");
+                    for (Row row : rowsDispatchDetailGroup) {
+                        sqlList.add("update sa_orderitems set undeliqty=undeliqty-" + row.getDouble("qty") + ",deliedqty=deliedqty+" + row.getDouble("qty") + ",offstatus=if(billingstatus='保内收费','待核销','不可核销'),offdate=CURRENT_TIME  where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
+                        sqlList.add("update sa_orderitems set tobeoffqty=case when tobeoffqty+" + row.getDouble("qty") + ">canoffqty then canoffqty else tobeoffqty+" + row.getDouble("qty") + " end where billingstatus='保内收费' and sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
+                    }
+                    for (Row row : itemRows) {
+                        if (row.getBoolean("skucontrol")) {
+                            sqlList.add("update st_stockbill_items set wmsuploadflag2=1 where st_stockbill_itemsid=" + row.getLong("st_stockbill_itemsid"));
+                        }
+                    }
+                }else{
+                    QuerySQL querySQL = SQLFactory.createQuerySQL(controller, "sa_tpartreimbursementdetail", "sa_tpartreimbursementdetailid","isverified","qty","sa_orderitemsid");
+                    querySQL.setTableAlias("t1");
+                    querySQL.addJoinTable(BaseClass.JOINTYPE.inner, "sa_tpartreimbursement", "t3", "t1.sa_tpartreimbursementid = t3.sa_tpartreimbursementid AND t1.siteid = t3.siteid");
+                    querySQL.setSiteid(siteid);
+                    querySQL.setWhere("t1.hongbillno='"+billno+"'");
+                    Rows rows = querySQL.query();
+
+
+                    QuerySQL querySQLgroup = SQLFactory.createQuerySQL(controller, "sa_tpartreimbursementdetail", "sa_orderitemsid");
+                    querySQLgroup.setTableAlias("t1");
+                    querySQLgroup.addJoinTable(BaseClass.JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid");
+                    querySQLgroup.setSiteid(siteid);
+                    querySQLgroup.addQueryFields("sumqty", "sum(t1.checkqty)");
+                    querySQLgroup.setWhere("t1.hongbillno='"+ billno+"'");
+                    querySQLgroup.addGroupBy("sa_orderitemsid");
+                    Rows rowsgroup = querySQLgroup.query();
+
+                    for (Row row : rows) {
+                        sqlList.add("update sa_tpartreimbursementdetail set isverified=0 where sa_tpartreimbursementdetailid=" + row.getLong("sa_tpartreimbursementdetailid"));
+                    }
+                    for (Row row : rowsgroup) {
+                        sqlList.add("update sa_orderitems set verifiedqty=ifnull(verifiedqty,0)-"+row.getBigDecimal("sumqty")+" where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
                     }
                 }
             }

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

@@ -6886,6 +6886,11 @@ public class R {
         public static class v1 {
         }
     }
+
+    public static class ID2025112908531803 {
+        public static class v1 {
+        }
+    }
 }
 
 

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

@@ -1009,10 +1009,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");
+        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");
+        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");
@@ -1027,7 +1027,7 @@ public class OrderItems extends Controller {
         //querySQL.addQueryFields("accountclassinfos", "REPLACE(SUBSTRING(JSON_EXTRACT(t5.sa_accountclassinfos, '$[*].accountname'), 2, CHAR_LENGTH(JSON_EXTRACT(t5.sa_accountclassinfos, '$[*].accountname'))-2),'\"','')");
         querySQL.setWhere("t1.siteid", siteid);
         querySQL.setWhere(where);
-        querySQL.setWhere("t5.status in ('审核', '关闭','手工关闭')");
+        querySQL.setWhere("t5.status in ('审核', '关闭','手工关闭') and t5.type!='配件订单'");
         return querySQL;
     }
 

+ 28 - 9
src/custom/restcontroller/webmanage/sale/stockbill/stockbill.java

@@ -133,11 +133,13 @@ public class stockbill extends Controller {
             sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "新增", "销售出库单新增成功").getSQL());
         } else {
             Rows rows = dbConnect.runSqlQuery(
-                    "SELECT status,sys_enterpriseid,paydiscountamount,payamount from st_stockbill WHERE st_stockbillid = "
+                    "SELECT status,sys_enterpriseid,paydiscountamount,payamount,sourceobject from st_stockbill WHERE st_stockbillid = "
                             + st_stockbillid);
             if (rows.isNotEmpty()) {
                 if (rows.get(0).getString("status").equals("新建")) {
-
+                    if(rows.get(0).getString("sourceobject").equals("tpartreimbursement")){
+                        return getErrReturnObject().setErrMsg("由核销生成的出入库单无法编辑").toString();
+                    }
                     UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, tableName);
                     updateSQL.setUniqueid(st_stockbillid);
                     updateSQL.setSiteid(siteid);
@@ -172,7 +174,6 @@ public class stockbill extends Controller {
                     updateSQL.setDateValue("changedate");
                     sqlList.add(updateSQL.getSQL());
 
-
                     sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "更新", "销售出库单更新成功").getSQL());
                 } else {
                     return getErrReturnObject().setErrMsg("非新建状态下无法编辑").toString();
@@ -482,6 +483,7 @@ public class stockbill extends Controller {
             insertSQL.setDateValue("createdate");
             insertSQL.setDateValue("billdate");
             sqlList.add(insertSQL.getSQL());
+            sqlList.add(DataContrlLog.createLog(this, "st_stockbill", row.getLong("st_stockbillid"), "转送修单",  "转送修单成功").getSQL());
 
             for (Row rowdetail : rowsMapDetail.get(row.getString("st_stockbillid"))) {
                 insertSQL = SQLFactory.createInsertSQL(this, "sa_sendrepair_detail");
@@ -741,6 +743,7 @@ public class stockbill extends Controller {
                         .toString();
             }
         }
+
         UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "st_stockbill");
         updateSQL.setUniqueid(st_stockbillid);
         updateSQL.setSiteid(siteid);
@@ -751,6 +754,12 @@ public class stockbill extends Controller {
         updateSQL.setValue("changeby", username);
         updateSQL.setDateValue("changedate");
         dbConnect.runSqlUpdate(updateSQL.getSQL());
+        if(isconfirm){
+            dbConnect.runSqlUpdate(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "仓库确认",  rows.get(0).getString("type")+"单仓库确认成功").getSQL());
+        }else{
+            dbConnect.runSqlUpdate(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "仓库反确认",  rows.get(0).getString("type")+"单仓库反确认成功").getSQL());
+        }
+
         return getSucReturnObject().toString();
     }
 
@@ -794,14 +803,23 @@ public class stockbill extends Controller {
         insertSQL.setValue("rb", 0);
         insertSQL.setValue("remarks", rows.get(0).getString("remarks"));
         insertSQL.setValue("billdate", getDateTime_Str());
+        String billno="";
         if (rows.get(0).getString("type").equals("销售出库")) {
-            insertSQL.setValue("billno", createBillCode("stockbill"));
+            billno = createBillCode("stockbill");
+            insertSQL.setValue("billno",billno);
+            sqlList.add(DataContrlLog.createLog(this, "st_stockbill",  rows.get(0).getLong("st_stockbillid"), "红冲",  "已生成红字"+rows.get(0).getString("type")+"单【"+billno+"】").getSQL());
         } else if (rows.get(0).getString("type").equals("其他出库")) {
-            insertSQL.setValue("billno", createBillCode("STOCKBILL1"));
+            billno=createBillCode("STOCKBILL1");
+            insertSQL.setValue("billno", billno);
+            sqlList.add(DataContrlLog.createLog(this, "st_stockbill",  rows.get(0).getLong("st_stockbillid"), "红冲",  "已生成红字"+rows.get(0).getString("type")+"单【"+billno+"】").getSQL());
         } else if (rows.get(0).getString("type").equals("其他入库")) {
-            insertSQL.setValue("billno", createBillCode("STOCKBILL2"));
+            billno=createBillCode("STOCKBILL2");
+            insertSQL.setValue("billno", billno);
+            sqlList.add(DataContrlLog.createLog(this, "st_stockbill",  rows.get(0).getLong("st_stockbillid"), "红冲",  "已生成红字"+rows.get(0).getString("type")+"单【"+billno+"】").getSQL());
         } else {
-            insertSQL.setValue("billno", createBillCode("stockbill"));
+            billno=createBillCode("stockbill");
+            insertSQL.setValue("billno", billno);
+            sqlList.add(DataContrlLog.createLog(this, "st_stockbill",  rows.get(0).getLong("st_stockbillid"), "红冲",  "已生成红字"+rows.get(0).getString("type")+"单【"+billno+"】").getSQL());
         }
 
         insertSQL.setValue("outplace", rows.get(0).getString("outplace"));
@@ -822,9 +840,10 @@ public class stockbill extends Controller {
         insertSQL.setValue("changeby", username);
         insertSQL.setDateValue("changedate");
         insertSQL.setValue("status", "新建");
-        insertSQL.setValue("payamount", 0);
-        insertSQL.setValue("paydiscountamount", 0);
+        insertSQL.setValue("payamount", rows.get(0).getString("payamount"));
+        insertSQL.setValue("paydiscountamount", rows.get(0).getString("paydiscountamount"));
         sqlList.add(insertSQL.getSQL());
+        sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "新建",  "由"+rows.get(0).getString("billno")+"单红冲生成").getSQL());
 
         int i = 0;
         for (Row row : rowsdetail) {

+ 6 - 2
src/custom/restcontroller/webmanage/sale/stockbill/stockbillitems.java

@@ -148,11 +148,16 @@ public class stockbillitems extends Controller {
         Long st_stockbillid = content.getLong("st_stockbillid");
         JSONArray iteminfos = content.getJSONArray("iteminfos");
         ArrayList<String> sqlList = new ArrayList<>();
-        Rows rowscount = dbConnect.runSqlQuery("select billno,status from st_stockbill where st_stockbillid=" + st_stockbillid);
+        Rows rowscount = dbConnect.runSqlQuery("select billno,status,sourceobject from st_stockbill where st_stockbillid=" + st_stockbillid);
         if (!rowscount.isEmpty()) {
             if (!rowscount.get(0).getString("status").equals("新建")) {
                 return getErrReturnObject().setErrMsg("非新建状态的出库单无法新增修改").toString();
             }
+            if(rowscount.get(0).getString("sourceobject").equals("tpartreimbursement")){
+                return getErrReturnObject().setErrMsg("由核销生成的出入库单无法新增修改").toString();
+            }
+        }else{
+            return getErrReturnObject().setErrMsg("出入库单不存在").toString();
         }
         int i = 0;
         long maxid = 0;
@@ -210,7 +215,6 @@ public class stockbillitems extends Controller {
                                 + st_stockbillid);
                 if (rows.isNotEmpty()) {
                     if (rows.get(0).getString("status").equals("新建")) {
-
                         UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "st_stockbill_items");
                         updateSQL.setUniqueid(iteminfo.getLong("st_stockbill_itemsid"));
                         updateSQL.setSiteid(siteid);

+ 66 - 28
src/custom/restcontroller/webmanage/sale/tpartreimbursement/tpartreimbursement.java

@@ -4,6 +4,7 @@ import beans.accountbalance.Accountbalance;
 import beans.accountbalance.CashbillEntity;
 import beans.data.BatchDeleteErr;
 import beans.datacontrllog.DataContrlLog;
+import beans.stockbill.Stockbill;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import common.Controller;
@@ -337,7 +338,7 @@ public class tpartreimbursement extends Controller {
             }
         }
 
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementdetailid", "remarks","qty", "sa_orderitemsid", "sa_tpartreimbursementid");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementdetailid", "remarks","qty","checkqty", "sa_orderitemsid", "sa_tpartreimbursementid");
         querySQL.setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.inner, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid","price", "amount", "rowno", "cardno", "offstatus", "billingstatus");
         querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t2.itemid = t3.itemid AND t2.siteid = t3.siteid", "itemid","itemno", "itemname", "spec", "model");
@@ -381,11 +382,11 @@ public class tpartreimbursement extends Controller {
     @CACHEING
     public String queryCheckAmount() throws YosException {
         JSONArray sa_tpartreimbursementdetailids = content.getJSONArray("sa_tpartreimbursementdetailids");
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "qty");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "checkqty");
         querySQL.setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid","price");
         querySQL.setSiteid(siteid);
-        querySQL.addQueryFields("amount","ROUND(t1.qty*t2.price, 2)");
+        querySQL.addQueryFields("amount","ROUND(t1.checkqty*t2.price, 2)");
         querySQL.setWhere("t1.sa_tpartreimbursementdetailid", sa_tpartreimbursementdetailids);
         Rows rows = querySQL.query();
         return getSucReturnObject().setData(rows.sum("amount")).toString();
@@ -399,33 +400,49 @@ public class tpartreimbursement extends Controller {
         long sys_enterpriseid = content.getLong("sys_enterpriseid");
         JSONArray sa_tpartreimbursementdetailids = content.getJSONArray("sa_tpartreimbursementdetailids");
         JSONArray iteminfos = content.getJSONArray("iteminfos");
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementdetailid","isverified","qty","sa_orderitemsid");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementdetailid","isverified","qty","sa_orderitemsid","hongbillno");
         querySQL.setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid");
         querySQL.addJoinTable(JOINTYPE.left, "sa_tpartreimbursement", "t3", "t1.sa_tpartreimbursementid = t3.sa_tpartreimbursementid AND t1.siteid = t2.siteid","billno");
         querySQL.setSiteid(siteid);
         querySQL.setWhere("t1.sa_tpartreimbursementdetailid", sa_tpartreimbursementdetailids);
         Rows rows = querySQL.query();
-
-        QuerySQL querySQLgroup = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_orderitemsid");
-        querySQLgroup.setTableAlias("t1");
-        querySQLgroup.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid");
-        querySQLgroup.setSiteid(siteid);
-        querySQLgroup.addQueryFields("sumqty", "sum(t1.qty)");
-        querySQLgroup.setWhere("t1.sa_tpartreimbursementdetailid", sa_tpartreimbursementdetailids);
-        querySQLgroup.addGroupBy("sa_orderitemsid");
-        Rows rowsgroup = querySQLgroup.query();
-
+        ArrayList<String> billnolist = rows.toArrayList("hongbillno");
+        billnolist.add("111");
+        QuerySQL stockbillquerySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "billno");
+        stockbillquerySQL.setTableAlias("t1");
+        stockbillquerySQL.setSiteid(siteid);
+        stockbillquerySQL.setWhere("t1.billno",billnolist);
+        Rows stockbillrows =stockbillquerySQL.query();
+        RowsMap stockbillrowsMap = stockbillrows.toRowsMap("billno");
         for (Row row : rows) {
-            if (row.getBoolean("isverified")) {
-                return getErrReturnObject().setErrMsg("存在记录已核销,请检查").toString();
+            if (StringUtils.isNotBlank(row.getString("hongbillno"))) {
+                if(stockbillrowsMap.containsKey(row.getString("hongbillno"))){
+                    return getErrReturnObject().setErrMsg("存在核销生成的红字出库单,无法核销").toString();
+                }
+
             }
-            sqllist.add("update sa_tpartreimbursementdetail set isverified=1 where sa_tpartreimbursementdetailid=" + row.getLong("sa_tpartreimbursementdetailid"));
-        }
-        for (Row row : rowsgroup) {
-            sqllist.add("update sa_orderitems set verifiedqty=ifnull(verifiedqty,0)+"+row.getBigDecimal("sumqty")+" where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
         }
 
+//        QuerySQL querySQLgroup = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_orderitemsid");
+//        querySQLgroup.setTableAlias("t1");
+//        querySQLgroup.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid");
+//        querySQLgroup.setSiteid(siteid);
+//        querySQLgroup.addQueryFields("sumqty", "sum(t1.qty)");
+//        querySQLgroup.setWhere("t1.sa_tpartreimbursementdetailid", sa_tpartreimbursementdetailids);
+//        querySQLgroup.addGroupBy("sa_orderitemsid");
+//        Rows rowsgroup = querySQLgroup.query();
+
+//        for (Row row : rows) {
+//            if (row.getBoolean("isverified")) {
+//                return getErrReturnObject().setErrMsg("存在记录已核销,请检查").toString();
+//            }
+//            sqllist.add("update sa_tpartreimbursementdetail set isverified=1 where sa_tpartreimbursementdetailid=" + row.getLong("sa_tpartreimbursementdetailid"));
+//        }
+//        for (Row row : rowsgroup) {
+//            sqllist.add("update sa_orderitems set verifiedqty=ifnull(verifiedqty,0)+"+row.getBigDecimal("sumqty")+" where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
+//        }
+
         String tableName = "st_stockbill";
         Rows stocks = dbConnect.runSqlQuery("select stockid from st_stock where stockname='配件仓库' and siteid='" + siteid + "'");
         Rows department = dbConnect.runSqlQuery("select departmentid from sys_department where depname='售后部' and siteid='" + siteid + "'");
@@ -478,9 +495,9 @@ public class tpartreimbursement extends Controller {
         insertSQL.setDateValue("createdate");
         insertSQL.setValue("changeby", username);
         insertSQL.setDateValue("changedate");
-        insertSQL.setValue("checkby", username);
-        insertSQL.setDateValue("checkdate");
-        insertSQL.setValue("status", "审核");
+//        insertSQL.setValue("checkby", username);
+//        insertSQL.setDateValue("checkdate");
+        insertSQL.setValue("status", "新建");
 
         int i = 0;
         long maxid = 0;
@@ -523,18 +540,39 @@ public class tpartreimbursement extends Controller {
                 totalamount = totalamount.add(iteminfo.getBigDecimal("qty").multiply(iteminfo.getBigDecimal("price")));
             }
         }
+        for(Object object:sa_tpartreimbursementdetailids){
+            Integer sa_tpartreimbursementdetailid = (Integer) object;
+            sqllist.add("update sa_tpartreimbursementdetail set hongbillno='"+billno+"' where sa_tpartreimbursementdetailid="+sa_tpartreimbursementdetailid);
+        }
+
         insertSQL.setValue("payamount", totalamount);
         insertSQL.setValue("paydiscountamount", 0);
 
         sqllist.add(insertSQL.getSQL());
         sqllist.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "新增", "销售出库单新增成功,来源配件核销"+rows.toJsonArray("billno").toJSONString()).getSQL());
-        Rows accountbalancerows = dbConnect.runSqlQuery("select * from sa_accountbalance t1 inner join sa_accountclass t2 on  t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + sys_enterpriseid);
-
-        CashbillEntity entity = getCashbillEntity(totalamount.negate(), BigDecimal.ZERO, st_stockbillid, "销售出库单审核", billno, "由销售出库单" + billno + "审核时生成");
-        JSONObject createCashbillPay = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
-        sqllist.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
+        //Rows accountbalancerows = dbConnect.runSqlQuery("select * from sa_accountbalance t1 inner join sa_accountclass t2 on  t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + sys_enterpriseid);
 
+        //CashbillEntity entity = getCashbillEntity(totalamount.negate(), BigDecimal.ZERO, st_stockbillid, "销售出库单审核", billno, "由销售出库单" + billno + "审核时生成");
+        //JSONObject createCashbillPay = Accountbalance.createCashbillPay(dbConnect, userInfo, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
+        //sqllist.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
         dbConnect.runSqlUpdate(sqllist);
+        try {
+            Stockbill.check(this, st_stockbillid, true);
+        } catch (YosException e) {
+            // Code to handle the exception
+           dbConnect.runSqlUpdate("delete from st_stockbill where st_stockbillid="+st_stockbillid);
+           dbConnect.runSqlUpdate("delete from st_stockbill_items where st_stockbillid="+st_stockbillid);
+           dbConnect.runSqlUpdate("delete from sys_contrllog where ownerid="+st_stockbillid+" and ownertable='st_stockbill'");
+            for(Object object:sa_tpartreimbursementdetailids){
+                Integer sa_tpartreimbursementdetailid = (Integer) object;
+                dbConnect.runSqlUpdate("update sa_tpartreimbursementdetail set hongbillno='' where sa_tpartreimbursementdetailid="+sa_tpartreimbursementdetailid);
+            }
+            return getErrReturnObject().setErrMsg(e.getMessage())
+                    .toString();
+        }
+
+
+
         return getSucReturnObject().toString();
     }
 

+ 34 - 3
src/custom/restcontroller/webmanage/sale/tpartreimbursement/tpartreimbursementdetail.java

@@ -12,6 +12,7 @@ import common.data.*;
 import restcontroller.R;
 
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 
 @API(title = "配件核销单明细")
@@ -57,7 +58,7 @@ public class tpartreimbursementdetail extends Controller {
         Rows rowsdatails_jxs = querySQLdatails_jxs.query();
 
         QuerySQL tpartreimbursementdetailQuery = SQLFactory.createQuerySQL(dbConnect, "sa_tpartreimbursementdetail", "sa_orderitemsid");
-        tpartreimbursementdetailQuery.addQueryFields("sumqty", "sum(qty)");
+        tpartreimbursementdetailQuery.addQueryFields("sumqty", "sum(checkqty)");
         tpartreimbursementdetailQuery.setWhere("sa_orderitemsid", rowsdatails_jxs.toArrayList("sa_orderitemsid"));
         tpartreimbursementdetailQuery.addGroupBy("sa_orderitemsid");
 
@@ -117,7 +118,7 @@ public class tpartreimbursementdetail extends Controller {
             sa_orderitemsids.add(iteminfos.getJSONObject(i).getLongValue("sa_orderitemsid"));
         }
         QuerySQL tpartreimbursementdetailQuery = SQLFactory.createQuerySQL(dbConnect, "sa_tpartreimbursementdetail", "sa_orderitemsid");
-        tpartreimbursementdetailQuery.addQueryFields("sumqty", "sum(qty)");
+        tpartreimbursementdetailQuery.addQueryFields("sumqty", "sum(checkqty)");
         tpartreimbursementdetailQuery.setWhere("sa_orderitemsid", sa_orderitemsids);
         tpartreimbursementdetailQuery.addGroupBy("sa_orderitemsid");
 
@@ -152,6 +153,7 @@ public class tpartreimbursementdetail extends Controller {
                 insertSQL.setSiteid(siteid);
                 insertSQL.setValue("sa_tpartreimbursementid", sa_tpartreimbursementid);
                 insertSQL.setValue("qty", iteminfo.getLong("qty"));
+                insertSQL.setValue("checkqty", iteminfo.getLong("qty"));
                 insertSQL.setValue("remarks", iteminfo.getStringValue("remarks"));
                 insertSQL.setValue("sa_orderitemsid", iteminfo.getLongValue("sa_orderitemsid"));
                 i++;
@@ -170,6 +172,35 @@ public class tpartreimbursementdetail extends Controller {
         return quertpartreimbursementpjsList();
     }
 
+    @API(title = "修改可审核数量", apiversion = R.ID2025112908531803.v1.class)
+    public String changecheckqty() throws YosException {
+        Long sa_tpartreimbursementid = content.getLong("sa_tpartreimbursementid");
+        Long sa_tpartreimbursementdetailid = content.getLong("sa_tpartreimbursementdetailid");
+        BigDecimal checkqty = content.getBigDecimal("checkqty");
+        ArrayList<String> sqlList = new ArrayList<>();
+        Rows rowscount = dbConnect.runSqlQuery("select billno,status from sa_tpartreimbursement where sa_tpartreimbursementid=" + sa_tpartreimbursementid);
+        Rows rowsqty = dbConnect.runSqlQuery("select qty from sa_tpartreimbursementdetail where sa_tpartreimbursementdetailid=" + sa_tpartreimbursementdetailid);
+        if (!rowscount.isEmpty()) {
+            if (rowscount.get(0).getString("status").equals("审核")) {
+                return getErrReturnObject().setErrMsg("审核状态的配件核销单无法修改可审核数量").toString();
+            }
+        }
+        if(rowsqty.isNotEmpty()){
+            if(checkqty.compareTo(rowsqty.get(0).getBigDecimal("qty"))>0){
+                return getErrReturnObject().setErrMsg("审核数量不可大于申请数量").toString();
+            }
+        }else{
+            return getErrReturnObject().setErrMsg("配件核销单明细行不存在").toString();
+        }
+
+        UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_tpartreimbursementdetail");
+        updateSQL.setUniqueid(sa_tpartreimbursementdetailid);
+        updateSQL.setSiteid(siteid);
+        updateSQL.setValue("checkqty", checkqty);
+        sqlList.add(updateSQL.getSQL());
+        dbConnect.runSqlUpdate(sqlList);
+        return getSucReturnObject().toString();
+    }
 
 
 
@@ -193,7 +224,7 @@ public class tpartreimbursementdetail extends Controller {
         }
         Long sa_tpartreimbursementid = content.getLong("sa_tpartreimbursementid");
 
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail",  "sa_tpartreimbursementdetailid","remarks","sa_orderitemsid","sa_tpartreimbursementid","qty");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail",  "sa_tpartreimbursementdetailid","remarks","sa_orderitemsid","sa_tpartreimbursementid","qty","checkqty","hongbillno");
         querySQL.setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.inner, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid","price","amount","rowno","cardno","billingstatus");
         querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t2.itemid = t3.itemid AND t2.siteid = t3.siteid","itemno","itemname","spec","model");

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

@@ -452,6 +452,12 @@ public class workorder extends Controller {
                 }
 
             }
+            if (whereObject.containsKey("ishasitem") && !"".equals(whereObject.getString("ishasitem"))) {
+                if (whereObject.getBoolean("ishasitem")) {
+                    where.append(" and exists(select 1 from sa_workorder_node_items where sa_workorderid=t1.sa_workorderid)");
+                }
+
+            }
 
         }
         SQLFactory sqlFactory = new SQLFactory(this, "服务工单列表查询");