在一般的倉儲系統,我們常常有個表是存放物品信息的,常見的屬性有grid,layer,注意:這個屬性是最大索引表示,也就是這個格子最大的儲存數量,然后在物品明細中,我們會單個存放其中的粒子屬性,所以我們就要去遍歷了。算法如下。其中的剩余貨架就是我們可用的貨架隔層,這是最基本的出入庫算法。
public class STORE_goods_Detail { public static List<CanIn> GetCanInList(string Line_Code,List<XModel.STORE_SHELVE> list) { #region 1.先查詢這個line里的所有貨架 List<XModel.STORE_SHELVE> shelveList = list; //最大索引 List<CanIn> detailList = new List<CanIn>();//單個粒子 List<CanIn> surplusList = new List<CanIn>();//剩余貨架 #endregion #region 2.根據這些貨架的代碼去關聯詳情表然后看看里面的列和行有沒有被占用 foreach (XModel.STORE_SHELVE item in shelveList) { string shelve_code = item.Shelve_code; //在每個貨架中來循環看看詳情表 string sql = $"select * from STORE_GOODS_DETAIL where shelve_code = '{shelve_code}' and sout_code is null";//查詢這個貨架未出庫的 SqlDataReader DetailReader = XTools.XDB.SQLHelper.GetReader(sql); if (DetailReader != null) { while (DetailReader.Read()) { detailList.Add(new CanIn() { shelve_code = DetailReader["shelve_code"].ToString(), shelve_grid = DetailReader["shelve_grid"].ToString(), shelve_layer = DetailReader["shelve_layer"].ToString() }); } } } #endregion #region 3.查詢剩余的貨架粒子 for (int i = 0; i < shelveList.Count; i++)//循環每個貨架 { for (int g = 1; g <= Convert.ToInt32(shelveList[i].Shelve_grid); g++) { for (int l = 1; l <= Convert.ToInt32(shelveList[i].Shelve_layer); l++) { //如果未出庫的里沒有這個 那就可以添加 if (detailList.FirstOrDefault(a => a.shelve_grid == g.ToString() && a.shelve_code == shelveList[i].Shelve_code && a.shelve_layer == l.ToString()) == null) { surplusList.Add(new CanIn() { shelve_grid = g.ToString(), shelve_layer = l.ToString(), shelve_code = shelveList[i].Shelve_code, shelve_name = shelveList[i].Shelve_name }); } } } } #endregion return surplusList; } public static int Add(XModel.STORE_GOODS_DETAIL model) { string sql = @"INSERT INTO [STORE_GOODS_DETAIL] (gdetail_code,goods_code,gdetail_index,sin_code ,shelve_code,shelve_layer,shelve_grid ,gdtail_build,create_time,del_status) VALUES ('@gdetail_code','@goods_code','@gdetail_index','@sin_code' ,'@shelve_code','@shelve_layer','@shelve_grid','@gdtail_build' ,'@create_time','@del_status')"; SqlParameter[] paras ={ XTools.XDB.SQLHelper.GetParameter("@gdetail_code",model.Gdetail_code,SqlDbType.Char,32), XTools.XDB.SQLHelper.GetParameter("@goods_code",model.Goods_code,SqlDbType.Char,32), XTools.XDB.SQLHelper.GetParameter("@gdetail_index",model.Gdetail_code,SqlDbType.VarChar,18), XTools.XDB.SQLHelper.GetParameter("@sin_code",model.Sin_code,SqlDbType.Char,32), XTools.XDB.SQLHelper.GetParameter("@shelve_code",model.Shelve_code,SqlDbType.Char,32), XTools.XDB.SQLHelper.GetParameter("@shelve_layer",model.Shelve_layer,SqlDbType.Int,32), XTools.XDB.SQLHelper.GetParameter("@shelve_grid",model.Shelve_grid,SqlDbType.Int,32), XTools.XDB.SQLHelper.GetParameter("@gdtail_build",model.Gdtail_build,SqlDbType.DateTime,255), XTools.XDB.SQLHelper.GetParameter("@create_time",model.Create_time,SqlDbType.DateTime,255), XTools.XDB.SQLHelper.GetParameter("@del_status",model.Del_status,SqlDbType.Int,4), }; return XTools.XDB.SQLHelper.ExecuteSQL(sql, paras); } } public class CanIn { public string shelve_layer { get; set; } public string shelve_grid { get; set; } public string shelve_code { get; set; } public string shelve_name { get; set; } }
這個最近做的項目sql。保留下。
--【倉庫信息】【編訂人:ZQG】【編訂時間:2019年05月21日】 CREATE TABLE STORE_INFO( sys_id INT NOT NULL IDENTITY UNIQUE(sys_id), --自編號 store_code CHAR(32) NOT NULL PRIMARY KEY, --倉庫代碼 store_name VARCHAR(64) NOT NULL, --倉庫名稱 store_order INT NOT NULL DEFAULT(0), --排序:倒序 store_add VARCHAR(255), --地址 store_warden VARCHAR(16), --管理員 store_phone VARCHAR(16), --管理員手機 store_tel VARCHAR(16), --固定電話 store_desc TEXT, --備注 create_time DATETIME NOT NULL DEFAULT(GETDATE()), --創建時間 del_status INT NOT NULL DEFAULT(0), --刪除:0-未刪除,1-已刪除 del_time DATETIME --刪除時間 ) --【倉庫分區】【編訂人:ZQG】【編訂時間:2019年05月21日】 CREATE TABLE STORE_AREA( sys_id INT NOT NULL IDENTITY UNIQUE(sys_id), --自編號 sarea_code CHAR(32) NOT NULL PRIMARY KEY, --分區代碼 sarea_name VARCHAR(64) NOT NULL, --分區名稱 store_code CHAR(32) NOT NULL, --倉庫代碼 FOREIGN KEY (store_code) REFERENCES STORE_INFO(store_code), sarea_order INT NOT NULL DEFAULT(0), --排序:倒序 sarea_desc TEXT, --備注 create_time DATETIME NOT NULL DEFAULT(GETDATE()), --創建時間 del_status INT NOT NULL DEFAULT(0), --刪除:0-未刪除,1-已刪除 del_time DATETIME --刪除時間 ) --【列管理】【編訂人:ZQG】【編訂時間:2019年05月21日】 CREATE TABLE STORE_LINE( sys_id INT NOT NULL IDENTITY UNIQUE(sys_id), --自編號 sline_code CHAR(32) NOT NULL PRIMARY KEY, --倉庫列代碼 sline_name VARCHAR(64) NOT NULL, --列名稱 sline_order INT NOT NULL DEFAULT(0), --排序:倒序 sarea_code CHAR(32) NOT NULL, --分區代碼 FOREIGN KEY (sarea_code) REFERENCES STORE_AREA(sarea_code), sline_index VARCHAR(18) NOT NULL, --條碼編號:當前時間戳-2000年時間戳 sline_desc TEXT, --備注 create_time DATETIME NOT NULL DEFAULT(GETDATE()), --創建時間 del_status INT NOT NULL DEFAULT(0), --刪除:0-未刪除,1-已刪除 del_time DATETIME --刪除時間 ) --【貨架管理】【編訂人:ZQG】【編訂時間:2019年05月21日】 CREATE TABLE STORE_SHELVE( sys_id INT NOT NULL IDENTITY UNIQUE(sys_id), --自編號 shelve_code CHAR(32) NOT NULL PRIMARY KEY, --貨架代碼 shelve_name VARCHAR(64) NOT NULL, --貨架名稱 shelve_order INT NOT NULL DEFAULT(0), --排序 sline_code CHAR(32) NOT NULL, --所在列代碼 FOREIGN KEY (sline_code) REFERENCES STORE_LINE(sline_code), shelve_index VARCHAR(18) NOT NULL, --條碼編號:當前時間戳-2000年時間戳 shelve_layer INT NOT NULL, --貨架層數 shelve_grid INT NOT NULL DEFAULT(0), --每一層格子數,為0則精確到層 shelve_bearing INT, --承重(單位KG) shelve_volume FLOAT, --體積(單位m³) shelve_desc TEXT, --備注 create_time DATETIME NOT NULL DEFAULT(GETDATE()), --創建時間 del_status INT NOT NULL DEFAULT(0), --刪除:0-未刪除,1-已刪除 del_time DATETIME --刪除時間 ) --【物品分類】【編訂人:ZQG】【編訂時間:2019年05月21日】 CREATE TABLE STORE_TYPE( sys_id INT NOT NULL IDENTITY UNIQUE(sys_id), --自編號 stype_code CHAR(32) NOT NULL PRIMARY KEY, --分類代碼 stype_name VARCHAR(64) NOT NULL, --分類名稱 stype_name_fpy VARCHAR(255), --名稱拼音首字母 stype_name_py VARCHAR(255), --名稱拼音全拼 parent_stype_code CHAR(32), --上級分類代碼 FOREIGN KEY (parent_stype_code) REFERENCES STORE_TYPE(stype_code), stype_level VARCHAR(128) NOT NULL, --分類層級:以10000001為起始,+1遞增,每一個級別+8位 stype_order INT NOT NULL DEFAULT(0), --排序 stype_desc TEXT, --備注 create_time DATETIME NOT NULL DEFAULT(GETDATE()), --創建時間 del_status INT NOT NULL DEFAULT(0), --刪除:0-未刪除,1-已刪除 del_time DATETIME --刪除時間 ) --【物品信息】【編訂人:ZQG】【編訂時間:2019年05月21日】 CREATE TABLE STORE_GOODS( sys_id INT NOT NULL IDENTITY UNIQUE(sys_id), --自編號 goods_code CHAR(32) NOT NULL PRIMARY KEY, --物品代碼 goods_name VARCHAR(64) NOT NULL, --物品名稱 goods_name_fpy VARCHAR(255), --名稱拼音首字母 goods_name_py VARCHAR(255), --名稱拼音全拼 goods_order INT NOT NULL DEFAULT(0), --排序:倒序 stype_code CHAR(32) NOT NULL, --分類代碼 FOREIGN KEY (stype_code) REFERENCES STORE_TYPE(stype_code), goods_alarm_lower INT NOT NULL DEFAULT(0), --庫存數量預警,≤0不預警 goods_alarm_upper INT NOT NULL DEFAULT(0), --庫存數量預警,≤0不預警 goods_valid INT NOT NULL DEFAULT(0), --保質期(單位:月)≤0不過期 goods_index VARCHAR(18), --統一條碼編號:當前時間戳-2000年時間戳 goods_desc TEXT, --物品介紹 goods_pic VARCHAR(255), --物品圖片,人防系統展示不用 create_time DATETIME NOT NULL DEFAULT(GETDATE()), --創建時間 del_status INT NOT NULL DEFAULT(0), --刪除:0-未刪除,1-已刪除 del_time DATETIME --刪除時間 ) --【入庫類型】【編訂人:ZQG】【編訂時間:2019年05月21日】 CREATE TABLE STORE_IN_TYPE( sys_id INT NOT NULL IDENTITY UNIQUE(sys_id), --自編號 itype_code CHAR(32) NOT NULL PRIMARY KEY, --入庫類型代碼 itype_name VARCHAR(64) NOT NULL, --名稱 itype_name_fpy VARCHAR(255), --名稱拼音首字母 itype_name_py VARCHAR(255), --名稱拼音全拼 itype_order INT NOT NULL DEFAULT(0), --排序 itype_desc TEXT, --備注 create_time DATETIME NOT NULL DEFAULT(GETDATE()), --創建時間 del_status INT NOT NULL DEFAULT(0), --刪除:0-未刪除,1-已刪除 del_time DATETIME --刪除時間 ) --【入庫記錄】【編訂人:ZQG】【編訂時間:2019年05月21日】 CREATE TABLE STORE_IN( sys_id INT NOT NULL IDENTITY UNIQUE(sys_id), --自編號 sin_code CHAR(32) NOT NULL PRIMARY KEY, --入庫記錄代碼 sin_name VARCHAR(64) NOT NULL, --入庫說明 itype_code CHAR(32) NOT NULL, --入庫類型代碼 FOREIGN KEY (itype_code) REFERENCES STORE_IN_TYPE(itype_code), sin_desc TEXT, --備注 user_code CHAR(32) NOT NULL, --操作用戶 FOREIGN KEY (user_code) REFERENCES SYS_USER(user_code), create_time DATETIME NOT NULL DEFAULT(GETDATE()), --創建時間 del_status INT NOT NULL DEFAULT(0), --刪除:0-未刪除,1-已刪除 del_time DATETIME --刪除時間 ) --【出庫類型】【編訂人:ZQG】【編訂時間:2019年05月21日】 CREATE TABLE STORE_OUT_TYPE( sys_id INT NOT NULL IDENTITY UNIQUE(sys_id), --自編號 otype_code CHAR(32) NOT NULL PRIMARY KEY, --出庫類型代碼 otype_name VARCHAR(64) NOT NULL, --名稱 otype_name_fpy VARCHAR(255), --名稱拼音首字母 otype_name_py VARCHAR(255), --名稱拼音全拼 otype_order INT NOT NULL DEFAULT(0), --排序 otype_desc TEXT, --備注 create_time DATETIME NOT NULL DEFAULT(GETDATE()), --創建時間 del_status INT NOT NULL DEFAULT(0), --刪除:0-未刪除,1-已刪除 del_time DATETIME --刪除時間 ) --【出庫記錄】【編訂人:ZQG】【編訂時間:2019年05月21日】 CREATE TABLE STORE_OUT( sys_id INT NOT NULL IDENTITY UNIQUE(sys_id), --自編號 sout_code CHAR(32) NOT NULL PRIMARY KEY, --出庫記錄代碼 sout_name VARCHAR(64) NOT NULL, --出庫說明 otype_code CHAR(32) NOT NULL, --出庫類型代碼 FOREIGN KEY (otype_code) REFERENCES STORE_OUT_TYPE(otype_code), sout_desc TEXT, --備注 user_code CHAR(32) NOT NULL, --操作用戶 FOREIGN KEY (user_code) REFERENCES SYS_USER(user_code), create_time DATETIME NOT NULL DEFAULT(GETDATE()), --創建時間 del_status INT NOT NULL DEFAULT(0), --刪除:0-未刪除,1-已刪除 del_time DATETIME --刪除時間 ) --【物品明細】【編訂人:ZQG】【編訂時間:2019年05月21日】 CREATE TABLE STORE_GOODS_DETAIL( sys_id INT NOT NULL IDENTITY UNIQUE(sys_id), --自編號 gdetail_code CHAR(32) NOT NULL PRIMARY KEY, --物品明細代碼 goods_code CHAR(32) NOT NULL, --物品代碼 FOREIGN KEY (goods_code) REFERENCES STORE_GOODS(goods_code), gdetail_index VARCHAR(18), --計件條碼編號:當前時間戳-2000年時間戳 sin_code CHAR(32), --入庫記錄代碼 FOREIGN KEY (sin_code) REFERENCES STORE_IN(sin_code), sout_code CHAR(32), --出庫記錄代碼 FOREIGN KEY (sout_code) REFERENCES STORE_OUT(sout_code), shelve_code CHAR(32), --貨架代碼 FOREIGN KEY (shelve_code) REFERENCES STORE_SHELVE(shelve_code), shelve_layer INT NOT NULL DEFAULT(0), --貨架層級 shelve_grid INT NOT NULL DEFAULT(0), --層級位置 gdtail_build DATETIME, --生產日期 create_time DATETIME NOT NULL DEFAULT(GETDATE()), --創建時間 del_status INT NOT NULL DEFAULT(0), --刪除:0-未刪除,1-已刪除 del_time DATETIME --刪除時間 )