Przeglądaj źródła

新增领料单相关接口

shenjingwei 2 miesięcy temu
rodzic
commit
7beb9b26a7

+ 88 - 11
src/custom/beans/stockbill/bills/QTRK.java

@@ -1,10 +1,9 @@
 package beans.stockbill.bills;
 
+import common.BaseClass;
 import common.Controller;
 import common.YosException;
-import common.data.Row;
-import common.data.Rows;
-import common.data.RowsMap;
+import common.data.*;
 
 import java.util.ArrayList;
 
@@ -16,29 +15,107 @@ public class QTRK extends BasicBill {
 
     @Override
     public void checkValidate(boolean ischeck) throws YosException {
-        if(ischeck){
+        if (ischeck) {
             RowsMap codeRowsMap = codeRows.toRowsMap("st_stockbill_itemsid");
-            for(Row row:itemRows){
-                if(row.getBoolean("skucontrol")){
-                    if(codeRowsMap.containsKey(row.getString("st_stockbill_itemsid"))){
-                        if(codeRowsMap.get(row.getString("st_stockbill_itemsid")).size()!=row.getInteger("qty")){
+            for (Row row : itemRows) {
+                if (row.getBoolean("skucontrol")) {
+                    if (codeRowsMap.containsKey(row.getString("st_stockbill_itemsid"))) {
+                        if (codeRowsMap.get(row.getString("st_stockbill_itemsid")).size() != row.getInteger("qty")) {
                             //throw new YosException("行号:"+row.getString("rowno")+"序列号数量和入库数量不一致");
                         }
-                    }else{
+                    } else {
                         //throw new YosException("受序列号管控的商品,审核时必须有序列号");
                     }
                 }
 
             }
         }
-
+        if ("配件入库".equals(billTypeMX) && ischeck) {
+            Rows detailrows = dbConnect.runSqlQuery("select sourceid,qty,itemno from st_stockbill_items where st_stockbillid=" + st_stockbillid + " and sourceobject='sa_itemrequestitems' ");
+            if (detailrows.isNotEmpty() && rb == 0) {
+                throw new YosException("入库明细来源于领料单的其他入库单不可红冲");
+            }
+            QuerySQL querySQL = SQLFactory.createQuerySQL(dbConnect, "sa_itemrequestitems", "sa_itemrequestitemsid", "qty", "instockqty", "isclose").setTableAlias("t1");
+            querySQL.addJoinTable(BaseClass.JOINTYPE.inner, "sa_itemrequest", "t2", "sa_itemrequestid=:sa_itemrequestid", "billno", "status");
+            querySQL.setWhere("t1.sa_itemrequestitemsid", detailrows.toArrayList("sourceid"));
+            RowsMap itemrequestitemsRowsMap = querySQL.query().toRowsMap("sa_itemrequestitemsid");
+            for (Row row : detailrows) {
+                long sourceid = row.getLong("sourceid");
+                String itemno = row.getString("itemno");
+                double intqty = row.getDouble("qty");
+                if (!itemrequestitemsRowsMap.containsKey(String.valueOf(sourceid))) {
+                    throw new YosException("领料单ID:" + sourceid + ",配件编号" + itemno + "已被删除!");
+                }
+                Row itemrequestitemRow = itemrequestitemsRowsMap.get(String.valueOf(sourceid)).get(0);
+                String billno = itemrequestitemRow.getString("billno");
+                if (!itemrequestitemRow.getString("status").equals("审核")) {
+                    throw new YosException("领料单:" + billno + "不在审核状态");
+                }
+                if (itemrequestitemRow.getBoolean("isclose")) {
+                    throw new YosException("领料单:" + billno + ",配件" + itemno + "行已关闭");
+                }
+                if (intqty < 0) {
+                    throw new YosException("配件:" + row.getString("itemno") + "数量不能小于0");
+                }
+            }
+        }
 
         super.checkValidate(ischeck);
     }
 
     @Override
     public ArrayList<String> getCheckSql(boolean ischeck) throws YosException {
-        return super.getCheckSql(ischeck);
+        ArrayList<String> sqlList = super.getCheckSql(ischeck);
+        if ("配件入库".equals(billTypeMX)) {
+            Rows detailrows = dbConnect.runSqlQuery("select sourceid,sum(qty)as qty from st_stockbill_items where st_stockbillid=" + st_stockbillid + " and sourceobject='sa_itemrequestitems' ");
+            if (detailrows.isNotEmpty()) {
+                for (Row row : detailrows) {
+                    long sourceid = row.getLong("sourceid");
+                    double qty = row.getDouble("qty");
+                    if (ischeck) {
+                        sqlList.add("update sa_itemrequestitems set instockqty=ifnull(instockqty,0)+" + qty + " where sa_itemrequestitemsid=" + sourceid);
+                    } else {
+                        sqlList.add("update sa_itemrequestitems set instockqty=ifnull(instockqty,0)-" + qty + " where sa_itemrequestitemsid=" + sourceid);
+                    }
+                }
+                ArrayList<String> sa_itemrequestids = SQLFactory.createQuerySQL(dbConnect, "sa_itemrequestitems", "sa_itemrequestid").setWhere("sa_itemrequestitemsid", detailrows.toArrayList("sourceid")).query().toArrayList("sa_itemrequestid");
+
+                if (ischeck) {
+                    UpdateSQL itemrequestitemsClose = SQLFactory.createUpdateSQL(dbConnect, "sa_itemrequestitems");
+                    itemrequestitemsClose.setValue("isclose", true);
+                    itemrequestitemsClose.setValue("closeby", controller.username);
+                    itemrequestitemsClose.setDateValue("closedate");
+                    itemrequestitemsClose.setWhere("instockqty>=qty");
+                    itemrequestitemsClose.setWhere("sa_itemrequestitemsid", detailrows.toArrayList("sourceid"));
+                    sqlList.add(itemrequestitemsClose.getSQL());
+
+                    UpdateSQL itemrequestClose = SQLFactory.createUpdateSQL(dbConnect, "sa_itemrequest");
+                    itemrequestClose.setValue("status", "关闭");
+                    itemrequestClose.setValue("closeby", controller.username);
+                    itemrequestClose.setDateValue("closedate");
+                    itemrequestClose.setWhere("sa_itemrequestids", sa_itemrequestids);
+                    itemrequestClose.setWhere("not exists(select * from sa_itemrequestitems where isclose=0 and sa_itemrequest.sa_itemrequestid=sa_itemrequestitems.sa_itemrequestid)");
+                    sqlList.add(itemrequestClose.getSQL());
+                } else {
+                    UpdateSQL itemrequestitemsUnClose = SQLFactory.createUpdateSQL(dbConnect, "sa_itemrequestitems");
+                    itemrequestitemsUnClose.setValue("isclose", false);
+                    itemrequestitemsUnClose.setValue("closeby", null);
+                    itemrequestitemsUnClose.setValue("closedate", null);
+                    itemrequestitemsUnClose.setWhere("ifnull(instockqty,0)<qty");
+                    itemrequestitemsUnClose.setWhere("sa_itemrequestitemsid", detailrows.toArrayList("sourceid"));
+                    sqlList.add(itemrequestitemsUnClose.getSQL());
+
+                    UpdateSQL itemrequestClose = SQLFactory.createUpdateSQL(dbConnect, "sa_itemrequest");
+                    itemrequestClose.setValue("status", "审核");
+                    itemrequestClose.setValue("closeby", null);
+                    itemrequestClose.setValue("closedate", null);
+                    itemrequestClose.setWhere("sa_itemrequestids", sa_itemrequestids);
+                    itemrequestClose.setWhere("exists(select * from sa_itemrequestitems where isclose=0 and sa_itemrequest.sa_itemrequestid=sa_itemrequestitems.sa_itemrequestid)");
+                    sqlList.add(itemrequestClose.getSQL());
+                }
+            }
+        }
+        return sqlList;
     }
 
 

+ 12 - 0
src/custom/objectregister/plm_itemextend.java

@@ -0,0 +1,12 @@
+package objectregister;
+
+import common.annotation.Table;
+import common.annotation.TableCol;
+import common.data.db.initialization.base.YosObject;
+
+@Table(comment = "货品档案扩展属性字段表", uniquecolumn = "plm_itemextendid", issystem = false)
+public class plm_itemextend extends YosObject {
+
+    @TableCol(title = "erp型号", column_type = ColumnType.varchar, numeric_precision = 200)
+    public String erpmodel;
+}

+ 38 - 0
src/custom/objectregister/sa_itemrequest.java

@@ -0,0 +1,38 @@
+package objectregister;
+
+import common.annotation.Table;
+import common.annotation.TableCol;
+import common.data.db.initialization.base.YosObject;
+
+@Table(comment = "配件领料单表头", uniquecolumn = "sa_itemrequestid", issystem = false)
+public class sa_itemrequest extends YosObject {
+
+    @TableCol(title = "单号", column_type = ColumnType.varchar, numeric_precision = 50)
+    public String billno;
+    @TableCol(title = "单据日期", column_type = ColumnType.date)
+    public String billdate;
+    @TableCol(title = "供应商名称", column_type = ColumnType.varchar, numeric_precision = 200)
+    public String suppname;
+    @TableCol(title = "备注", column_type = ColumnType.varchar, numeric_precision = 500)
+    public String remarks;
+    @TableCol(title = "状态", column_type = ColumnType.varchar, numeric_precision = 50)
+    public String status = "新建";
+    @TableCol(title = "创建人", column_type = ColumnType.varchar, numeric_precision = 50)
+    public String createby;
+    @TableCol(title = "创建时间", column_type = ColumnType.datetime)
+    public String createdate;
+    @TableCol(title = "修改人", column_type = ColumnType.varchar, numeric_precision = 50)
+    public String changeby;
+    @TableCol(title = "修改时间", column_type = ColumnType.datetime)
+    public String changedate;
+    @TableCol(title = "审核人", column_type = ColumnType.varchar, numeric_precision = 50)
+    public String checkby;
+    @TableCol(title = "审核时间", column_type = ColumnType.datetime)
+    public String checkdate;
+    @TableCol(title = "关闭人", column_type = ColumnType.varchar, numeric_precision = 50)
+    public String closeby;
+    @TableCol(title = "关闭时间", column_type = ColumnType.datetime)
+    public String closedate;
+    @TableCol(title = "站点ID", column_type = ColumnType.varchar)
+    public String siteid;
+}

+ 41 - 0
src/custom/objectregister/sa_itemrequestitems.java

@@ -0,0 +1,41 @@
+package objectregister;
+
+import common.annotation.Table;
+import common.annotation.TableCol;
+import common.data.db.initialization.base.YosObject;
+
+@Table(comment = "配件领料单表体", uniquecolumn = "sa_itemrequestitemsid", issystem = false)
+public class sa_itemrequestitems extends YosObject {
+    @TableCol(title = "领料单ID", column_type = ColumnType.bigint)
+    public Long sa_itemrequestid;
+    @TableCol(title = "物料id", column_type = ColumnType.bigint)
+    public Long itemid;
+    //    @TableCol(title = "配件名称", column_type = ColumnType.varchar, numeric_precision = 500)
+//    public String itemname;
+//    @TableCol(title = "型号", column_type = ColumnType.varchar, numeric_precision = 200)
+//    public String model;
+//    @TableCol(title = "规格", column_type = ColumnType.varchar, numeric_precision = 200)
+//    public String standards;
+//    @TableCol(title = "erp品号", column_type = ColumnType.varchar, numeric_precision = 50)
+//    public String erpitemno;
+//    @TableCol(title = "erp名称", column_type = ColumnType.varchar, numeric_precision = 200)
+//    public String erpitemname;
+//    @TableCol(title = "erp型号", column_type = ColumnType.varchar, numeric_precision = 200)
+//    public String erpmodel;
+//    @TableCol(title = "单位", column_type = ColumnType.varchar, numeric_precision = 50)
+//    public String unitname;
+    @TableCol(title = "申请数量", column_type = ColumnType.decimal, numeric_precision = 16, numeric_scale = 2)
+    public Double qty;
+    @TableCol(title = "已入库数", column_type = ColumnType.decimal, numeric_precision = 16, numeric_scale = 2)
+    public Double instockqty = 0d;
+    @TableCol(title = "备注", column_type = ColumnType.varchar, numeric_precision = 500)
+    public String remarks;
+    @TableCol(title = "是否关闭", column_type = ColumnType.smallint)
+    public Integer isclose = 0;
+    @TableCol(title = "关闭人", column_type = ColumnType.varchar, numeric_precision = 50)
+    public String closeby;
+    @TableCol(title = "关闭时间", column_type = ColumnType.datetime)
+    public String closedate;
+    @TableCol(title = "站点ID", column_type = ColumnType.varchar)
+    public String siteid;
+}

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

@@ -7030,6 +7030,61 @@ public class R {
         public static class v1 {
         }
     }
+
+    public static class ID2026020216135101 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2026020216213801 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2026020216330101 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2026020216364301 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2026020216484501 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2026020216495701 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2026020308374601 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2026020308552901 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2026020308563801 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2026020309035801 {
+        public static class v1 {
+        }
+    }
+
+    public static class ID2026020309241501 {
+        public static class v1 {
+        }
+    }
 }
 
 

+ 143 - 0
src/custom/restcontroller/webmanage/sale/itemrequest/itemrequest.java

@@ -0,0 +1,143 @@
+package restcontroller.webmanage.sale.itemrequest;
+
+import beans.datacontrllog.DataContrlLog;
+import com.alibaba.fastjson2.JSONObject;
+import common.Controller;
+import common.YosException;
+import common.annotation.API;
+import common.data.*;
+import restcontroller.R;
+
+@API(title = "配件领料单")
+public class itemrequest extends Controller {
+    public itemrequest(JSONObject content) throws YosException {
+        super(content);
+    }
+
+    @API(title = "配件领料单查询", apiversion = R.ID2026020216135101.v1.class)
+    public String itemrequestquery() throws YosException {
+        QuerySQL saItemrequest = SQLFactory.createQuerySQL(this, "sa_itemrequest");
+        saItemrequest.setPage(pageSize, pageNumber).setSiteid(siteid);
+        saItemrequest.setOrderBy("sa_itemrequestid desc");
+        Rows rows = saItemrequest.query();
+
+        QuerySQL saItemrequestitems = SQLFactory.createQuerySQL(this, "sa_itemrequestitems", "sa_itemrequestid");
+        saItemrequestitems.setWhere("sa_itemrequestid", rows.toArrayList("sa_itemrequestid"));
+        saItemrequestitems.addQueryFields("qty", "sum(qty)");
+        saItemrequestitems.addQueryFields("instockqty", "sum(instockqty)");
+        saItemrequestitems.addGroupBy("sa_itemrequestid");
+        Rows itemrows = saItemrequestitems.query();
+
+        rows.merge(itemrows, "sa_itemrequestid");//结果合并
+        return getSucReturnObject().setData(rows).toString();
+    }
+
+    @API(title = "配件领料单保存", apiversion = R.ID2026020216213801.v1.class)
+    public String itemrequestsave() throws YosException {
+        long sa_itemrequestid = content.getLongValue("sa_itemrequestid");
+        String billdate = content.getStringValue("billdate");
+        String suppname = content.getStringValue("suppname");
+        String remarks = content.getStringValue("remarks");
+        if (sa_itemrequestid <= 0) {
+            InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_itemrequest");
+            insertSQL.setValue("billno", createBillCode("itemrequest"));
+            insertSQL.setValue("billdate", billdate);
+            insertSQL.setValue("suppname", suppname);
+            insertSQL.setValue("remarks", remarks);
+            insertSQL.setValue("status", "新建");
+            insertSQL.setValue("siteid", siteid);
+            insertSQL.getSQLDump().add(DataContrlLog.createLog(this, "sa_itemrequest", sa_itemrequestid, "新增", "配件领料单新增成功")).commit();
+        } else {
+            Row row = dbConnect.runSqlQuery(0, "select * from sa_itemrequest where sa_itemrequestid=" + sa_itemrequestid);
+            if (row == null) {
+                return getErrReturnObject().setErrMsg("配件领料单不存在").toString();
+            }
+            UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_itemrequest");
+            updateSQL.setValue("billdate", billdate);
+            updateSQL.setValue("suppname", suppname);
+            updateSQL.setValue("remarks", remarks);
+            updateSQL.setUniqueid(sa_itemrequestid);
+            updateSQL.getSQLDump().add(DataContrlLog.createLog(this, "sa_itemrequest", sa_itemrequestid, "修改", "配件领料单修改成功")).commit(this);
+        }
+        return getSucReturnObject().toString();
+    }
+
+    @API(title = "配件领料单删除", apiversion = R.ID2026020216330101.v1.class)
+    public String itemrequestdelete() throws YosException {
+        long sa_itemrequestid = content.getLongValue("sa_itemrequestid");
+        Row row = dbConnect.runSqlQuery(0, "select * from sa_itemrequest where sa_itemrequestid=" + sa_itemrequestid);
+        if (row != null) {
+            if (!"新建".equals(row.getString("status"))) {
+                return getErrReturnObject().setErrMsg("配件领料单非新建状态,不能删除").toString();
+            }
+            SQLDump sqlDump = new SQLDump();
+            sqlDump.add(SQLFactory.createDeleteSQL(this, "sa_itemrequest").setUniqueid(sa_itemrequestid));
+            sqlDump.add(SQLFactory.createDeleteSQL(this, "sa_itemrequestitems").setWhere("sa_itemrequestid", sa_itemrequestid));
+            sqlDump.add(DataContrlLog.createLog(this, "sa_itemrequest", sa_itemrequestid, "删除", "配件领料单删除成功"));
+            sqlDump.commit(this);
+        }
+        return getSucReturnObject().toString();
+    }
+
+    @API(title = "配件领料单审核、反审核", apiversion = R.ID2026020216364301.v1.class)
+    public String itemrequestcheck() throws YosException {
+        long sa_itemrequestid = content.getLongValue("sa_itemrequestid");
+        boolean ischeck = content.getBooleanValue("ischeck");
+        Row row = dbConnect.runSqlQuery(0, "select * from sa_itemrequest where sa_itemrequestid=" + sa_itemrequestid);
+        if (row == null) {
+            return getErrReturnObject().setErrMsg("配件领料单不存在").toString();
+        }
+        Rows itemrequestitems = dbConnect.runSqlQuery("select * from sa_itemrequestitems where sa_itemrequestid=" + sa_itemrequestid);
+        if (ischeck) {
+            if (!"新建".equals(row.getString("status"))) {
+                return getErrReturnObject().setErrMsg("配件领料单非新建状态,不能审核").toString();
+            }
+            if (itemrequestitems.isEmpty()) {
+                return getErrReturnObject().setErrMsg("配件领料单表体为空,不能审核").toString();
+            }
+        } else {
+            if (!"审核".equals(row.getString("status"))) {
+                return getErrReturnObject().setErrMsg("配件领料单非审核状态,不能反审核").toString();
+            }
+            if (itemrequestitems.sum("instockqty").doubleValue() > 0) {
+                return getErrReturnObject().setErrMsg("配件领料单已入库数大于0,不能反审核").toString();
+            }
+        }
+        UpdateSQL update = SQLFactory.createUpdateSQL(this, "sa_itemrequest");
+        update.setValue("status", ischeck ? "审核" : "新建");
+        update.setValue("checkby", ischeck ? username : null);
+        update.setValue("checkdate", ischeck ? getDateTime_Str() : null);
+        update.setUniqueid(sa_itemrequestid);
+        update.getSQLDump().add(DataContrlLog.createLog(this, "sa_itemrequest", sa_itemrequestid, ischeck ? "审核" : "反审核", "配件领料单" + (ischeck ? "审核" : "反审核") + "成功")).commit(this);
+        return getSucReturnObject().toString();
+    }
+
+    @API(title = "配件领料单关闭、反关闭", apiversion = R.ID2026020308563801.v1.class)
+    public String itemrequestclose() throws YosException {
+        long sa_itemrequestid = content.getLongValue("sa_itemrequestid");
+        boolean isclose = content.getBooleanValue("isclose");
+
+        Row row = dbConnect.runSqlQuery(0, "select * from sa_itemrequest where sa_itemrequestid=" + sa_itemrequestid);
+        if (row == null) {
+            return getErrReturnObject().setErrMsg("配件领料单不存在").toString();
+        }
+
+        if (isclose && !"审核".equals(row.getString("status"))) {
+            return getErrReturnObject().setErrMsg("配件领料单非审核状态,不能关闭").toString();
+        } else if (!isclose && !"关闭".equals(row.getString("status"))) {
+            return getErrReturnObject().setErrMsg("配件领料单非关闭状态,不能反关闭").toString();
+        }
+        SQLDump sqlDump = new SQLDump();
+        UpdateSQL update = SQLFactory.createUpdateSQL(this, "sa_itemrequest");
+        update.setValue("status", isclose ? "关闭" : "审核");
+        update.setValue("closeby", isclose ? username : null);
+        update.setValue("closedate", isclose ? getDateTime_Str() : null);
+        update.setUniqueid(sa_itemrequestid);
+        sqlDump.add(update);
+        sqlDump.add(DataContrlLog.createLog(this, "sa_itemrequest", sa_itemrequestid, isclose ? "关闭" : "反关闭", "配件领料单" + (isclose ? "关闭" : "反关闭") + "成功"));
+        sqlDump.commit(this);
+        return getSucReturnObject().toString();
+    }
+
+
+}

+ 140 - 0
src/custom/restcontroller/webmanage/sale/itemrequest/itemrequestitems.java

@@ -0,0 +1,140 @@
+package restcontroller.webmanage.sale.itemrequest;
+
+import beans.datacontrllog.DataContrlLog;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import common.Controller;
+import common.YosException;
+import common.annotation.API;
+import common.data.*;
+import restcontroller.R;
+
+import java.util.ArrayList;
+
+@API(title = "配件领料单表体")
+public class itemrequestitems extends Controller {
+    public itemrequestitems(JSONObject content) throws YosException {
+        super(content);
+    }
+
+    @API(title = "其他入库单配件领料单选择", apiversion = R.ID2026020309241501.v1.class)
+    public String itemrequestselect() throws YosException {
+        long st_stockbillid = content.getLongValue("st_stockbillid");
+        ArrayList<Long> ids = dbConnect.runSqlQuery("select sa_itemrequestitemsid from  st_stockbill_items where st_stockbillid=" + st_stockbillid + " and sourceobject='sa_itemrequestitems'").toArrayList("sa_itemrequestitemsid", new ArrayList<>());
+
+        QuerySQL saItemrequest = SQLFactory.createQuerySQL(this, "sa_itemrequestitems", "sa_itemrequestitemsid", "itemid", "qty", "instockqty").setTableAlias("t1");
+        saItemrequest.addJoinTable(JOINTYPE.left, "plm_item", "t2", "itemid=:itemid", "itemno", "itemname", "model", "standards");
+        saItemrequest.addJoinTable(JOINTYPE.left, "plm_itemextend", "t3", "itemid=:itemid", "erpitemno", "erpitemname", "erpmodel");
+        saItemrequest.addJoinTable(JOINTYPE.left, "plm_unit", "t4", "t2.unitid=:unitid", "unitid", "unitname");
+        saItemrequest.addJoinTable(JOINTYPE.inner, "sa_itemrequest", "t5", "t1.sa_itemrequestid=:sa_itemrequestid", "sa_itemrequestid", "billno", "billdate", "suppname", "remarks");
+        saItemrequest.addQueryFields("canaddqty", "(t1.qty-ifnull(t1.instockqty,0))");
+        saItemrequest.setWhere("t1.isclose", false);
+        saItemrequest.setWhere("t1.qty>ifnull(t1.instockqty,0)");
+        saItemrequest.setWhere("t5.status", "审核");
+        saItemrequest.setWhere("t1.sa_itemrequestitemsid", Op.NOT_IN, ids);
+        saItemrequest.setPage(pageSize, pageNumber).setSiteid(siteid);
+        saItemrequest.setOrderBy("sa_itemrequestitemsid desc");
+        Rows rows = saItemrequest.query();
+        return getSucReturnObject().setData(rows).toString();
+    }
+
+    @API(title = "配件领料单表体查询", apiversion = R.ID2026020216484501.v1.class)
+    public String itemrequestitemsquery() throws YosException {
+        long sa_itemrequestid = content.getLongValue("sa_itemrequestid");
+        QuerySQL saItemrequest = SQLFactory.createQuerySQL(this, "sa_itemrequestitems", "*").setTableAlias("t1");
+        saItemrequest.addJoinTable(JOINTYPE.left, "plm_item", "t2", "itemid=:itemid", "itemno", "itemname", "model", "standards");
+        saItemrequest.addJoinTable(JOINTYPE.left, "plm_itemextend", "t3", "itemid=:itemid", "erpitemno", "erpitemname");
+        saItemrequest.addJoinTable(JOINTYPE.left, "plm_unit", "t4", "t2.unitid=:itemid", "unitname");
+        saItemrequest.setWhere("sa_itemrequestid", sa_itemrequestid);
+        saItemrequest.setPage(pageSize, pageNumber).setSiteid(siteid);
+        saItemrequest.setOrderBy("sa_itemrequestitemsid desc");
+        Rows rows = saItemrequest.query();
+        return getSucReturnObject().setData(rows).toString();
+    }
+
+    @API(title = "配件领料单表体保存", apiversion = R.ID2026020216495701.v1.class)
+    public String itemrequestitemssave() throws YosException {
+        long sa_itemrequestid = content.getLongValue("sa_itemrequestid");
+        Row row = dbConnect.runSqlQuery(0, "select * from sa_itemrequest where sa_itemrequestid=" + sa_itemrequestid);
+        if (row == null) {
+            return getErrReturnObject().setErrMsg("配件领料单不存在").toString();
+        }
+        if (!"新建".equals(row.getString("status"))) {
+            return getErrReturnObject().setErrMsg("配件领料单非新建状态,不能修改表体物料").toString();
+        }
+        SQLDump sqlDump = new SQLDump();
+        JSONArray items = content.getJSONArray("items");
+        for (int i = 0; i < items.size(); i++) {
+            JSONObject item = items.getJSONObject(i);
+            long sa_itemrequestitemsid = item.getLongValue("sa_itemrequestitemsid");
+            long itemid = item.getLong("itemid");
+            double qty = item.getDouble("qty");
+            if (qty <= 0) {
+                return getErrReturnObject().setErrMsg("领料单数量必须大于0").toString();
+            }
+            String remarks = item.getStringValue("remarks");
+            if (sa_itemrequestitemsid <= 0) {
+                InsertSQL itemInsert = SQLFactory.createInsertSQL(this, "sa_itemrequestitems");
+                itemInsert.setValue("sa_itemrequestid", sa_itemrequestid);
+                itemInsert.setValue("itemid", itemid);
+                itemInsert.setValue("qty", qty);
+                itemInsert.setValue("remarks", remarks);
+                itemInsert.setValue("siteid", siteid);
+                sqlDump.add(itemInsert).add(DataContrlLog.createLog(this, "sa_itemrequest", sa_itemrequestid, "修改", "配件领料单表体新增成功"));
+            } else {
+                UpdateSQL itemUpdate = SQLFactory.createUpdateSQL(this, "sa_itemrequestitems");
+                itemUpdate.setValue("itemid", itemid);
+                itemUpdate.setValue("qty", qty);
+                itemUpdate.setValue("remarks", remarks);
+                itemUpdate.setUniqueid(sa_itemrequestitemsid);
+                itemUpdate.setWhere("sa_itemrequestid", sa_itemrequestid);
+                sqlDump.add(itemUpdate).add(DataContrlLog.createLog(this, "sa_itemrequest", sa_itemrequestid, "修改", "配件领料单表体修改成功"));
+            }
+        }
+        sqlDump.commit(this);
+        return getSucReturnObject().toString();
+    }
+
+    @API(title = "配件领料单表体删除", apiversion = R.ID2026020308374601.v1.class)
+    public String itemrequestitemsdelete() throws YosException {
+        long sa_itemrequestid = content.getLongValue("sa_itemrequestid");
+        JSONArray sa_itemrequestitemsids = content.getJSONArray("sa_itemrequestitemsids");
+        Row row = dbConnect.runSqlQuery(0, "select * from sa_itemrequest where sa_itemrequestid=" + sa_itemrequestid);
+        if (row != null) {
+            if (!"新建".equals(row.getString("status"))) {
+                return getErrReturnObject().setErrMsg("配件领料单非新建状态,不能删除").toString();
+            }
+            SQLDump sqlDump = new SQLDump();
+            sqlDump.add(SQLFactory.createDeleteSQL(this, "sa_itemrequestitems").setWhere("sa_itemrequestid", sa_itemrequestid).setWhere("sa_itemrequestitemsid", sa_itemrequestitemsids));
+            sqlDump.add(DataContrlLog.createLog(this, "sa_itemrequest", sa_itemrequestid, "修改", "配件领料单表体删除成功"));
+            sqlDump.commit(this);
+        }
+        return getSucReturnObject().toString();
+    }
+
+    @API(title = "配件领料单表体行关闭", apiversion = R.ID2026020309035801.v1.class)
+    public String itemrequestitemsclose() throws YosException {
+        long sa_itemrequestid = content.getLongValue("sa_itemrequestid");
+        JSONArray sa_itemrequestitemsids = content.getJSONArray("sa_itemrequestitemsids");
+        boolean isclose = content.getBooleanValue("isclose");
+        Row row = dbConnect.runSqlQuery(0, "select * from sa_itemrequest where sa_itemrequestid=" + sa_itemrequestid);
+        if (row != null) {
+            if (!"审核".equals(row.getString("status"))) {
+                return getErrReturnObject().setErrMsg("配件领料单非审核状态,不能进行行关闭或反关闭操作").toString();
+            }
+            SQLDump sqlDump = new SQLDump();
+
+            UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_itemrequestitems");
+            updateSQL.setValue("isclose", isclose);
+            updateSQL.setValue("closeby", isclose ? username : null);
+            updateSQL.setValue("closedate", isclose ? getDateTime_Str() : null);
+            updateSQL.setWhere("sa_itemrequestid", sa_itemrequestid);
+            updateSQL.setWhere("sa_itemrequestitemsid", sa_itemrequestitemsids);
+            updateSQL.setWhere("isclose", !isclose);
+            sqlDump.add(updateSQL);
+            sqlDump.add(DataContrlLog.createLog(this, "sa_itemrequest", sa_itemrequestid, "行关闭", "配件领料单表体行关闭成功"));
+            sqlDump.commit(this);
+        }
+        return getSucReturnObject().toString();
+    }
+}

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

@@ -197,6 +197,11 @@ public class stockbillitems extends Controller {
                 insertSQL.setValue("rowno", maxid + i + 1);
                 insertSQL.setValue("st_stockbillid", st_stockbillid);
                 insertSQL.setValue("sa_orderitemsid", iteminfo.getLong("sa_orderitemsid"));
+                if (iteminfo.getLongValue("sa_itemrequestitemsid") > 0) {
+                    insertSQL.setValue("sourceobject", "sa_itemrequestitems");
+                    insertSQL.setValue("sourceid", iteminfo.getLongValue("sa_itemrequestitemsid"));
+                }
+
                 if (rowscount.get(0).getString("type").equals("其他入库")) {
                     if (rowscount.get(0).getLong("stockid") != 0) {
                         insertSQL.setValue("stockid", rowscount.get(0).getLong("stockid"));