--WMS模块
--仓库类别，暂时无维护-填充默认值
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[wms_warehouse_category]') AND type in (N'U')) DROP TABLE [wms_warehouse_category];
CREATE TABLE [wms_warehouse_category] (
	[id] int IDENTITY NOT NULL,
	[categoryCode] VARCHAR(50) NOT NULL,                --类别代码/唯一标识:原料库material，半成品库unfinishProduct，成品库finishProduct
	[categoryName] VARCHAR(50) NOT NULL,                --类别名称
	[estate] tinyint default 1 NOT NULL,                 --状态 1正常/0禁用
	[uid] int default 0 NOT NULL,
	[createTime] datetime DEFAULT getdate() NOT NULL,
	[updateTime] datetime DEFAULT getdate() NOT NULL,
);

--仓库基本信息
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[wms_warehouse]') AND type in (N'U')) DROP TABLE [wms_warehouse];
CREATE TABLE [wms_warehouse] (
	[id] int IDENTITY NOT NULL,
	[categoryCode] VARCHAR(50) NOT NULL,                --分类代码：唯一标识
	[warehouseNum] VARCHAR(50) NOT NULL,                --仓库代码或编号
	[warehouseName] VARCHAR(50) NOT NULL,               --仓库名称
	[managerid] int default 0 NOT NULL,              	--仓库管理员
	[estate] tinyint default 1 NOT NULL,                 --状态 1正常/0禁用
	[uid] int default 0 NOT NULL,
	[is_delete] tinyint default 0 NOT NULL,              --删除状态 1已删除/0未删除
	[createTime] datetime DEFAULT getdate() NOT NULL,
	[updateTime] datetime DEFAULT getdate() NOT NULL,
);

--库位基本信息
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[wms_warehouse_site]') AND type in (N'U')) DROP TABLE [wms_warehouse_site];
CREATE TABLE [wms_warehouse_site] (
	[id] int IDENTITY NOT NULL,
	[siteCode] VARCHAR(50) NOT NULL,               --库位代码：唯一标识
	[siteName] NVARCHAR(50) NOT NULL,               --库位编码、名称
	[warehouseid] int default 0 NOT NULL,          --仓库id
	[qrcode] VARCHAR(50) NULL,                     --库位二维码：唯一
	[maxCovolume] int default 0 NOT NULL,          --容量：托盘数量
	[covolume_stock] int default 0 NOT NULL,  	   --库位余容量
	[unit] NVARCHAR(50) NULL,                       --单位
	[estate] tinyint default 1 NOT NULL,           --状态 1正常/0禁用
	[uid] int default 0 NOT NULL,
	[is_delete] tinyint default 0 NOT NULL,        --删除状态 1已删除/0未删除
	[createTime] datetime DEFAULT getdate() NOT NULL,
	[updateTime] datetime DEFAULT getdate() NOT NULL,
);

--库位库存明细表
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[wms_site_goods]') AND type in (N'U')) DROP TABLE [wms_site_goods];
CREATE TABLE [wms_site_goods] (
	[id] int IDENTITY NOT NULL,
	[siteid] int default 0 NOT NULL,          	   --库位id
	[warehouseid] int default 0 NOT NULL,          --仓库id
	[categoryCode] VARCHAR(50) NOT NULL,           --类别代码/唯一标识:原料库material，半成品库unfinishProduct，成品库finishProduct
	[goodsid] int default 0 NOT NULL,          	   --仓库品类id,当为原料库时对应原料表：bas_material；当为半成品库或成品库时对应产品表：bas_product；
	[stock] Decimal(18,2) default 0 NOT NULL,  	   --系统库存量
	[pre_stock] Decimal(18,2) default 0 NOT NULL,  --系统预库存
	[estate] tinyint default 1 NOT NULL,           --状态 1正常/0禁用
	[uid] int default 0 NOT NULL,
	[is_delete] tinyint default 0 NOT NULL,        --删除状态 1已删除/0未删除
	[createTime] datetime DEFAULT getdate() NOT NULL,
	[updateTime] datetime DEFAULT getdate() NOT NULL,
);

--库存品类基本信息
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[wms_stock_goods]') AND type in (N'U')) DROP TABLE [wms_stock_goods];
CREATE TABLE [wms_stock_goods] (
	[id] int IDENTITY NOT NULL,
	[warehouseid] int default 0 NOT NULL,          --仓库id
	[categoryCode] VARCHAR(50) NOT NULL,           --类别代码/唯一标识:原料库material，半成品库unfinishProduct，成品库finishProduct
	[goodsid] int default 0 NOT NULL,          	   --仓库品类id,当为原料库时对应原料表：bas_material；当为半成品库或成品库时对应产品表：bas_product；
	[stock] Decimal(18,2) default 0 NOT NULL,  	   --系统库存量
	[pre_stock] Decimal(18,2) default 0 NOT NULL,  --系统预库存
	[warningNum] int default 0 NOT NULL,  	       --预警值
	[qrcode] VARCHAR(50) NULL,                 --品类二维码：唯一
	[estate] tinyint default 1 NOT NULL,           --状态 1正常/0禁用
	[uid] int default 0 NOT NULL,
	[is_delete] tinyint default 0 NOT NULL,                 --删除状态 1已删除/0未删除
	[createTime] datetime DEFAULT getdate() NOT NULL,
	[updateTime] datetime DEFAULT getdate() NOT NULL,
);

--  单据总表，出库单、入库单、盘库单
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[wms_stock_bill]') AND type in (N'U')) DROP TABLE [wms_stock_bill];
CREATE TABLE [wms_stock_bill] (
	[id] int IDENTITY NOT NULL,
	[warehouseid] int default 0 NOT NULL,           --新增--仓库id，这样好根据仓库拉去订单信息
	[billNum] VARCHAR(50) NOT NULL,                 --修改备注：单据号：唯一,系统生成, 编码规则 出入库前缀+210512001（俩位年（21）+月+日 +001） 默认前缀：见前缀表
	[orderNum] VARCHAR(50) default '' NOT NULL,     --修改：订单编号，用户输入或者SAP载入(该字段需要建立索引，所以不能为空,预设空字符串)
	[stockType] VARCHAR(50) NOT NULL,               --出入库类型：出库类型out，入库类型in，盘库类型inventory，（参考出入库类型列表）
	[fromCusID] VARCHAR(50) NULL,                   --新增--预留字段，进货商ID
	[cusID] VARCHAR(50) NULL,                       --新增--出入库供应商（bas_customer），当生产入库或者生产出库时为空（删除supplier 和bas_customer保持一致）
	[cusName] NVARCHAR(50) NULL,                    --新增--出入库供应商名称（bas_customer），当生产入库或者生产出库时为空,方便读取，不用关联查询
	[stockDate] dateTime NOT NULL,                  --新增--出入库时间
	[approveID] int default 0 NOT NULL,             --批准事件的日志表（sys_oper_log）ID
	[estate] tinyint default 0 NOT NULL,            --状态 0编辑/1提交，等待确认/2已批准（新雅轩实际操作过程中相当于入出库确认）
	[uid] int default 0 NOT NULL,
	[createTime] datetime DEFAULT getdate() NOT NULL,
	[updateTime] datetime DEFAULT getdate() NOT NULL,
);

--出入库记录
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[wms_stock_records]') AND type in (N'U')) DROP TABLE [wms_stock_records];
CREATE TABLE [wms_stock_records] (
	[id] int IDENTITY NOT NULL,
	[warehouseid] int default 0 NOT NULL,          --仓库id
	[siteid] int default 0 NOT NULL,          	   --库位id
	[categoryCode] VARCHAR(50) NOT NULL,           --类别代码/唯一标识:原料库material，半成品库unfinishProduct，成品库finishProduct
	[billid] int default 0 NOT NULL,               --对应出入库单的id
	[goodsid] int default 0 NOT NULL,          	   --仓库品类id,当为原料库时对应原料表：bas_material；当为半成品库或成品库时对应产品表：bas_product；
	[stockType] VARCHAR(50) NOT NULL,              --出入库类型：出库类型out，入库类型in，盘库类型inventory，
	[boxNum] int default 0 NOT NULL,  	           --新增--整件数量，预留
	[num] Decimal(18,2) default 0 NOT NULL,  	   --出入库数量
	[validDate] int default 0 NULL,  	   		   --保质期
	[validunit] VARCHAR(50) NULL,                  --保质期单位
	[estate] tinyint default 1 NOT NULL,           --状态 1正常/0禁用
	[scanType] tinyint default 0 NOT NULL,         --是否扫码   0是/1否，直接进行数量操作
	[uid] int default 0 NOT NULL,
	[createTime] datetime DEFAULT getdate() NOT NULL,
	[updateTime] datetime DEFAULT getdate() NOT NULL,
);

--新增，出入库详情表
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[wms_records_details]') AND type in (N'U')) DROP TABLE [wms_records_details];
CREATE TABLE [wms_records_details] (
	[id] int IDENTITY NOT NULL,
	[billid] int default 0 NOT NULL,               --对应出入库单的id
	[recordid] int default 0 NOT NULL,             --出库库记录ID
	[stockType] VARCHAR(50) NOT NULL,              --出入库类型：出库类型out，入库类型in，盘库类型inventory，
	[code] varchar(50) NOT NULL,                   --扫描条码
	[codeLevel] tinyint default 0 NOT NULL,        --条码层级
	[palletCode] varchar(50)  NULL,                --对应托盘
	[boxCode] varchar(50)  NULL,                   --对应大箱
	[midCode] varchar(50)  NULL,                   --对应中包
	[num] Decimal(18,2) default 0 NOT NULL,  	   --对应数量
	[estate] tinyint default 1 NOT NULL,           --状态 1正常/0禁用
	[uid] int default 0 NOT NULL,
	[createTime] datetime DEFAULT getdate() NOT NULL,
	[updateTime] datetime DEFAULT getdate() NOT NULL,
);

--出库时需要选择出库单
--盘库单子表记录
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[wms_inventory_records]') AND type in (N'U')) DROP TABLE [wms_inventory_records];
CREATE TABLE [wms_inventory_records] (
	[id] int IDENTITY NOT NULL,
	[billid] int default 0 NOT NULL,               --对应盘库单的id
	[billNum] VARCHAR(50) NOT NULL,  			   --盘库单号，前缀：IW盘库
	[warehouseid] int default 0 NOT NULL,          --仓库id
	[siteid] int default 0 NOT NULL,          	   --库位id
	[goodsid] int default 0 NOT NULL,          	   --仓库品类id,当为原料库时对应原料表：bas_material；当为半成品库或成品库时对应产品表：bas_product；
	[sysStockNum] Decimal(18,2) default 0 NOT NULL,  	   	   --系统库存量
	[realStockNum] Decimal(18,2) default 0 NOT NULL,  	   --实际库存量
	[diffNum] Decimal(18,2) default 0 NOT NULL,  	   		   --差额
	[estate] tinyint default 1 NOT NULL,           --状态 1正常/0禁用
	[uid] int default 0 NOT NULL,
	[createTime] datetime DEFAULT getdate() NOT NULL,
	[updateTime] datetime DEFAULT getdate() NOT NULL,
);
