فهرست منبع

配件核销逻辑变更(未测试)及bug修复

hu 1 ماه پیش
والد
کامیت
af4e9a7410

+ 8 - 0
src/custom/beans/stockbill/bills/XSCK.java

@@ -87,6 +87,9 @@ public class XSCK extends BasicBill {
                 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 sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
+
                 }
                 for (Row row : itemRows) {
                     if (row.getBoolean("skucontrol")) {
@@ -105,6 +108,8 @@ public class XSCK extends BasicBill {
                 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 sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
                 }
                 for (Row row : itemRows) {
                     if (row.getBoolean("skucontrol")) {
@@ -128,6 +133,8 @@ public class XSCK extends BasicBill {
                 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 sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
                 }
                 for (Row row : itemRows) {
                     if (row.getBoolean("skucontrol")) {
@@ -144,6 +151,7 @@ public class XSCK extends BasicBill {
                 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 sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
                 }
                 for (Row row : itemRows) {
                     if (row.getBoolean("skucontrol")) {

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

@@ -6856,6 +6856,16 @@ public class R {
         public static class v1 {
         }
     }
+
+    public static class ID2025111709185903 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2025111710122903 {
+        public static class v1 {
+        }
+    }
 }
 
 

+ 1 - 1
src/custom/restcontroller/sale/order/SQL/订单-查询筛选出的价格.sql

@@ -7,5 +7,5 @@ WHERE sa_orderid in (SELECT t1.sa_orderid
                                         ON t4.contactsid = t1.sa_contractid and t4.siteid = t1.siteid
                      where t1.siteid = $siteid$
                        and t1.sys_enterpriseid = $sys_enterpriseid$
-                       and t1.deleted=0 and ((t1.createflag=1 and t1.status!='н¨') or t1.createflag=0)
+                       and t1.deleted=0 and ((t1.createflag=1 and t1.status!='新建') or t1.createflag=0)
                        and $where$)

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

@@ -150,12 +150,12 @@ public class serviceorder extends Controller {
         sqlList.add(sqlFactoryupdate.getSQL());
 
         if (issumbit) {
-            Rows agents = dbConnect.runSqlQuery("select * from sa_agents where siteid='" + siteid + "' and sys_enterpriseid=" + rows.get(0).getLong("sys_enterpriseid"));
+            Rows agents = dbConnect.runSqlQuery("select * from sa_agents where status=1 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 + "'");
+                    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");
                     RowsMap countyRowsMap = serviceagents.toRowsMap("county");
                     RowsMap cityRowsMap = serviceagents.toRowsMap("city");
                     RowsMap provinceRowsMap = serviceagents.toRowsMap("province");
@@ -300,8 +300,8 @@ public class serviceorder extends Controller {
                 .runSqlQuery("select sa_serviceorderid,status,billno,sys_enterpriseid,province,city,county from sa_serviceorder where sa_serviceorderid ='"
                         + sa_serviceorderid + "' and  siteid='" + siteid + "'");
         for (Row row : rows) {
-            if (!row.getString("status").equals("待分配") && !row.getString("status").equals("拒绝受理")) {
-                return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的服务申请单为非待分配或拒绝受理状态,无法完结服务单")
+            if (!row.getString("status").equals("待分配") && !row.getString("status").equals("拒绝受理") && !row.getString("status").equals("待受理")) {
+                return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的服务申请单为非待分配或拒绝受理或待受理状态,无法完结服务单")
                         .toString();
             }
             if (StringUtils.isBlank(content.getString("backreason"))) {

+ 2 - 2
src/custom/restcontroller/webmanage/sale/accessoryorder/accessoryorder.java

@@ -458,9 +458,9 @@ public class accessoryorder extends Controller {
                 where.append("t1.sku ='").append(whereObject.getString("sku")).append("' ");
                 where.append(")");
             }
-            if (whereObject.containsKey("mame") && !"".equals(whereObject.getString("mame"))) {
+            if (whereObject.containsKey("name") && !"".equals(whereObject.getString("name"))) {
                 where.append(" and(");
-                where.append("t1.mame ='").append(whereObject.getString("mame")).append("' ");
+                where.append("t1.name ='").append(whereObject.getString("name")).append("' ");
                 where.append(")");
             }
             if (whereObject.containsKey("phonenumber") && !"".equals(whereObject.getString("phonenumber"))) {

+ 11 - 0
src/custom/restcontroller/webmanage/sale/order/Order.java

@@ -3382,7 +3382,18 @@ public class Order extends Controller {
         return getSucReturnObject().setData(rows).toString();
     }
 
+    @API(title = "查询快递信息单列表", apiversion = R.ID2025111709185903.v1.class)
+    public String expressformList() throws YosException {
+        Long sa_orderid = content.getLong("sa_orderid");
+        QuerySQL expressformQuery = SQLFactory.createQuerySQL(this, "expressform", "*").setTableAlias("t1");
+        expressformQuery.addJoinTable(JOINTYPE.inner, "sa_expressform_stockbill", "t2", "t2.expressformid = t1.expressformid");
+        expressformQuery.addJoinTable(JOINTYPE.inner, "st_stockbill_items", "t3", "t3.st_stockbillid = t2.st_stockbillid");
+        expressformQuery.setWhere("t3.sa_orderid", sa_orderid);
+        expressformQuery.setDistinct(true);
+        Rows rows = expressformQuery.query();
 
+        return getSucReturnObject().setData(rows).toString();
+    }
 
 
     @API(title = "查询订单进度", apiversion = R.ID20221229093602.v1.class)

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

@@ -253,6 +253,31 @@ public class OrderItems extends Controller {
         return getSucReturnObject().toString();
     }
 
+    @API(title = "更新可核销数", apiversion = R.ID2025111710122903.v1.class)
+    @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, ToolBill.class, accessoryorder.class})
+    public String updatecanoffqty() throws YosException {
+        Long sa_orderid = content.getLong("sa_orderid");
+        Long sa_orderitemsid = content.getLong("sa_orderitemsid");
+        BigDecimal canoffqty = content.getBigDecimal("canoffqty");
+        Rows orderRows = dbConnect.runSqlQuery("SELECT status,sonum from sa_order WHERE sa_orderid=" + sa_orderid + " and siteid='" + siteid + "'");
+        Rows orderitemsRows = dbConnect.runSqlQuery("SELECT sa_orderitemsid,qty from sa_orderitems WHERE sa_orderid=" + sa_orderid + " and sa_orderitemsid='" + sa_orderitemsid + "'");
+        if(orderRows.isEmpty()){
+            return getErrReturnObject().setErrMsg("订单不存在").toString();
+        }
+        if(orderRows.get(0).getString("status").equals("审核")){
+            return getErrReturnObject().setErrMsg("订单【"+orderRows.get(0).getString("sonum")+"】已审核,无法更新可核销数").toString();
+        }
+        if(orderitemsRows.isEmpty()){
+            return getErrReturnObject().setErrMsg("订单明细不存在").toString();
+        }
+        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);
+        return getSucReturnObject().toString();
+    }
+
+
     @API(title = "查询订单重复商品", apiversion = R.ID2024020201095102.v1.class)
     public String get() throws YosException {
         Long sa_orderid = content.getLongValue("sa_orderid");

+ 21 - 0
src/custom/restcontroller/webmanage/sale/order/OrderItemsHelper.java

@@ -683,6 +683,27 @@ public class OrderItemsHelper extends BaseClass {
 
         insertSQL.setValue("length", length);
 
+        if(type.equals("配件订单")){
+            if(StringUtils.isBlank(item.getStringValue("cardno"))){
+                insertSQL.setValue("canoffqty", qty);
+            }else{
+                Rows aftersalesbomrows = dbConnect.runSqlQuery("select t2.sa_aftersalesbomid from sa_warrantycard t1 inner join sa_aftersalesbom_items t2 on t1.itemid=t2.itemid inner join sa_aftersalesbom t3 on t2.sa_aftersalesbomid=t3.sa_aftersalesbomid where t1.cardno='"+item.getStringValue("cardno")+"'");
+                if(aftersalesbomrows.isNotEmpty()){
+                    Rows aftersalesbompjrows = dbConnect.runSqlQuery("select qty from sa_aftersalesbom_pjs t1 where t1.sa_aftersalesbomid="+aftersalesbomrows.get(0).getString("sa_aftersalesbomid")+" and t1.itemid="+itemid);
+                    if(aftersalesbompjrows.isNotEmpty()){
+                        insertSQL.setValue("canoffqty", aftersalesbompjrows.get(0).getBigDecimal("qty").compareTo(qty)>0?qty:aftersalesbompjrows.get(0).getBigDecimal("qty"));
+                    }else{
+                        insertSQL.setValue("canoffqty", qty);
+                    }
+                }else{
+                    insertSQL.setValue("canoffqty", qty);
+                }
+            }
+
+        }else{
+            insertSQL.setValue("canoffqty", 0);
+        }
+
         return insertSQL;
     }
 

+ 13 - 9
src/custom/restcontroller/webmanage/sale/serviceorder/serviceorder.java

@@ -7,6 +7,7 @@ import beans.parameter.Parameter;
 import beans.salearea.SaleArea;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
+import common.BaseClass;
 import common.Controller;
 import common.YosException;
 import common.annotation.API;
@@ -23,10 +24,7 @@ import restcontroller.webmanage.sale.workorder.workorder;
 import restcontroller.webmanage.sale.workorder.workpresetInfo;
 import utility.sms.Sms;
 
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
+import java.util.*;
 import java.util.regex.Pattern;
 
 /**
@@ -464,7 +462,7 @@ public class serviceorder extends Controller {
 
         SQLFactory sqlFactory2 = new SQLFactory(this, "服务申请单状态统计");
         sqlFactory2.addParameter("siteid", siteid);
-        sqlFactory2.addParameter_SQL("where", where);
+        sqlFactory2.addParameter_SQL("where", " 1=1 ");
         Rows rows_total = dbConnect.runSqlQuery(sqlFactory2.getSQL());
 
         if (!rows.isEmpty()) {
@@ -670,9 +668,9 @@ public class serviceorder extends Controller {
 
         sqlList.add("update sa_workorder set status='待接单' where sa_workorderid ='"
                 + sa_workorderid + "' and  siteid='" + siteid + "'");
+        sqlList.add("delete from sys_datateam where ownertable='sa_workorder' and ownerid="
+                + sa_workorderid + " and siteid='" + siteid + "'");
         if (projectlearders != null && !projectlearders.isEmpty()) {
-            sqlList.add("delete from sys_datateam where ownertable='sa_workorder' and ownerid="
-                    + sa_workorderid + " and siteid='" + siteid + "'");
             for (Object obj : projectlearders) {
                 sqlList.addAll(DataTeam.createTeamSQL(this, "sa_workorder", sa_workorderid, (int) obj));
             }
@@ -742,8 +740,14 @@ public class serviceorder extends Controller {
         sms.sendout(Sms.SmsType.PassWord,customerphone, Parameter.getString("chuanglan_sms_model_password"), new String[]{verificationCode});
         message_map.put(customerphone, new VerificationManage(verificationCode));
         Row row = new Row();
-        row.put("code", 1);
-        row.put("msg", "手机验证码已发送,请注意查收!");
+        if (!BaseClass.isdebug() && !Arrays.asList(Parameter.getString("system_invalidate_phonenumber").split(",")).contains(customerphone)) {
+            row.put("code", 1);
+            row.put("msg", "手机验证码已发送,请注意查收!");
+        }else{
+            row.put("code", 1);
+            row.put("msg", "手机验证码为:"+verificationCode);
+        }
+
         return getSucReturnObject().setData(row).toString();
     }
 

+ 83 - 39
src/custom/restcontroller/webmanage/sale/tpartreimbursement/tpartreimbursement.java

@@ -61,6 +61,12 @@ public class tpartreimbursement extends Controller {
             insertSQL.setValue("changeby", username);
             insertSQL.setDateValue("changedate");
             insertSQL.setValue("status", "新建");
+            //制单方 1表示工厂方,0表示客户方
+            if (usertype == 21 || usertype == 22) {
+                insertSQL.setValue("createflag", 0);
+            } else {
+                insertSQL.setValue("createflag", 1);
+            }
             sqlList.add(insertSQL.getSQL());
 
             sqlList.add(DataContrlLog.createLog(this, "sa_tpartreimbursement", sa_tpartreimbursementid, "新增", "配件核销单新增成功").getSQL());
@@ -107,17 +113,17 @@ public class tpartreimbursement extends Controller {
         querySQL.setWhere("t1.sa_tpartreimbursementid", sa_tpartreimbursementid);
         Rows rows = querySQL.query();
 
-        QuerySQL querySQLdetail = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementid", "sa_tpartreimbursementdetailid");
-        querySQLdetail.setTableAlias("t1");
-        querySQLdetail.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid", "*");
-        querySQLdetail.setWhere("t1.siteid", siteid);
-        querySQLdetail.setWhere("t1.sa_tpartreimbursementid", rows.toArrayList("sa_tpartreimbursementid"));
-        Rows rowsdetail = querySQL.query();
-        RowsMap rowsMap = rowsdetail.toRowsMap("sa_tpartreimbursementid");
-        for (Row row : rows) {
-            row.put("totalamount", rowsMap.get(row.getString("sa_tpartreimbursementid")).sum("amount"));
-            row.put("offamount", rowsMap.get(row.getString("sa_tpartreimbursementid")).toRowsMap("offstatus").get("已核销").sum("amount"));
-        }
+//        QuerySQL querySQLdetail = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementid", "sa_tpartreimbursementdetailid","qty");
+//        querySQLdetail.setTableAlias("t1");
+//        querySQLdetail.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid", "price");
+//        querySQLdetail.setWhere("t1.siteid", siteid);
+//        querySQLdetail.setWhere("t1.sa_tpartreimbursementid", rows.toArrayList("sa_tpartreimbursementid"));
+//        Rows rowsdetail = querySQL.query();
+//        RowsMap rowsMap = rowsdetail.toRowsMap("sa_tpartreimbursementid");
+//        for (Row row : rows) {
+//            row.put("totalamount", rowsMap.get(row.getString("sa_tpartreimbursementid")).sum("amount"));
+//            row.put("offamount", rowsMap.get(row.getString("sa_tpartreimbursementid")).toRowsMap("offstatus").get("已核销").sum("amount"));
+//        }
 
         Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
         return getSucReturnObject().setData(row).toString();
@@ -159,17 +165,17 @@ public class tpartreimbursement extends Controller {
         querySQL.setPage(pageSize, pageNumber);
         Rows rows = querySQL.query();
 
-        QuerySQL querySQLdetail = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementid", "sa_tpartreimbursementdetailid");
-        querySQLdetail.setTableAlias("t1");
-        querySQLdetail.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid", "*");
-        querySQLdetail.setWhere("t1.siteid", siteid);
-        querySQLdetail.setWhere("t1.sa_tpartreimbursementid", rows.toArrayList("sa_tpartreimbursementid"));
-        Rows rowsdetail = querySQL.query();
-        RowsMap rowsMap = rowsdetail.toRowsMap("sa_tpartreimbursementid");
-        for (Row row : rows) {
-            row.put("totalamount", rowsMap.get(row.getString("sa_tpartreimbursementid")).sum("amount"));
-            row.put("offamount", rowsMap.get(row.getString("sa_tpartreimbursementid")).toRowsMap("offstatus").get("已核销").sum("amount"));
-        }
+//        QuerySQL querySQLdetail = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementid", "sa_tpartreimbursementdetailid");
+//        querySQLdetail.setTableAlias("t1");
+//        querySQLdetail.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid", "*");
+//        querySQLdetail.setWhere("t1.siteid", siteid);
+//        querySQLdetail.setWhere("t1.sa_tpartreimbursementid", rows.toArrayList("sa_tpartreimbursementid"));
+//        Rows rowsdetail = querySQL.query();
+//        RowsMap rowsMap = rowsdetail.toRowsMap("sa_tpartreimbursementid");
+//        for (Row row : rows) {
+//            row.put("totalamount", rowsMap.get(row.getString("sa_tpartreimbursementid")).sum("amount"));
+//            row.put("offamount", rowsMap.get(row.getString("sa_tpartreimbursementid")).toRowsMap("offstatus").get("已核销").sum("amount"));
+//        }
         return getSucReturnObject().setData(rows).toString();
     }
 
@@ -204,7 +210,7 @@ public class tpartreimbursement extends Controller {
         Long sa_tpartreimbursementid = content.getLong("sa_tpartreimbursementid");
         boolean issubmit = content.getBooleanValue("issubmit");
 
-        Rows rows = dbConnect.runSqlQuery("select t1.billno,t1.status from sa_tpartreimbursement t1 where t1.sa_tpartreimbursementid ='"
+        Rows rows = dbConnect.runSqlQuery("select t1.billno,t1.status,createflag from sa_tpartreimbursement t1 where t1.sa_tpartreimbursementid ='"
                 + sa_tpartreimbursementid + "' and  t1.siteid='" + siteid + "'");
 
         for (Row row : rows) {
@@ -223,7 +229,28 @@ public class tpartreimbursement extends Controller {
         }
         ArrayList<String> sqlList = new ArrayList<>();
         if (issubmit) {
-
+            Rows rowsdetail = dbConnect.runSqlQuery("select t1.sa_orderitemsid from sa_tpartreimbursement t1 where t1.sa_tpartreimbursementid ='"
+                    + sa_tpartreimbursementid + "' and  t1.siteid='" + siteid + "'");
+
+            QuerySQL tpartreimbursementdetailQuery = SQLFactory.createQuerySQL(dbConnect, "sa_tpartreimbursementdetail", "sa_orderitemsid");
+            tpartreimbursementdetailQuery.addQueryFields("sumqty", "sum(qty)");
+            tpartreimbursementdetailQuery.setWhere("sa_orderitemsid", rowsdetail.toArrayList("sa_orderitemsid"));
+            tpartreimbursementdetailQuery.addGroupBy("sa_orderitemsid");
+
+
+            QuerySQL orderitemsQuery = SQLFactory.createQuerySQL(dbConnect, "sa_orderitems", "sa_orderitemsid");
+            orderitemsQuery.setTableAlias("t1");
+            orderitemsQuery.addJoinTable(JOINTYPE.inner,tpartreimbursementdetailQuery,"t2","t1.sa_orderitemsid=t2.sa_orderitemsid");
+            orderitemsQuery.setWhere("t1.sa_orderitemsid", rowsdetail.toArrayList("sa_orderitemsid"));
+            orderitemsQuery.addQueryFields("qty", "t1.tobeoffqty-ifnull(t2.sumqty,0)");
+            Rows orderitemsrows = orderitemsQuery.query();
+            if(!rows.get(0).getBoolean("createflag")){
+                for (Row row :orderitemsrows) {
+                    if(row.getBigDecimal("qty").compareTo(BigDecimal.ZERO)<0){
+                        return getErrReturnObject().setErrMsg("该配件核销单数量不符合要求,请检查").toString();
+                    }
+                }
+            }
             sqlList.add(
                     DataContrlLog.createLog(this, "sa_tpartreimbursement", sa_tpartreimbursementid, "提交", "配件核销单提交成功").getSQL());
         } else {
@@ -295,9 +322,9 @@ public class tpartreimbursement extends Controller {
             }
         }
 
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementdetailid", "remarks", "sa_orderitemsid", "sa_tpartreimbursementid");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementdetailid", "remarks","qty", "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", "qty", "price", "amount", "rowno", "cardno", "offstatus", "billingstatus");
+        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", "itemno", "itemname", "spec", "model");
         querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t4", "t2.sa_orderid = t4.sa_orderid AND t2.siteid = t4.siteid", "sonum");
         querySQL.addJoinTable(JOINTYPE.left, "sa_warrantycard", "t5", "t2.cardno = t5.cardno AND t2.siteid = t5.siteid", "name", "phonenumber");
@@ -306,7 +333,7 @@ public class tpartreimbursement extends Controller {
         querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t8", "t8.sys_enterpriseid = t6.sys_enterpriseid AND t8.siteid = t6.siteid", "agentnum");
 
         querySQL.setSiteid(siteid);
-        querySQL.setWhere("t6.status='审核' and t2.offstatus='待核销' and t6.sys_enterpriseid=" + sys_enterpriseid);
+        querySQL.setWhere("t6.status='审核' and t1.isverified=0 and t6.sys_enterpriseid=" + sys_enterpriseid);
         querySQL.setWhere(where.toString());
         querySQL.setPage(pageSize, pageNumber);
         Rows rows = querySQL.query();
@@ -323,12 +350,12 @@ public class tpartreimbursement extends Controller {
                 "inner join sa_order t3 on t2.sa_orderid=t3.sa_orderid and t2.siteid=t3.siteid" +
                 " where t1.siteid='" + siteid + "' and t1.status='审核' and t1.type='销售出库' and t3.type='配件订单' and t3.sys_enterpriseid='" + sys_enterpriseid + "' and DATE_FORMAT( t1.checkdate, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )");
 
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems", "amount");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill");
         querySQL.setTableAlias("t1");
-        querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t2", "t2.sa_orderid = t1.sa_orderid AND t2.siteid = t1.siteid");
+        querySQL.addJoinTable(JOINTYPE.left, "st_stockbill_items", "t2", "t2.st_stockbillid = t1.st_stockbillid AND t2.siteid = t1.siteid","amount");
         querySQL.setSiteid(siteid);
-        querySQL.setWhere("t2.sys_enterpriseid", sys_enterpriseid);
-        querySQL.setWhere("t1.offstatus='已核销' and DATE_FORMAT( t1.offdate, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )");
+        querySQL.setWhere("t1.sys_enterpriseid", sys_enterpriseid);
+        querySQL.setWhere("t1.sourceobject='tpartreimbursement' and t1.status='审核' and t1.type='销售出库' and DATE_FORMAT(t1.checkdate, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )");
         Rows rows = querySQL.query();
 
 
@@ -338,11 +365,13 @@ public class tpartreimbursement extends Controller {
     @API(title = "查询审核需核销金额", apiversion = R.ID2025081815213903.v1.class)
     @CACHEING
     public String queryCheckAmount() throws YosException {
-        JSONArray sa_orderitemsids = content.getJSONArray("sa_orderitemsids");
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems", "amount");
+        JSONArray sa_tpartreimbursementdetailids = content.getJSONArray("sa_tpartreimbursementdetailids");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "qty");
         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.setWhere("t1.sa_orderitemsid", sa_orderitemsids);
+        querySQL.addQueryFields("amount","t1.qty*t2.price");
+        querySQL.setWhere("t1.sa_tpartreimbursementdetailid", sa_tpartreimbursementdetailids);
         Rows rows = querySQL.query();
         return getSucReturnObject().setData(rows.sum("amount")).toString();
     }
@@ -353,19 +382,34 @@ public class tpartreimbursement extends Controller {
     public String hexiao() throws YosException {
         ArrayList<String> sqllist = new ArrayList<>();
         long sys_enterpriseid = content.getLong("sys_enterpriseid");
-        JSONArray sa_orderitemsids = content.getJSONArray("sa_orderitemsids");
+        JSONArray sa_tpartreimbursementdetailids = content.getJSONArray("sa_tpartreimbursementdetailids");
         JSONArray iteminfos = content.getJSONArray("iteminfos");
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems", "offstatus", "sa_orderitemsid", "amount");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_tpartreimbursementdetail", "sa_tpartreimbursementdetailid","isverified","qty","sa_orderitemsid");
         querySQL.setTableAlias("t1");
+        querySQL.addJoinTable(JOINTYPE.left, "sa_orderitems", "t2", "t1.sa_orderitemsid = t2.sa_orderitemsid AND t1.siteid = t2.siteid");
         querySQL.setSiteid(siteid);
-        querySQL.setWhere("t1.sa_orderitemsid", sa_orderitemsids);
+        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();
+
         for (Row row : rows) {
-            if (!row.getString("offstatus").equals("待核销")) {
+            if (row.getBoolean("isverified")) {
                 return getErrReturnObject().setErrMsg("存在记录已核销,请检查").toString();
             }
-            sqllist.add("update sa_orderitems set offstatus='已核销',offdate='" + getDate_Str() + "' where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
+            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 + "'");

+ 54 - 25
src/custom/restcontroller/webmanage/sale/tpartreimbursement/tpartreimbursementdetail.java

@@ -23,6 +23,12 @@ public class tpartreimbursementdetail extends Controller {
     @API(title = "配件申请单明细查询", apiversion = R.ID2025081915191103.v1.class)
     @CACHEING
     public String queryOrderItemList() throws YosException {
+        long sa_tpartreimbursementid=content.getLong("sa_tpartreimbursementid");
+        Rows tpartreimbursementRows = dbConnect.runSqlQuery("select * from sa_tpartreimbursement where sa_tpartreimbursementid="+sa_tpartreimbursementid);
+        if(tpartreimbursementRows.isEmpty()){
+            return getErrReturnObject().setErrMsg("配件核销单不存在").toString();
+        }
+
         /*
          * 过滤条件设置
          */
@@ -41,14 +47,15 @@ public class tpartreimbursementdetail extends Controller {
                 where.append(")");
             }
         }
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems ", "itemid","qty","price","amount","rowno","sa_orderitemsid","sa_orderid");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems", "itemid","qty","price","amount","rowno","sa_orderitemsid","sa_orderid");
         querySQL.setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.inner,"sa_order", "t2", "t1.sa_orderid = t2.sa_orderid AND t1.siteid = t2.siteid", "sonum");
         querySQL.addJoinTable(JOINTYPE.left,"plm_item", "t3", "t1.itemid = t3.itemid AND t1.siteid = t3.siteid", "itemno","itemname","model","spec");
         querySQL.setSiteid(siteid);
-        querySQL.setWhere("t1.offstatus='待核销'");
+        if(!tpartreimbursementRows.get(0).getBoolean("createflag")){
+            querySQL.setWhere("t1.tobeoffqty>t1.verifiedqty and t1.tobeoffqty>0");
+        }
         querySQL.setWhere("t2.sys_enterpriseid",sys_enterpriseid);
-        querySQL.setWhere("t1.sa_orderitemsid not in (select t1.sa_orderitemsid from sa_tpartreimbursementdetail t1 inner join sa_tpartreimbursement t2 on t1.sa_tpartreimbursementid=t2.sa_tpartreimbursementid and t1.siteid=t2.siteid where t1.siteid='"+siteid+"')");
         querySQL.setWhere(where.toString());
         querySQL.setOrderBy("t1.rowno asc");
         querySQL.setPage(pageSize, pageNumber);
@@ -64,14 +71,47 @@ public class tpartreimbursementdetail extends Controller {
         Long sa_tpartreimbursementid = content.getLong("sa_tpartreimbursementid");
         JSONArray iteminfos = content.getJSONArray("iteminfos");
         ArrayList<String> sqlList = new ArrayList<>();
-        Rows rowscount = dbConnect.runSqlQuery("select billno,status from sa_tpartreimbursement where sa_tpartreimbursementid=" + sa_tpartreimbursementid);
+        Rows rowscount = dbConnect.runSqlQuery("select billno,status,createflag from sa_tpartreimbursement where sa_tpartreimbursementid=" + sa_tpartreimbursementid);
         if (!rowscount.isEmpty()) {
-            if (!rowscount.get(0).getString("status").equals("新建")) {
-                return getErrReturnObject().setErrMsg("非新建状态的送修单无法新增修改").toString();
+            if(!rowscount.get(0).getBoolean("createflag")){
+                if (!rowscount.get(0).getString("status").equals("新建")) {
+                    return getErrReturnObject().setErrMsg("非新建状态的配件核销单无法新增修改").toString();
+                }
+            }else{
+                if (rowscount.get(0).getString("status").equals("审核")) {
+                    return getErrReturnObject().setErrMsg("审核状态的配件核销单无法新增修改").toString();
+                }
             }
+
         }
+        ArrayList<Long> sa_orderitemsids = new ArrayList<>();
+        for (int i = 0; i < iteminfos.size(); i++) {
+            sa_orderitemsids.add(iteminfos.getJSONObject(i).getLongValue("sa_orderitemsid"));
+        }
+        QuerySQL tpartreimbursementdetailQuery = SQLFactory.createQuerySQL(dbConnect, "sa_tpartreimbursementdetail", "sa_orderitemsid");
+        tpartreimbursementdetailQuery.addQueryFields("sumqty", "sum(qty)");
+        tpartreimbursementdetailQuery.setWhere("sa_orderitemsid", sa_orderitemsids);
+        tpartreimbursementdetailQuery.addGroupBy("sa_orderitemsid");
+
+
+        QuerySQL orderitemsQuery = SQLFactory.createQuerySQL(dbConnect, "sa_orderitems", "sa_orderitemsid");
+        orderitemsQuery.setTableAlias("t1");
+        orderitemsQuery.addJoinTable(JOINTYPE.inner,tpartreimbursementdetailQuery,"t2","t1.sa_orderitemsid=t2.sa_orderitemsid");
+        orderitemsQuery.setWhere("t1.sa_orderitemsid", sa_orderitemsids);
+        orderitemsQuery.addQueryFields("qty", "t1.tobeoffqty-ifnull(t2.sumqty,0)");
+        Rows rows = orderitemsQuery.query();
+        RowsMap rowsMap = rows.toRowsMap("sa_orderitemsid");
+        if(!rowscount.get(0).getBoolean("createflag")){
+            for (int i = 0; i < iteminfos.size(); i++) {
+                if(rowsMap.containsKey(iteminfos.getJSONObject(i).getStringValue("sa_orderitemsid"))){
+                    if(rowsMap.get(iteminfos.getJSONObject(i).getStringValue("sa_orderitemsid")).get(0).getBigDecimal("qty").compareTo(iteminfos.getJSONObject(i).getBigDecimal("qty"))<0){
+                        return getErrReturnObject().setErrMsg("该配件核销单数量不符合要求,请检查").toString();
+                    }
+                }
+            }
+        }
+
         int i = 0;
-        long maxid = 0;
         long[] sa_tpartreimbursementdetailid = createTableID("sa_tpartreimbursementdetail", iteminfos.size());
         for (Object obj : iteminfos) {
             JSONObject iteminfo = (JSONObject) obj;
@@ -83,29 +123,18 @@ public class tpartreimbursementdetail extends Controller {
                 insertSQL.setUniqueid(sa_tpartreimbursementdetailid[i]);
                 insertSQL.setSiteid(siteid);
                 insertSQL.setValue("sa_tpartreimbursementid", sa_tpartreimbursementid);
+                insertSQL.setValue("qty", iteminfo.getLong("qty"));
                 insertSQL.setValue("remarks", iteminfo.getStringValue("remarks"));
                 insertSQL.setValue("sa_orderitemsid", iteminfo.getLongValue("sa_orderitemsid"));
                 i++;
                 sqlList.add(insertSQL.getSQL());
             } else {
-                Rows rows = dbConnect.runSqlQuery(
-                        "SELECT status from sa_tpartreimbursement WHERE sa_tpartreimbursementid = "
-                                + sa_tpartreimbursementid);
-                if (rows.isNotEmpty()) {
-                    if (rows.get(0).getString("status").equals("新建")) {
-
-                        UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_tpartreimbursementdetail");
-                        updateSQL.setUniqueid(iteminfo.getLong("sa_tpartreimbursementdetailid"));
-                        updateSQL.setSiteid(siteid);
-                        updateSQL.setValue("remarks", iteminfo.getStringValue("remarks"));
-                        sqlList.add(updateSQL.getSQL());
-                    } else {
-                        return getErrReturnObject().setErrMsg("非新建状态下无法编辑").toString();
-                    }
-
-                } else {
-                    return getErrReturnObject().setErrMsg("该配件核销单不存在").toString();
-                }
+                UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_tpartreimbursementdetail");
+                updateSQL.setUniqueid(iteminfo.getLong("sa_tpartreimbursementdetailid"));
+                updateSQL.setSiteid(siteid);
+                updateSQL.setValue("qty", iteminfo.getLong("qty"));
+                updateSQL.setValue("remarks", iteminfo.getStringValue("remarks"));
+                sqlList.add(updateSQL.getSQL());
             }
 
         }