经典的出入库算法(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。保留下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | --【仓库信息】【编订人: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 --删除时间 ) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异