库存管理

This commit is contained in:
escapemoon
2025-12-08 09:06:51 +08:00
parent aaef8ab5fc
commit a13e546db1
12 changed files with 1514 additions and 260 deletions

View File

@@ -0,0 +1,523 @@
/*
T-SQL 脚本:在 dbo.bas_stock 表中添加用户要求的字段(保留字段名,不修改名称)
说明:每个列在添加前会检查是否已存在,避免重复添加导致错误。
请在 SQL Server 管理工具(如 SSMS)中对目标数据库运行本脚本。
*/
-- 确认表存在
IF OBJECT_ID('dbo.bas_stock','U') IS NULL
BEGIN
RAISERROR('Table dbo.bas_stock does not exist in current database.',16,1)
RETURN
END
GO
-- 1) Rows: 集合数据(存 JSON 或序列化内容)
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Rows')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Rows] NVARCHAR(MAX) NULL;
END
GO
-- 2) Title: 入库主题
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Title')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Title] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 3) Kuin: 入库id
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Kuin')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Kuin] VARCHAR(80) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 4) Complete1: 入库状态
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Complete1')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Complete1] VARCHAR(50) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 5) Cateid: 申请人
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Cateid')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Cateid] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 6) Date3: 申请日期
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Date3')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Date3] DATETIME2(7) NULL;
END
GO
-- 7) Date5: 确认日期
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Date5')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Date5] DATETIME2(7) NULL;
END
GO
-- 8) Catein: 审批人
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Catein')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Catein] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 9) Intro2: 审批意见(较长文本)
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Intro2')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Intro2] NVARCHAR(MAX) NULL;
END
GO
-- 10) Intro: 入库备注(较长文本)
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Intro')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Intro] NVARCHAR(MAX) NULL;
END
GO
-- 11) Caigou: 关联其他单据id
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Caigou')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Caigou] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 12) Date7: 添加时间
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Date7')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Date7] DATETIME2(7) NULL;
END
GO
-- 13) Kg: 库管id
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Kg')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Kg] VARCHAR(80) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 14) Sort1: 入库类别
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Sort1')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Sort1] VARCHAR(100) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 15) Rkbh: 入库编号
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Rkbh')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Rkbh] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 16) Status: 审批状态
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'Status')
BEGIN
ALTER TABLE dbo.bas_stock ADD [Status] VARCHAR(50) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 17) KuinList: 产品明细(集合/JSON)
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'KuinList')
BEGIN
ALTER TABLE dbo.bas_stock ADD [KuinList] NVARCHAR(MAX) NULL;
END
GO
-- 18) sysIcusIInheritIdIidI413: 客户名称
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'sysIcusIInheritIdIidI413')
BEGIN
ALTER TABLE dbo.bas_stock ADD [sysIcusIInheritIdIidI413] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 19) sysIcusIInheritIdIidI414: 磅单编号
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'sysIcusIInheritIdIidI414')
BEGIN
ALTER TABLE dbo.bas_stock ADD [sysIcusIInheritIdIidI414] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 20) sysIcusIInheritIdIidI415: 入库车号
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'sysIcusIInheritIdIidI415')
BEGIN
ALTER TABLE dbo.bas_stock ADD [sysIcusIInheritIdIidI415] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 为新字段添加列注释(extended properties)
-- 仅在列存在时添加,避免重复报错
IF COL_LENGTH('dbo.bas_stock','Rows') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'集合数据(JSON/序列化)', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Rows';
IF COL_LENGTH('dbo.bas_stock','Title') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'入库主题', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Title';
IF COL_LENGTH('dbo.bas_stock','Kuin') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'入库id', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Kuin';
IF COL_LENGTH('dbo.bas_stock','Complete1') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'入库状态', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Complete1';
IF COL_LENGTH('dbo.bas_stock','Cateid') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'申请人', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Cateid';
IF COL_LENGTH('dbo.bas_stock','Date3') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'申请日期', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Date3';
IF COL_LENGTH('dbo.bas_stock','Date5') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'确认日期', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Date5';
IF COL_LENGTH('dbo.bas_stock','Catein') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'审批人', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Catein';
IF COL_LENGTH('dbo.bas_stock','Intro2') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'审批意见', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Intro2';
IF COL_LENGTH('dbo.bas_stock','Intro') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'入库备注', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Intro';
IF COL_LENGTH('dbo.bas_stock','Caigou') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'关联其他单据id', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Caigou';
IF COL_LENGTH('dbo.bas_stock','Date7') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'添加时间', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Date7';
IF COL_LENGTH('dbo.bas_stock','Kg') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'库管id', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Kg';
IF COL_LENGTH('dbo.bas_stock','Sort1') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'入库类别', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Sort1';
IF COL_LENGTH('dbo.bas_stock','Rkbh') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'入库编号', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Rkbh';
IF COL_LENGTH('dbo.bas_stock','Status') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'审批状态', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'Status';
IF COL_LENGTH('dbo.bas_stock','KuinList') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'产品明细(JSON/集合)', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'KuinList';
IF COL_LENGTH('dbo.bas_stock','sysIcusIInheritIdIidI413') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'客户名称', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'sysIcusIInheritIdIidI413';
IF COL_LENGTH('dbo.bas_stock','sysIcusIInheritIdIidI414') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'磅单编号', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'sysIcusIInheritIdIidI414';
IF COL_LENGTH('dbo.bas_stock','sysIcusIInheritIdIidI415') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'入库车号', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'sysIcusIInheritIdIidI415';
-- 完成
PRINT 'Columns processed and extended properties added. Review messages above for any errors.'
GO
-- ==================================================
-- 追加:从产品明细 JSON 中筛选的字段,添加到 bas_stock 表
-- 列名前缀使用 pd_ (product detail),保留中文注释为 extended property
-- ==================================================
-- pd_detail_id: 入库明细ID
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_detail_id')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_detail_id] BIGINT NULL;
END
GO
-- pd_product_name: 产品名称
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_product_name')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_product_name] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- pd_model: 型号
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_model')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_model] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- pd_unit: 单位
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_unit')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_unit] VARCHAR(50) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- pd_unit_price: 单价
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_unit_price')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_unit_price] NUMERIC(18,6) NULL;
END
GO
-- pd_aux_unit: 辅助单位
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_aux_unit')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_aux_unit] VARCHAR(50) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- pd_attr1: 产品属性1
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_attr1')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_attr1] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- pd_attr2: 产品属性2
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_attr2')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_attr2] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- pd_quantity: 数量
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_quantity')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_quantity] NUMERIC(18,6) NULL;
END
GO
-- pd_in_qty: 入库数
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_in_qty')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_in_qty] NUMERIC(18,6) NULL;
END
GO
-- pd_aux_quantity: 辅助数量
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_aux_quantity')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_aux_quantity] NUMERIC(18,6) NULL;
END
GO
-- pd_total_price: 总价
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_total_price')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_total_price] NUMERIC(18,6) NULL;
END
GO
-- pd_cost_unit_price: 成本单价
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_cost_unit_price')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_cost_unit_price] NUMERIC(18,6) NULL;
END
GO
-- pd_total_price_2: 总价(重复字段,保留第二项)
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_total_price_2')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_total_price_2] NUMERIC(18,6) NULL;
END
GO
-- pd_account_cost_total: 核算成本总价
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_account_cost_total')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_account_cost_total] NUMERIC(18,6) NULL;
END
GO
-- pd_account_quantity: 核算数量
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_account_quantity')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_account_quantity] NUMERIC(18,6) NULL;
END
GO
-- pd_account_status: 核算状态
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_account_status')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_account_status] VARCHAR(50) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- pd_batch_no: 批号
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_batch_no')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_batch_no] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- pd_serial_no: 序列号
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_serial_no')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_serial_no] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- pd_prod_date: 生产日期
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_prod_date')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_prod_date] DATETIME2(7) NULL;
END
GO
-- pd_valid_date: 有效日期
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_valid_date')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_valid_date] DATETIME2(7) NULL;
END
GO
-- pd_arrival_date: 到货日期
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_arrival_date')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_arrival_date] DATETIME2(7) NULL;
END
GO
-- pd_remark: 备注
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_remark')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_remark] NVARCHAR(MAX) NULL;
END
GO
-- pd_custom1..pd_custom6: 自定义1..6
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_custom1')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_custom1] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_custom2')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_custom2] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_custom3')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_custom3] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_custom4')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_custom4] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_custom5')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_custom5] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_custom6')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_custom6] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- pd_loader: 装卸工
IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE [object_id] = OBJECT_ID('dbo.bas_stock') AND name = 'pd_loader')
BEGIN
ALTER TABLE dbo.bas_stock ADD [pd_loader] VARCHAR(255) COLLATE Chinese_PRC_CI_AS NULL;
END
GO
-- 为上述 pd_ 字段添加 extended properties 注释
IF COL_LENGTH('dbo.bas_stock','pd_detail_id') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'入库明细ID', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_detail_id';
IF COL_LENGTH('dbo.bas_stock','pd_product_name') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'产品名称', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_product_name';
IF COL_LENGTH('dbo.bas_stock','pd_model') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'型号', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_model';
IF COL_LENGTH('dbo.bas_stock','pd_unit') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'单位', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_unit';
IF COL_LENGTH('dbo.bas_stock','pd_unit_price') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'单价', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_unit_price';
IF COL_LENGTH('dbo.bas_stock','pd_aux_unit') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'辅助单位', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_aux_unit';
IF COL_LENGTH('dbo.bas_stock','pd_attr1') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'产品属性1', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_attr1';
IF COL_LENGTH('dbo.bas_stock','pd_attr2') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'产品属性2', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_attr2';
IF COL_LENGTH('dbo.bas_stock','pd_quantity') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'数量', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_quantity';
IF COL_LENGTH('dbo.bas_stock','pd_in_qty') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'入库数', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_in_qty';
IF COL_LENGTH('dbo.bas_stock','pd_aux_quantity') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'辅助数量', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_aux_quantity';
IF COL_LENGTH('dbo.bas_stock','pd_total_price') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'总价', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_total_price';
IF COL_LENGTH('dbo.bas_stock','pd_cost_unit_price') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'成本单价', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_cost_unit_price';
IF COL_LENGTH('dbo.bas_stock','pd_total_price_2') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'总价(重复项)', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_total_price_2';
IF COL_LENGTH('dbo.bas_stock','pd_account_cost_total') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'核算成本总价', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_account_cost_total';
IF COL_LENGTH('dbo.bas_stock','pd_account_quantity') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'核算数量', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_account_quantity';
IF COL_LENGTH('dbo.bas_stock','pd_account_status') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'核算状态', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_account_status';
IF COL_LENGTH('dbo.bas_stock','pd_batch_no') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'批号', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_batch_no';
IF COL_LENGTH('dbo.bas_stock','pd_serial_no') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'序列号', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_serial_no';
IF COL_LENGTH('dbo.bas_stock','pd_prod_date') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'生产日期', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_prod_date';
IF COL_LENGTH('dbo.bas_stock','pd_valid_date') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'有效日期', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_valid_date';
IF COL_LENGTH('dbo.bas_stock','pd_arrival_date') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'到货日期', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_arrival_date';
IF COL_LENGTH('dbo.bas_stock','pd_remark') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'备注', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_remark';
IF COL_LENGTH('dbo.bas_stock','pd_custom1') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'自定义1', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_custom1';
IF COL_LENGTH('dbo.bas_stock','pd_custom2') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'自定义2', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_custom2';
IF COL_LENGTH('dbo.bas_stock','pd_custom3') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'自定义3', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_custom3';
IF COL_LENGTH('dbo.bas_stock','pd_custom4') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'自定义4', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_custom4';
IF COL_LENGTH('dbo.bas_stock','pd_custom5') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'自定义5', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_custom5';
IF COL_LENGTH('dbo.bas_stock','pd_custom6') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'自定义6', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_custom6';
IF COL_LENGTH('dbo.bas_stock','pd_loader') IS NOT NULL
EXEC sp_addextendedproperty @name=N'MS_Description', @value=N'装卸工', @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'bas_stock', @level2type=N'COLUMN',@level2name=N'pd_loader';
PRINT 'Product-detail columns appended and comments added.'
GO

View File

@@ -0,0 +1,120 @@
/*
* 脚本说明:
* 1. 创建新表 bas_stock_product_inventory (产品维度汇总) 和 bas_stock_inventory_detail (明细维度,解析 JSON 或映射原表)。
* 2. 创建视图 v_bas_stock_mapping,将 bas_stock 原表字段映射到新业务语义。
* 3. 提供 ETL 存储过程,用于从 bas_stock 同步数据到新表(示例逻辑)。
*
* 修改说明:
* - 修正 model 映射为 product_model (原逻辑误映射为 unit_name)
* - 修正 unit_name 映射为 bas_product.unit (原逻辑误映射为 model)
*/
-- =============================================
-- 1. 创建新表:库存明细表 (对应接口 rows / cklist 解析后的结构)
-- =============================================
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[bas_stock_inventory_detail]') AND type in (N'U'))
DROP TABLE [dbo].[bas_stock_inventory_detail];
GO
CREATE TABLE [dbo].[bas_stock_inventory_detail](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[stock_id] [varchar](32) NULL, -- 关联原表 bas_stock.stock_id
[product_code] [varchar](255) NULL, -- 对应 bas_stock.product_id / 接口 order1
[product_name] [varchar](255) NULL, -- 对应 bas_stock.product_name / 接口 title
[product_model] [varchar](255) NULL, -- 对应 bas_stock.model / 接口 type1
[warehouse_name] [varchar](200) NULL, -- 需关联 bas_warehouse 或从 JSON 解析
[location_name] [varchar](200) NULL, -- 需关联 bas_cargo_space 或从 JSON 解析
[unit_name] [varchar](50) NULL, -- 接口 unitname
[quantity] [numeric](18, 3) DEFAULT 0, -- 对应 bas_stock.quantity
[ratio] [numeric](18, 6) DEFAULT 1.0, -- 换算比例
[detail_json] [nvarchar](max) NULL, -- 原始 JSON 数据 (cklist)
[sync_time] [datetime2](7) DEFAULT SYSUTCDATETIME(),
CONSTRAINT [PK_bas_stock_inventory_detail] PRIMARY KEY CLUSTERED ([id] ASC)
);
GO
-- =============================================
-- 2. 创建新表:产品库存汇总表 (对应接口外层列表)
-- =============================================
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[bas_stock_product_inventory]') AND type in (N'U'))
DROP TABLE [dbo].[bas_stock_product_inventory];
GO
CREATE TABLE [dbo].[bas_stock_product_inventory](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[product_ord] [int] NULL, -- 接口 ord
[product_code] [varchar](255) NULL, -- product_id
[product_name] [varchar](255) NULL, -- product_name
[product_model] [varchar](255) NULL, -- model
[total_quantity] [numeric](18, 3) DEFAULT 0,
[unit_name] [varchar](50) NULL,
[warehouse_stock_json] [nvarchar](max) NULL, -- 存储 cklist JSON 字符串
[updated_time] [datetime2](7) DEFAULT SYSUTCDATETIME(),
CONSTRAINT [PK_bas_stock_product_inventory] PRIMARY KEY CLUSTERED ([id] ASC)
);
GO
-- =============================================
-- 3. 创建视图:映射 bas_stock 到新语义 (含关联)
-- =============================================
IF OBJECT_ID('dbo.v_bas_stock_mapping', 'V') IS NOT NULL
DROP VIEW dbo.v_bas_stock_mapping;
GO
CREATE VIEW [dbo].[v_bas_stock_mapping] AS
SELECT
s.stock_id,
s.product_id AS product_code,
s.product_name,
-- 修正:unit_name 取自 bas_product.unit
ISNULL(p.unit, '个') AS unit_name,
-- 修正:model 映射为 product_model
ISNULL(s.model, '') AS product_model,
s.quantity,
s.warehouse_id,
ISNULL(w.warehouse_name, '未知仓库') AS warehouse_name,
s.cargo_space_id,
ISNULL(c.cargo_space_name, '未知库位') AS location_name,
s.lot_no,
s.in_date
FROM dbo.bas_stock s
LEFT JOIN dbo.bas_warehouse w ON s.warehouse_id = w.warehouse_id
LEFT JOIN dbo.bas_cargo_space c ON s.cargo_space_id = c.cargo_space_id
LEFT JOIN dbo.bas_product p ON s.product_id = p.product_id;
GO
-- =============================================
-- 4. ETL 脚本:从 bas_stock 全量刷新到明细表
-- =============================================
-- 清空明细表
TRUNCATE TABLE dbo.bas_stock_inventory_detail;
-- 插入数据
INSERT INTO dbo.bas_stock_inventory_detail
(stock_id, product_code, product_name, product_model, unit_name, quantity, warehouse_name, location_name)
SELECT
stock_id,
product_code,
product_name,
product_model,
unit_name,
quantity,
warehouse_name,
location_name
FROM dbo.v_bas_stock_mapping;
-- =============================================
-- 5. ETL 脚本:生成汇总表数据 (简单聚合示例)
-- =============================================
TRUNCATE TABLE dbo.bas_stock_product_inventory;
INSERT INTO dbo.bas_stock_product_inventory
(product_code, product_name, product_model, unit_name, total_quantity)
SELECT
product_code,
MAX(product_name),
MAX(product_model),
MAX(unit_name),
SUM(quantity)
FROM dbo.bas_stock_inventory_detail
GROUP BY product_code;