在一般的仓储系统,我们常常有个表是存放物品信息的,常见的属性有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													--删除时间
)