經典的出入庫算法(C#實現)


  在一般的倉儲系統,我們常常有個表是存放物品信息的,常見的屬性有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													--刪除時間
)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM