From 84673b3d3d3b9240868358a092307034e52cc246 Mon Sep 17 00:00:00 2001 From: oneao Date: Wed, 29 Jul 2026 23:18:54 +0800 Subject: [PATCH] 20260729231854 --- .../migrations/011_migrate_othercompany.sql | 2 - .../config/migrations/013_drop_bmfl_bcode.sql | 20 + .../config/migrations/014_migrate_contact.sql | 125 +++ ...015_normalize_existing_business_tables.sql | 244 ++++++ .../migrations/016_create_base_tables.sql | 759 ++++++++++++++++++ .../017_create_contract_file_tables.sql | 214 +++++ .../migrations/018_create_business_tables.sql | 396 +++++++++ .../migrations/019_create_finance_tables.sql | 362 +++++++++ .../migrations/020_create_oa_tables.sql | 179 +++++ .../migrations/021_create_business_views.sql | 539 +++++++++++++ .../tools/GenerateBusinessMigrations.java | 633 +++++++++++++++ .../tools/RunBusinessMigrations.java | 58 ++ .../tools/VerifyBusinessMigration.java | 238 ++++++ .../migrations/verify_business_schema.sql | 32 + .../fmsapi/controller/DataController.class | Bin 4108 -> 4719 bytes .../DataSaveService$AutoCodeFormat.class | Bin 0 -> 2078 bytes .../DataSaveService$AutoCodeRule.class | Bin 0 -> 3085 bytes .../DataSaveService$CodeCandidate.class | Bin 0 -> 1755 bytes .../fmsapi/service/DataSaveService.class | Bin 7943 -> 20743 bytes .../GenerateBusinessMigrations$Column.class | Bin 0 -> 1934 bytes .../GenerateBusinessMigrations$Table.class | Bin 0 -> 1735 bytes .../GenerateBusinessMigrations.class | Bin 0 -> 28188 bytes .../RunBusinessMigrations.class | Bin 0 -> 4445 bytes .../VerifyBusinessMigration.class | Bin 0 -> 12177 bytes .../DataSaveServiceTests$JdbcFixture.class | Bin 3894 -> 3894 bytes .../fmsapi/service/DataSaveServiceTests.class | Bin 6344 -> 7840 bytes code/fms/fms-vue/src/components/FmsTree.vue | 120 ++- .../fms-module-list/FmsQueryToolbar.vue | 1 - code/fms/fms-vue/src/router/routes.js | 3 +- .../src/views/base/othercompany/index.vue | 347 ++++++-- .../{autoCode.js => common.js} | 18 +- .../components/FieldGroupManager.vue | 163 ++-- .../components/ModuleAutoCodePanel.vue | 2 +- .../components/ModuleEditConfigPanel.vue | 75 +- .../components/ModuleListConfigPanel.vue | 75 +- .../components/ModuleQueryConfigPanel.vue | 20 - .../src/views/module-management/index.vue | 267 ++++-- code/fms/开发规范.md | 2 + code/fms/数据库迁移计划.md | 70 ++ 39 files changed, 4683 insertions(+), 281 deletions(-) create mode 100644 code/fms/fms-api/config/migrations/013_drop_bmfl_bcode.sql create mode 100644 code/fms/fms-api/config/migrations/014_migrate_contact.sql create mode 100644 code/fms/fms-api/config/migrations/015_normalize_existing_business_tables.sql create mode 100644 code/fms/fms-api/config/migrations/016_create_base_tables.sql create mode 100644 code/fms/fms-api/config/migrations/017_create_contract_file_tables.sql create mode 100644 code/fms/fms-api/config/migrations/018_create_business_tables.sql create mode 100644 code/fms/fms-api/config/migrations/019_create_finance_tables.sql create mode 100644 code/fms/fms-api/config/migrations/020_create_oa_tables.sql create mode 100644 code/fms/fms-api/config/migrations/021_create_business_views.sql create mode 100644 code/fms/fms-api/config/migrations/tools/GenerateBusinessMigrations.java create mode 100644 code/fms/fms-api/config/migrations/tools/RunBusinessMigrations.java create mode 100644 code/fms/fms-api/config/migrations/tools/VerifyBusinessMigration.java create mode 100644 code/fms/fms-api/config/migrations/verify_business_schema.sql create mode 100644 code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$AutoCodeFormat.class create mode 100644 code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$AutoCodeRule.class create mode 100644 code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$CodeCandidate.class create mode 100644 code/fms/fms-api/target/schema-generator/GenerateBusinessMigrations$Column.class create mode 100644 code/fms/fms-api/target/schema-generator/GenerateBusinessMigrations$Table.class create mode 100644 code/fms/fms-api/target/schema-generator/GenerateBusinessMigrations.class create mode 100644 code/fms/fms-api/target/schema-generator/RunBusinessMigrations.class create mode 100644 code/fms/fms-api/target/schema-generator/VerifyBusinessMigration.class rename code/fms/fms-vue/src/views/module-management/{autoCode.js => common.js} (65%) create mode 100644 code/fms/数据库迁移计划.md diff --git a/code/fms/fms-api/config/migrations/011_migrate_othercompany.sql b/code/fms/fms-api/config/migrations/011_migrate_othercompany.sql index 920fc63c..374cbd80 100644 --- a/code/fms/fms-api/config/migrations/011_migrate_othercompany.sql +++ b/code/fms/fms-api/config/migrations/011_migrate_othercompany.sql @@ -127,7 +127,6 @@ BEGIN TRANSACTION; CREATE TABLE dbo.b_othercompany_bmfl ( b_id bigint NOT NULL, b_parent_id bigint NULL, - b_code varchar(50) NOT NULL, b_name nvarchar(150) NOT NULL, b_level int NOT NULL CONSTRAINT DF_b_othercompany_bmfl_level DEFAULT (1), b_path varchar(1000) NOT NULL, @@ -138,7 +137,6 @@ BEGIN TRANSACTION; b_updateuser_id bigint NULL, b_updatedatetime datetime NULL, CONSTRAINT PK_b_othercompany_bmfl PRIMARY KEY (b_id), - CONSTRAINT UQ_b_othercompany_bmfl_code UNIQUE (b_code), CONSTRAINT CK_b_othercompany_bmfl_level CHECK (b_level >= 1), CONSTRAINT CK_b_othercompany_bmfl_parent CHECK ( b_parent_id IS NULL OR b_parent_id <> b_id diff --git a/code/fms/fms-api/config/migrations/013_drop_bmfl_bcode.sql b/code/fms/fms-api/config/migrations/013_drop_bmfl_bcode.sql new file mode 100644 index 00000000..4e854388 --- /dev/null +++ b/code/fms/fms-api/config/migrations/013_drop_bmfl_bcode.sql @@ -0,0 +1,20 @@ +-- 删除 b_othercompany_bmfl 的 b_code 字段(无业务含义,b_id 已唯一标识) +BEGIN TRANSACTION; + + IF EXISTS ( + SELECT 1 FROM sys.columns + WHERE object_id = OBJECT_ID(N'dbo.b_othercompany_bmfl') AND name = 'b_code' + ) + BEGIN + IF EXISTS ( + SELECT 1 FROM sys.objects + WHERE object_id = OBJECT_ID(N'dbo.UQ_b_othercompany_bmfl_code') AND type = 'UQ' + ) + BEGIN + ALTER TABLE dbo.b_othercompany_bmfl DROP CONSTRAINT UQ_b_othercompany_bmfl_code; + END + + ALTER TABLE dbo.b_othercompany_bmfl DROP COLUMN b_code; + END + +COMMIT TRANSACTION; diff --git a/code/fms/fms-api/config/migrations/014_migrate_contact.sql b/code/fms/fms-api/config/migrations/014_migrate_contact.sql new file mode 100644 index 00000000..f294cfd8 --- /dev/null +++ b/code/fms/fms-api/config/migrations/014_migrate_contact.sql @@ -0,0 +1,125 @@ +SET NOCOUNT ON; +SET XACT_ABORT ON; + +BEGIN TRANSACTION; + + -- 删除废弃的 b_contact_type 表 + IF OBJECT_ID(N'dbo.b_contact_type', N'U') IS NOT NULL + DROP TABLE dbo.b_contact_type; + + -- b_contact + DECLARE @ContactObjectId int = OBJECT_ID(N'dbo.b_contact', N'U'); + DECLARE @RebuildContact bit = 0; + + IF @ContactObjectId IS NULL + SET @RebuildContact = 1; + ELSE IF EXISTS ( + SELECT 1 FROM sys.columns + WHERE object_id = @ContactObjectId + AND name = N'b_id' + AND system_type_id = 167 -- varchar → old structure + ) + SET @RebuildContact = 1; + + IF @RebuildContact = 1 + BEGIN + -- 先删依赖视图 + IF OBJECT_ID(N'dbo.v_b_contact', N'V') IS NOT NULL + DROP VIEW dbo.v_b_contact; + + IF @ContactObjectId IS NOT NULL + DROP TABLE dbo.b_contact; + + CREATE TABLE dbo.b_contact ( + b_id bigint NOT NULL, + b_name_ch nvarchar(50) NULL, + b_name_en nvarchar(50) NULL, + b_sex nvarchar(50) NULL, + b_phone nvarchar(50) NULL, + b_mobilephone nvarchar(50) NULL, + b_fax nvarchar(50) NULL, + b_email nvarchar(50) NULL, + b_cate_id bigint NULL, + b_duty nvarchar(50) NULL, + b_homephone nvarchar(50) NULL, + b_homeaddr nvarchar(255) NULL, + b_bz nvarchar(max) NULL, + b_departmentname nvarchar(50) NULL, + b_picture varbinary(max) NULL, + b_customer_id bigint NULL, + b_owner_id bigint NULL, + b_isdefault int NULL, + b_showcolor int NULL, + b_birthday datetime NULL, + b_type1_id bigint NULL, + b_taste nvarchar(50) NULL, + b_habit nvarchar(50) NULL, + b_homesituation nvarchar(50) NULL, + b_htbegindate datetime NULL, + b_htenddate datetime NULL, + b_state nvarchar(50) NULL, + b_xh int NOT NULL CONSTRAINT DF_b_contact_xh DEFAULT (0), + b_canuse int NOT NULL CONSTRAINT DF_b_contact_canuse DEFAULT (1), + b_inputuser_id bigint NULL, + b_inputdatetime datetime NULL, + b_updateuser_id bigint NULL, + b_updatedatetime datetime NULL, + CONSTRAINT PK_b_contact PRIMARY KEY (b_id) + ); + + CREATE INDEX IX_b_contact_customer + ON dbo.b_contact (b_customer_id, b_id); + CREATE INDEX IX_b_contact_owner + ON dbo.b_contact (b_owner_id, b_id); + CREATE INDEX IX_b_contact_cate + ON dbo.b_contact (b_cate_id, b_id); + END + + -- v_b_contact 视图 + IF OBJECT_ID(N'dbo.v_b_contact', N'V') IS NOT NULL + DROP VIEW dbo.v_b_contact; + EXEC sp_executesql N' + CREATE VIEW dbo.v_b_contact AS + SELECT + b_contact.b_id, + b_contact.b_name_ch, + b_contact.b_name_en, + b_contact.b_sex, + b_contact.b_phone, + b_contact.b_mobilephone, + b_contact.b_fax, + b_contact.b_email, + b_contact.b_cate_id, + b_contact.b_duty, + b_contact.b_homephone, + b_contact.b_homeaddr, + b_contact.b_bz, + b_contact.b_departmentname, + b_contact.b_picture, + b_contact.b_customer_id, + b_contact.b_owner_id, + b_contact.b_isdefault, + b_contact.b_showcolor, + b_contact.b_birthday, + b_contact.b_type1_id, + b_contact.b_taste, + b_contact.b_habit, + b_contact.b_homesituation, + b_contact.b_htbegindate, + b_contact.b_htenddate, + b_contact.b_state, + b_contact.b_xh, + b_contact.b_canuse, + b_contact.b_inputuser_id, + b_contact.b_inputdatetime, + b_contact.b_updateuser_id, + b_contact.b_updatedatetime, + ISNULL(b_user.b_name, b_user.b_account) AS v_ownername, + b_user.b_department AS v_ownerdepartment, + b_othercompany.b_name AS v_customer_name + FROM dbo.b_contact + LEFT JOIN dbo.b_user ON b_user.b_id = b_contact.b_owner_id + LEFT JOIN dbo.b_othercompany ON b_othercompany.b_id = b_contact.b_customer_id; + '; + +COMMIT TRANSACTION; diff --git a/code/fms/fms-api/config/migrations/015_normalize_existing_business_tables.sql b/code/fms/fms-api/config/migrations/015_normalize_existing_business_tables.sql new file mode 100644 index 00000000..f62a1f8d --- /dev/null +++ b/code/fms/fms-api/config/migrations/015_normalize_existing_business_tables.sql @@ -0,0 +1,244 @@ +SET NOCOUNT ON; +SET XACT_ABORT ON; + +IF DB_NAME() <> N'FMS' + THROW 51500, N'本迁移只能在 FMS 目标数据库执行。', 1; + +BEGIN TRANSACTION; + + DECLARE @RebuildCore bit = 0; + IF OBJECT_ID(N'dbo.b_othercompany', N'U') IS NULL + OR COL_LENGTH(N'dbo.b_othercompany', N'b_code') IS NULL + OR EXISTS ( + SELECT 1 FROM sys.columns + WHERE object_id = OBJECT_ID(N'dbo.b_othercompany') + AND name = N'b_id' AND system_type_id <> TYPE_ID(N'bigint') + ) + OR OBJECT_ID(N'dbo.b_contact', N'U') IS NULL + OR EXISTS ( + SELECT 1 FROM sys.columns + WHERE object_id = OBJECT_ID(N'dbo.b_contact') + AND name = N'b_customer_id' AND system_type_id <> TYPE_ID(N'bigint') + ) + SET @RebuildCore = 1; + + IF @RebuildCore = 1 + BEGIN + IF OBJECT_ID(N'dbo.v_b_contact', N'V') IS NOT NULL + DROP VIEW dbo.v_b_contact; + + IF OBJECT_ID(N'dbo.b_contact', N'U') IS NOT NULL + DROP TABLE dbo.b_contact; + + IF OBJECT_ID(N'dbo.b_othercompany', N'U') IS NOT NULL + DROP TABLE dbo.b_othercompany; + + CREATE TABLE dbo.b_othercompany ( + b_id bigint NOT NULL, + b_code varchar(50) NOT NULL, + b_pycode varchar(50) NULL, + b_type nvarchar(200) NULL, + b_name nvarchar(500) NOT NULL, + b_shortname nvarchar(100) NULL, + b_linkman nvarchar(200) NULL, + b_phone nvarchar(500) NULL, + b_addr nvarchar(500) NULL, + b_firstlinkdate date NULL, + b_htno varchar(50) NULL, + b_htdate date NULL, + b_htexpiredate date NULL, + b_black int NOT NULL CONSTRAINT DF_b_othercompany_black DEFAULT (0), + b_canuse int NOT NULL CONSTRAINT DF_b_othercompany_canuse DEFAULT (1), + b_zl int NOT NULL CONSTRAINT DF_b_othercompany_xh DEFAULT (0), + b_tel nvarchar(50) NULL, + b_fax nvarchar(500) NULL, + b_www varchar(200) NULL, + b_email varchar(200) NULL, + b_bankacount nvarchar(500) NULL, + b_invaccount nvarchar(500) NULL, + b_cate_id bigint NULL, + b_bz1 nvarchar(500) NULL, + b_bz2 nvarchar(500) NULL, + b_bz3 nvarchar(500) NULL, + b_bz4 nvarchar(500) NULL, + b_province nvarchar(50) NULL, + b_city nvarchar(50) NULL, + b_area nvarchar(50) NULL, + b_country nvarchar(50) NULL, + b_edicode varchar(50) NULL, + b_showcolor int NULL, + b_type_id bigint NULL, + b_from_id bigint NULL, + b_type1_id bigint NULL, + b_type2_id bigint NULL, + b_type3_id bigint NULL, + b_type4_id bigint NULL, + b_type5_id bigint NULL, + b_owner_id bigint NULL, + b_inputuser_id bigint NULL, + b_inputdatetime datetime2(0) NOT NULL CONSTRAINT DF_b_othercompany_inputdatetime DEFAULT (SYSDATETIME()), + b_updateuser_id bigint NULL, + b_updatedatetime datetime2(0) NULL, + b_password varchar(200) NULL, + b_state nvarchar(50) NULL, + b_bankacount_e nvarchar(500) NULL, + b_addr_e nvarchar(500) NULL, + b_name_e nvarchar(500) NULL, + CONSTRAINT PK_b_othercompany PRIMARY KEY (b_id), + CONSTRAINT UQ_b_othercompany_code UNIQUE (b_code), + CONSTRAINT FK_b_othercompany_category FOREIGN KEY (b_cate_id) + REFERENCES dbo.b_othercompany_bmfl (b_id), + CONSTRAINT FK_b_othercompany_owner FOREIGN KEY (b_owner_id) + REFERENCES dbo.b_user (b_id) + ); + + CREATE INDEX IX_b_othercompany_name ON dbo.b_othercompany (b_name, b_id); + CREATE INDEX IX_b_othercompany_pycode ON dbo.b_othercompany (b_pycode, b_id); + CREATE INDEX IX_b_othercompany_category ON dbo.b_othercompany (b_cate_id, b_id); + CREATE INDEX IX_b_othercompany_owner ON dbo.b_othercompany (b_owner_id, b_id); + + CREATE TABLE dbo.b_contact ( + b_id bigint NOT NULL, + b_name_ch nvarchar(50) NULL, + b_name_en nvarchar(50) NULL, + b_sex nvarchar(50) NULL, + b_phone nvarchar(50) NULL, + b_mobilephone nvarchar(50) NULL, + b_fax nvarchar(50) NULL, + b_email varchar(200) NULL, + b_cate_id bigint NULL, + b_duty nvarchar(50) NULL, + b_homephone nvarchar(50) NULL, + b_homeaddr nvarchar(255) NULL, + b_bz nvarchar(max) NULL, + b_departmentname nvarchar(100) NULL, + b_picture varbinary(max) NULL, + b_customer_id bigint NULL, + b_owner_id bigint NULL, + b_isdefault int NOT NULL CONSTRAINT DF_b_contact_isdefault DEFAULT (0), + b_showcolor int NULL, + b_birthday date NULL, + b_type1_id bigint NULL, + b_taste nvarchar(100) NULL, + b_habit nvarchar(100) NULL, + b_homesituation nvarchar(100) NULL, + b_htbegindate date NULL, + b_htenddate date NULL, + b_state nvarchar(50) NULL, + b_xh int NOT NULL CONSTRAINT DF_b_contact_xh DEFAULT (0), + b_canuse int NOT NULL CONSTRAINT DF_b_contact_canuse DEFAULT (1), + b_inputuser_id bigint NULL, + b_inputdatetime datetime2(0) NOT NULL CONSTRAINT DF_b_contact_inputdatetime DEFAULT (SYSDATETIME()), + b_updateuser_id bigint NULL, + b_updatedatetime datetime2(0) NULL, + CONSTRAINT PK_b_contact PRIMARY KEY (b_id), + CONSTRAINT FK_b_contact_customer FOREIGN KEY (b_customer_id) + REFERENCES dbo.b_othercompany (b_id), + CONSTRAINT FK_b_contact_owner FOREIGN KEY (b_owner_id) + REFERENCES dbo.b_user (b_id) + ); + + CREATE INDEX IX_b_contact_customer ON dbo.b_contact (b_customer_id, b_id); + CREATE INDEX IX_b_contact_owner ON dbo.b_contact (b_owner_id, b_id); + CREATE INDEX IX_b_contact_cate ON dbo.b_contact (b_cate_id, b_id); + + END; + + DECLARE @OtherCompanyModuleId bigint = ( + SELECT TOP (1) b_id FROM dbo.s_module WHERE b_code = N'b_othercompany' + ); + IF @OtherCompanyModuleId IS NOT NULL + BEGIN + IF EXISTS ( + SELECT 1 FROM dbo.s_module_field + WHERE b_id = 920000000000002050 AND b_module_id <> @OtherCompanyModuleId + ) + THROW 51502, N'合作伙伴业务编号字段预留 ID 已被占用。', 1; + + IF NOT EXISTS ( + SELECT 1 FROM dbo.s_module_field + WHERE b_module_id = @OtherCompanyModuleId AND b_field = N'b_code' + ) + INSERT INTO dbo.s_module_field ( + b_id, b_module_id, b_field, b_name, b_i18n, b_type, b_canuse + ) VALUES ( + 920000000000002050, @OtherCompanyModuleId, N'b_code', N'合作伙伴编号', + N'field.b_othercompany.b_code', N'input', 1 + ); + + DECLARE @BusinessCodeFieldId bigint = ( + SELECT TOP (1) b_id FROM dbo.s_module_field + WHERE b_module_id = @OtherCompanyModuleId AND b_field = N'b_code' + ); + + UPDATE dbo.s_module_field_list + SET b_field_id = @BusinessCodeFieldId, b_width = 150 + WHERE b_id = 920000000000003001 + AND NOT EXISTS ( + SELECT 1 FROM dbo.s_module_field_list AS existing + WHERE existing.b_module_id = @OtherCompanyModuleId + AND existing.b_field_id = @BusinessCodeFieldId + AND existing.b_id <> 920000000000003001 + ); + + IF NOT EXISTS ( + SELECT 1 FROM dbo.s_module_field_query + WHERE b_module_id = @OtherCompanyModuleId AND b_field_id = @BusinessCodeFieldId + ) + INSERT INTO dbo.s_module_field_query ( + b_id, b_module_id, b_field_id, b_component, b_operator, + b_default_value, b_xh, b_canuse + ) VALUES ( + 920000000000004006, @OtherCompanyModuleId, @BusinessCodeFieldId, + N'input', N'like', NULL, 5, 1 + ); + END; + +COMMIT TRANSACTION; + +IF OBJECT_ID(N'dbo.v_b_contact', N'V') IS NOT NULL + DROP VIEW dbo.v_b_contact; + +EXEC sys.sp_executesql N' +CREATE VIEW dbo.v_b_contact AS +SELECT + contact.b_id, + contact.b_name_ch, + contact.b_name_en, + contact.b_sex, + contact.b_phone, + contact.b_mobilephone, + contact.b_fax, + contact.b_email, + contact.b_cate_id, + contact.b_duty, + contact.b_homephone, + contact.b_homeaddr, + contact.b_bz, + contact.b_departmentname, + contact.b_picture, + contact.b_customer_id, + contact.b_owner_id, + contact.b_isdefault, + contact.b_showcolor, + contact.b_birthday, + contact.b_type1_id, + contact.b_taste, + contact.b_habit, + contact.b_homesituation, + contact.b_htbegindate, + contact.b_htenddate, + contact.b_state, + contact.b_xh, + contact.b_canuse, + contact.b_inputuser_id, + contact.b_inputdatetime, + contact.b_updateuser_id, + contact.b_updatedatetime, + ISNULL(owner_user.b_name, owner_user.b_account) AS v_ownername, + owner_user.b_department AS v_ownerdepartment, + customer.b_name AS v_customer_name +FROM dbo.b_contact AS contact +LEFT JOIN dbo.b_user AS owner_user ON owner_user.b_id = contact.b_owner_id +LEFT JOIN dbo.b_othercompany AS customer ON customer.b_id = contact.b_customer_id; +'; diff --git a/code/fms/fms-api/config/migrations/016_create_base_tables.sql b/code/fms/fms-api/config/migrations/016_create_base_tables.sql new file mode 100644 index 00000000..3ae20ac1 --- /dev/null +++ b/code/fms/fms-api/config/migrations/016_create_base_tables.sql @@ -0,0 +1,759 @@ +/* Generated schema-only migration: 基础资料. No legacy data is copied. */ +SET NOCOUNT ON; +SET XACT_ABORT ON; + +IF DB_NAME() <> N'FMS' + THROW 51501, N'本迁移只能在 FMS 目标数据库执行。', 1; + +BEGIN TRANSACTION; + + IF OBJECT_ID(N'dbo.b_bgtype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_bgtype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_bgtype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_bgtype_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_billtype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_billtype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_billtype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_billtype_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_blstate', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_blstate] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_blstate] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_blstate_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_city', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_city] ( + [b_id] bigint NOT NULL, + [b_name_c] nvarchar(50) NULL, + [b_name_e] nvarchar(50) NULL, + [b_country_name_e] nvarchar(50) NULL, + [b_country_name_c] nvarchar(50) NULL, + [b_bz] nvarchar(500) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_city] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_city_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_con_type', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_con_type] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_edicode] varchar(50) NULL, + [b_bz] nvarchar(200) NULL, + [b_type] varchar(50) NULL, + [b_linkcon] varchar(50) NULL, + [b_default] int NOT NULL CONSTRAINT [DF_b_con_type_b_default] DEFAULT (0), + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_con_type] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_con_type_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_cztype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_cztype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(200) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_cztype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_cztype_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_dailyfeetype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_dailyfeetype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(200) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_dailyfeetype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_dailyfeetype_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_dailytype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_dailytype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_dailytype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_dailytype_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_feetype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_feetype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_name_e] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_default] int NOT NULL CONSTRAINT [DF_b_feetype_b_default] DEFAULT (0), + [b_amount] decimal(18,2) NULL, + [b_tax] decimal(18,4) NULL, + [b_money_id] bigint NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_feetype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_feetype_b_code] UNIQUE ([b_code]) + ); + CREATE INDEX [IX_b_feetype_b_money_id] ON dbo.[b_feetype] ([b_money_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.b_freightpayment', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_freightpayment] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_freightpayment] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_freightpayment_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_from', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_from] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_from] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_from_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_goodssource', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_goodssource] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_goodssource] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_goodssource_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_grade', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_grade] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_grade] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_grade_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_hl', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_hl] ( + [b_id] bigint NOT NULL, + [b_money_id] bigint NULL, + [b_bz] nvarchar(50) NULL, + [b_type] varchar(50) NULL, + [b_hl] decimal(18,4) NULL, + [b_month] varchar(50) NULL, + [b_qsdate] datetime2(0) NULL, + [b_zzdate] datetime2(0) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + CONSTRAINT [PK_b_hl] PRIMARY KEY ([b_id]) + ); + CREATE INDEX [IX_b_hl_b_money_id] ON dbo.[b_hl] ([b_money_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.b_httype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_httype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_httype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_httype_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_ivtype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_ivtype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_ivtype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_ivtype_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_jsfs', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_jsfs] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_jsfs] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_jsfs_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_money', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_money] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_edicode] varchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_hl] decimal(18,4) NULL, + [b_canuse] int NOT NULL CONSTRAINT [DF_b_money_b_canuse] DEFAULT (1), + [b_xh] int NULL, + [b_symbol] nvarchar(50) NULL, + [b_isconvert] varchar(1) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_money] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_money_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_oceanline', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_oceanline] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_edicode] varchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_oceanline] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_oceanline_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_operator', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_operator] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(200) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_operator] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_operator_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_other', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_other] ( + [b_cateid] varchar(50) NULL, + [b_id] bigint NOT NULL, + [b_name_c] nvarchar(50) NULL, + [b_1] numeric(18,0) NULL, + [b_2] varchar(50) NULL, + [b_desc] nvarchar(255) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_other] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_other_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_other_bmfl', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_other_bmfl] ( + b_id bigint NOT NULL, + b_parent_id bigint NULL, + b_name nvarchar(150) NOT NULL, + b_level int NOT NULL CONSTRAINT [DF_b_other_bmfl_level] DEFAULT (1), + b_path varchar(1000) NOT NULL, + b_xh int NOT NULL CONSTRAINT [DF_b_other_bmfl_xh] DEFAULT (0), + b_canuse int NOT NULL CONSTRAINT [DF_b_other_bmfl_canuse] DEFAULT (1), + b_inputuser_id bigint NULL, + b_inputdatetime datetime2(0) NOT NULL CONSTRAINT [DF_b_other_bmfl_inputdatetime] DEFAULT (SYSDATETIME()), + b_updateuser_id bigint NULL, + b_updatedatetime datetime2(0) NULL, + CONSTRAINT [PK_b_other_bmfl] PRIMARY KEY (b_id), + CONSTRAINT [CK_b_other_bmfl_parent] CHECK (b_parent_id IS NULL OR b_parent_id <> b_id), + CONSTRAINT [FK_b_other_bmfl_parent] FOREIGN KEY (b_parent_id) REFERENCES dbo.[b_other_bmfl] (b_id) + ); + CREATE INDEX [IX_b_other_bmfl_parent] ON dbo.[b_other_bmfl] (b_parent_id, b_xh, b_id); + CREATE INDEX [IX_b_other_bmfl_path] ON dbo.[b_other_bmfl] (b_path, b_xh, b_id); + END; + + IF OBJECT_ID(N'dbo.b_othercompany_accountbank', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_othercompany_accountbank] ( + [subid] bigint NOT NULL, + [mx_xh] int NULL, + [father] bigint NULL, + [mx_bank] nvarchar(800) NULL, + [mx_bz1] nvarchar(200) NULL, + [mx_updateuser_id] bigint NULL, + [mx_updatedatetime] datetime2(0) NULL, + [mx_inputdatetime] datetime2(0) NULL, + [mx_inputuser_id] bigint NULL, + CONSTRAINT [PK_b_othercompany_accountbank] PRIMARY KEY ([subid]), + CONSTRAINT [FK_b_othercompany_accountbank_father] FOREIGN KEY ([father]) REFERENCES dbo.[b_othercompany] (b_id) + ); + CREATE INDEX [IX_b_othercompany_accountbank_father] ON dbo.[b_othercompany_accountbank] ([father], [subid]); + END; + + IF OBJECT_ID(N'dbo.b_othercompany_partner_type', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_othercompany_partner_type] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_othercompany_partner_type] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_othercompany_partner_type_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_package', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_package] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_edicode] varchar(50) NULL, + [b_bz] nvarchar(100) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_package] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_package_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_port', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_port] ( + [b_id] bigint NOT NULL, + [b_name_c] nvarchar(50) NULL, + [b_name_e] nvarchar(50) NULL, + [b_country] varchar(50) NULL, + [b_oceanline] varchar(50) NULL, + [b_edicode] varchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_tz] varchar(1) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_port] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_port_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_progress', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_progress] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(500) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_progress] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_progress_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_sys_bgstate', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_bgstate] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_bgstate] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_bgstate_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_sys_companytype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_companytype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_companytype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_companytype_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_sys_copies', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_copies] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(200) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_copies] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_copies_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_sys_cystate', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_cystate] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_cystate] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_cystate_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_sys_edittype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_edittype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(200) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_edittype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_edittype_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_sys_feesf', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_feesf] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_feesf] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_feesf_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_sys_fielddefault', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_fielddefault] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_fielddefault] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_fielddefault_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_sys_level', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_level] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(200) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_level] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_level_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_sys_operator', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_operator] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(200) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_operator] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_operator_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_sys_pricelisttype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_pricelisttype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_dw_id] bigint NULL, + [b_dw_name] nvarchar(50) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_pricelisttype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_pricelisttype_b_code] UNIQUE ([b_code]) + ); + CREATE INDEX [IX_b_sys_pricelisttype_b_dw_id] ON dbo.[b_sys_pricelisttype] ([b_dw_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.b_sys_sex', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_sex] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(200) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_sex] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_sex_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_sys_state', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_state] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_state] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_state_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_sys_yesno', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_sys_yesno] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_sys_yesno] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_sys_yesno_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_transway', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_transway] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(100) NULL, + [b_edicode] varchar(50) NULL, + [b_bz] nvarchar(100) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_transway] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_transway_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_user_feetype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_user_feetype] ( + [b_id] bigint NOT NULL, + [b_user_id] bigint NULL, + [b_feetype_id] bigint NULL, + [b_bz] nvarchar(500) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + CONSTRAINT [PK_b_user_feetype] PRIMARY KEY ([b_id]) + ); + CREATE INDEX [IX_b_user_feetype_b_user_id] ON dbo.[b_user_feetype] ([b_user_id], [b_id]); + CREATE INDEX [IX_b_user_feetype_b_feetype_id] ON dbo.[b_user_feetype] ([b_feetype_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.b_user_worktime', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_user_worktime] ( + [b_id] bigint NOT NULL, + [b_user_id] bigint NULL, + [b_day] varchar(10) NULL, + [b_timefrom] varchar(20) NULL, + [b_timeto] varchar(20) NULL, + [b_used] int NOT NULL CONSTRAINT [DF_b_user_worktime_b_used] DEFAULT (1), + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + CONSTRAINT [PK_b_user_worktime] PRIMARY KEY ([b_id]) + ); + CREATE INDEX [IX_b_user_worktime_b_user_id] ON dbo.[b_user_worktime] ([b_user_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.b_vessel', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_vessel] ( + [b_id] bigint NOT NULL, + [b_vessel_name] nvarchar(100) NULL, + [b_edicode] varchar(50) NULL, + [b_voy] varchar(100) NULL, + [b_bz] nvarchar(200) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_vessel] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_vessel_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_ysfs', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_ysfs] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_ysfs] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_ysfs_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_ystype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_ystype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(200) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_ystype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_ystype_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_ywtype', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_ywtype] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_ywtype] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_ywtype_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.b_zxstate', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[b_zxstate] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(200) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_b_zxstate] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_b_zxstate_b_code] UNIQUE ([b_code]) + ); + END; + + +COMMIT TRANSACTION; diff --git a/code/fms/fms-api/config/migrations/017_create_contract_file_tables.sql b/code/fms/fms-api/config/migrations/017_create_contract_file_tables.sql new file mode 100644 index 00000000..593414f7 --- /dev/null +++ b/code/fms/fms-api/config/migrations/017_create_contract_file_tables.sql @@ -0,0 +1,214 @@ +/* Generated schema-only migration: 合同和文件资料. No legacy data is copied. */ +SET NOCOUNT ON; +SET XACT_ABORT ON; + +IF DB_NAME() <> N'FMS' + THROW 51501, N'本迁移只能在 FMS 目标数据库执行。', 1; + +BEGIN TRANSACTION; + + IF OBJECT_ID(N'dbo.bc_khht', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bc_khht] ( + [b_id] bigint NOT NULL, + [b_customer_id] bigint NULL, + [b_htno] varchar(50) NOT NULL, + [b_begindate] date NULL, + [b_enddate] date NULL, + [b_httype] varchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_state] varchar(50) NULL, + [b_owner_id] bigint NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_mycompany_id] bigint NULL, + [b_zl] decimal(18,0) NULL, + [b_bz1] nvarchar(50) NULL, + [b_sales_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + CONSTRAINT [PK_bc_khht] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_bc_khht_b_htno] UNIQUE ([b_htno]) + ); + CREATE INDEX [IX_bc_khht_b_customer_id] ON dbo.[bc_khht] ([b_customer_id], [b_id]); + CREATE INDEX [IX_bc_khht_b_owner_id] ON dbo.[bc_khht] ([b_owner_id], [b_id]); + CREATE INDEX [IX_bc_khht_b_mycompany_id] ON dbo.[bc_khht] ([b_mycompany_id], [b_id]); + CREATE INDEX [IX_bc_khht_b_sales_id] ON dbo.[bc_khht] ([b_sales_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.bc_pricelist', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bc_pricelist] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_dw_id] bigint NULL, + [b_type] varchar(50) NULL, + [b_canuse] int NOT NULL CONSTRAINT [DF_bc_pricelist_b_canuse] DEFAULT (1), + [b_begindate] date NULL, + [b_enddate] date NULL, + [b_loadport] varchar(50) NULL, + [b_aimport] varchar(50) NULL, + [b_cate_id] bigint NULL, + [b_owner_id] bigint NULL, + [b_state] varchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_bc_pricelist] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_bc_pricelist_b_code] UNIQUE ([b_code]) + ); + CREATE INDEX [IX_bc_pricelist_b_dw_id] ON dbo.[bc_pricelist] ([b_dw_id], [b_id]); + CREATE INDEX [IX_bc_pricelist_b_cate_id] ON dbo.[bc_pricelist] ([b_cate_id], [b_id]); + CREATE INDEX [IX_bc_pricelist_b_owner_id] ON dbo.[bc_pricelist] ([b_owner_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.bc_pricelist_bmfl', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bc_pricelist_bmfl] ( + b_id bigint NOT NULL, + b_parent_id bigint NULL, + b_name nvarchar(150) NOT NULL, + b_level int NOT NULL CONSTRAINT [DF_bc_pricelist_bmfl_level] DEFAULT (1), + b_path varchar(1000) NOT NULL, + b_xh int NOT NULL CONSTRAINT [DF_bc_pricelist_bmfl_xh] DEFAULT (0), + b_canuse int NOT NULL CONSTRAINT [DF_bc_pricelist_bmfl_canuse] DEFAULT (1), + b_inputuser_id bigint NULL, + b_inputdatetime datetime2(0) NOT NULL CONSTRAINT [DF_bc_pricelist_bmfl_inputdatetime] DEFAULT (SYSDATETIME()), + b_updateuser_id bigint NULL, + b_updatedatetime datetime2(0) NULL, + CONSTRAINT [PK_bc_pricelist_bmfl] PRIMARY KEY (b_id), + CONSTRAINT [CK_bc_pricelist_bmfl_parent] CHECK (b_parent_id IS NULL OR b_parent_id <> b_id), + CONSTRAINT [FK_bc_pricelist_bmfl_parent] FOREIGN KEY (b_parent_id) REFERENCES dbo.[bc_pricelist_bmfl] (b_id) + ); + CREATE INDEX [IX_bc_pricelist_bmfl_parent] ON dbo.[bc_pricelist_bmfl] (b_parent_id, b_xh, b_id); + CREATE INDEX [IX_bc_pricelist_bmfl_path] ON dbo.[bc_pricelist_bmfl] (b_path, b_xh, b_id); + END; + + IF OBJECT_ID(N'dbo.bc_pricelist_sub', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bc_pricelist_sub] ( + [subid] bigint NOT NULL, + [father] bigint NULL, + [mx_xh] int NULL, + [mx_dw_id] bigint NULL, + [mx_dw_field] varchar(50) NULL, + [mx_type_id] bigint NULL, + [mx_feetype_id] bigint NULL, + [mx_moneytype_id] bigint NULL, + [mx_exrate] decimal(18,4) NULL, + [mx_price] decimal(18,2) NULL, + [mx_qty] decimal(18,3) NULL, + [mx_amount_root] decimal(18,3) NULL, + [mx_amount] decimal(18,3) NULL, + [mx_tax] decimal(18,4) NULL, + [mx_level] int NULL, + [mx_hstype_id] bigint NULL, + [mx_varchar_1] varchar(50) NULL, + [mx_varchar_2] varchar(50) NULL, + [mx_varchar_3] varchar(50) NULL, + [mx_varchar_4] varchar(50) NULL, + [mx_inputdatetime] datetime2(0) NULL, + [mx_inputuser_id] bigint NULL, + [mx_updateuser_id] bigint NULL, + [mx_updatedatetime] datetime2(0) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + CONSTRAINT [PK_bc_pricelist_sub] PRIMARY KEY ([subid]), + CONSTRAINT [FK_bc_pricelist_sub_father] FOREIGN KEY ([father]) REFERENCES dbo.[bc_pricelist] (b_id) + ); + CREATE INDEX [IX_bc_pricelist_sub_father] ON dbo.[bc_pricelist_sub] ([father], [subid]); + CREATE INDEX [IX_bc_pricelist_sub_mx_dw_id] ON dbo.[bc_pricelist_sub] ([mx_dw_id], [subid]); + CREATE INDEX [IX_bc_pricelist_sub_mx_type_id] ON dbo.[bc_pricelist_sub] ([mx_type_id], [subid]); + CREATE INDEX [IX_bc_pricelist_sub_mx_feetype_id] ON dbo.[bc_pricelist_sub] ([mx_feetype_id], [subid]); + CREATE INDEX [IX_bc_pricelist_sub_mx_moneytype_id] ON dbo.[bc_pricelist_sub] ([mx_moneytype_id], [subid]); + CREATE INDEX [IX_bc_pricelist_sub_mx_hstype_id] ON dbo.[bc_pricelist_sub] ([mx_hstype_id], [subid]); + END; + + IF OBJECT_ID(N'dbo.bc_priceList_type', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bc_priceList_type] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_bc_priceList_type] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_bc_priceList_type_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.bf_files', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bf_files] ( + [subid] bigint NOT NULL, + [father] bigint NULL, + [mx_xh] int NULL, + [mx_filename] nvarchar(500) NULL, + [mx_filesize] varchar(50) NULL, + [mx_fileext] varchar(50) NULL, + [mx_mapfilename] nvarchar(500) NULL, + [mx_moduleid] bigint NULL, + [mx_cutfilename] nvarchar(500) NULL, + [mx_cutfilesize] varchar(50) NULL, + [mx_cate_id] bigint NULL, + [mx_bz] nvarchar(500) NULL, + [mx_orderid] varchar(50) NULL, + [mx_sh] int NOT NULL CONSTRAINT [DF_bf_files_mx_sh] DEFAULT (0), + [mx_shdatetime] datetime2(0) NULL, + [mx_shuser_id] bigint NULL, + [mx_inputuser_id] bigint NULL, + [mx_inputdatetime] datetime2(0) NULL, + [mx_updateuser_id] bigint NULL, + [mx_updatedatetime] datetime2(0) NULL, + CONSTRAINT [PK_bf_files] PRIMARY KEY ([subid]) + ); + CREATE INDEX [IX_bf_files_father] ON dbo.[bf_files] ([father], [subid]); + CREATE INDEX [IX_bf_files_mx_cate_id] ON dbo.[bf_files] ([mx_cate_id], [subid]); + CREATE INDEX [IX_bf_files_mx_shuser_id] ON dbo.[bf_files] ([mx_shuser_id], [subid]); + END; + + IF OBJECT_ID(N'dbo.bf_files_cateid', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bf_files_cateid] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_xh] int NULL, + [b_bz] nvarchar(50) NULL, + [b_canuse] int NOT NULL CONSTRAINT [DF_bf_files_cateid_b_canuse] DEFAULT (1), + [b_files_type] varchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_bf_files_cateid] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_bf_files_cateid_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.bf_files_type', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bf_files_type] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_module_id] bigint NULL, + [b_module_name] nvarchar(50) NULL, + [b_xh] int NULL, + [b_bz] nvarchar(50) NULL, + [b_image_num] decimal(18,0) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_bf_files_type] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_bf_files_type_b_code] UNIQUE ([b_code]) + ); + CREATE INDEX [IX_bf_files_type_b_module_id] ON dbo.[bf_files_type] ([b_module_id], [b_id]); + END; + + +COMMIT TRANSACTION; diff --git a/code/fms/fms-api/config/migrations/018_create_business_tables.sql b/code/fms/fms-api/config/migrations/018_create_business_tables.sql new file mode 100644 index 00000000..522c5d26 --- /dev/null +++ b/code/fms/fms-api/config/migrations/018_create_business_tables.sql @@ -0,0 +1,396 @@ +/* Generated schema-only migration: 业务单据. No legacy data is copied. */ +SET NOCOUNT ON; +SET XACT_ABORT ON; + +IF DB_NAME() <> N'FMS' + THROW 51501, N'本迁移只能在 FMS 目标数据库执行。', 1; + +BEGIN TRANSACTION; + + IF OBJECT_ID(N'dbo.bs_business', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bs_business] ( + [b_id] bigint NOT NULL, + [b_ywno] varchar(50) NOT NULL, + [b_drno] varchar(50) NULL, + [b_ywtype] varchar(50) NULL, + [b_cargo_source] varchar(50) NULL, + [b_orderdate] datetime2(0) NULL, + [b_transterm] varchar(50) NULL, + [b_customer_id] bigint NULL, + [b_mycompany_id] bigint NULL, + [b_loadport] varchar(50) NULL, + [b_disport] varchar(50) NULL, + [b_aimport] varchar(50) NULL, + [b_transport] varchar(50) NULL, + [b_freightpayment] varchar(50) NULL, + [b_state] varchar(50) NULL, + [b_ysfs] varchar(50) NULL, + [b_ac_ctns] int NULL, + [b_ac_vol] decimal(18,3) NULL, + [b_ac_gw] decimal(18,3) NULL, + [b_ctns] int NULL, + [b_ctns_unit] varchar(50) NULL, + [b_namegoods] nvarchar(4000) NULL, + [b_vol] decimal(18,3) NULL, + [b_gw] decimal(18,3) NULL, + [b_voy] varchar(50) NULL, + [b_vessel] varchar(50) NULL, + [b_etd] datetime2(0) NULL, + [b_eta] datetime2(0) NULL, + [b_shipingdate] datetime2(0) NULL, + [b_arrivedate] datetime2(0) NULL, + [b_jgdate] datetime2(0) NULL, + [b_jddate] datetime2(0) NULL, + [b_progress] varchar(50) NULL, + [b_desc_con] nvarchar(100) NULL, + [b_desc_noandseal] nvarchar(150) NULL, + [b_sales_id] bigint NULL, + [b_doc_id] bigint NULL, + [b_sw_id] bigint NULL, + [b_operater_id] bigint NULL, + [b_owner_id] bigint NULL, + [b_shipcompany_id] bigint NULL, + [b_warehouse_id] bigint NULL, + [b_oceanline] varchar(50) NULL, + [b_bgcompany_id] bigint NULL, + [b_truck_id] bigint NULL, + [b_loaddate] datetime2(0) NULL, + [b_dcdw_id] bigint NULL, + [b_dcdwlinkman] varchar(50) NULL, + [b_dcno] varchar(50) NULL, + [b_dcdate] datetime2(0) NULL, + [b_fcdate] datetime2(0) NULL, + [b_jgbegindate] date NULL, + [b_jgenddate] date NULL, + [b_pcyqmemo] nvarchar(1000) NULL, + [b_enterstoreno] varchar(50) NULL, + [b_showcolor] varchar(50) NULL, + [b_blno] varchar(50) NULL, + [b_bl_copy] varchar(50) NULL, + [b_bl_state] varchar(50) NULL, + [b_bl_date] datetime2(0) NULL, + [b_bl_qsdate] datetime2(0) NULL, + [b_bl_jcdate] datetime2(0) NULL, + [b_bgdate] datetime2(0) NULL, + [b_bgno] varchar(50) NULL, + [b_bgtype] varchar(50) NULL, + [b_bgstate] varchar(50) NULL, + [b_cystate] varchar(50) NULL, + [b_bz1] nvarchar(1000) NULL, + [b_bz2] nvarchar(1000) NULL, + [b_bz3] nvarchar(1000) NULL, + [b_bz4] nvarchar(1000) NULL, + [b_shippermemo] nvarchar(2000) NULL, + [b_consigneememo] nvarchar(2000) NULL, + [b_notifymemo] nvarchar(2000) NULL, + [b_shipmark] nvarchar(2000) NULL, + [b_agentcompanyMemo] nvarchar(2000) NULL, + [b_con20] int NULL, + [b_con40] int NULL, + [b_con40h] int NULL, + [b_con45] int NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_yslocked] varchar(1) NULL, + [b_yslocked_date] datetime2(0) NULL, + [b_yslocked_userid] bigint NULL, + [b_yflocked] varchar(1) NULL, + [b_yflocked_date] datetime2(0) NULL, + [b_yflocked_userid] bigint NULL, + [b_cwlocked] varchar(1) NULL, + [b_cwlocked_date] datetime2(0) NULL, + [b_cwlocked_userid] bigint NULL, + CONSTRAINT [PK_bs_business] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_bs_business_b_ywno] UNIQUE ([b_ywno]) + ); + CREATE INDEX [IX_bs_business_b_customer_id] ON dbo.[bs_business] ([b_customer_id], [b_id]); + CREATE INDEX [IX_bs_business_b_mycompany_id] ON dbo.[bs_business] ([b_mycompany_id], [b_id]); + CREATE INDEX [IX_bs_business_b_sales_id] ON dbo.[bs_business] ([b_sales_id], [b_id]); + CREATE INDEX [IX_bs_business_b_doc_id] ON dbo.[bs_business] ([b_doc_id], [b_id]); + CREATE INDEX [IX_bs_business_b_sw_id] ON dbo.[bs_business] ([b_sw_id], [b_id]); + CREATE INDEX [IX_bs_business_b_operater_id] ON dbo.[bs_business] ([b_operater_id], [b_id]); + CREATE INDEX [IX_bs_business_b_owner_id] ON dbo.[bs_business] ([b_owner_id], [b_id]); + CREATE INDEX [IX_bs_business_b_shipcompany_id] ON dbo.[bs_business] ([b_shipcompany_id], [b_id]); + CREATE INDEX [IX_bs_business_b_warehouse_id] ON dbo.[bs_business] ([b_warehouse_id], [b_id]); + CREATE INDEX [IX_bs_business_b_bgcompany_id] ON dbo.[bs_business] ([b_bgcompany_id], [b_id]); + CREATE INDEX [IX_bs_business_b_truck_id] ON dbo.[bs_business] ([b_truck_id], [b_id]); + CREATE INDEX [IX_bs_business_b_dcdw_id] ON dbo.[bs_business] ([b_dcdw_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.bs_business_container', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bs_business_container] ( + [subid] bigint NOT NULL, + [father] bigint NULL, + [mx_hstype_id] bigint NULL, + [mx_xh] int NULL, + [mx_con_no] varchar(50) NULL, + [mx_sealno] varchar(50) NULL, + [mx_con_type] varchar(50) NULL, + [mx_con_size] varchar(50) NULL, + [mx_con_gw] decimal(18,6) NULL, + [mx_con_nw] decimal(18,6) NULL, + [mx_con_cartons] int NULL, + [mx_con_vol] decimal(18,6) NULL, + [mx_truck_id] bigint NULL, + [mx_truck_name] nvarchar(50) NULL, + [mx_truckno] varchar(50) NULL, + [mx_drive] varchar(50) NULL, + [mx_drivephone] varchar(50) NULL, + [mx_txplace] nvarchar(50) NULL, + [mx_txmemo] nvarchar(500) NULL, + [mx_txdate] datetime2(0) NULL, + [mx_zxdate] datetime2(0) NULL, + [mx_zxplace] nvarchar(50) NULL, + [mx_zxmemo] nvarchar(500) NULL, + [mx_date1] datetime2(0) NULL, + [mx_date2] datetime2(0) NULL, + [mx_date3] datetime2(0) NULL, + [mx_date4] datetime2(0) NULL, + [mx_date5] datetime2(0) NULL, + [mx_date6] datetime2(0) NULL, + [mx_bz1] nvarchar(500) NULL, + [mx_bz2] nvarchar(100) NULL, + [mx_bz3] nvarchar(100) NULL, + [mx_bz4] nvarchar(100) NULL, + [mx_bz5] nvarchar(100) NULL, + [mx_bz6] nvarchar(100) NULL, + [mx_bz7] nvarchar(100) NULL, + [mx_bz8] nvarchar(100) NULL, + [mx_memo8] nvarchar(10) NULL, + [mx_vgm] decimal(18,6) NULL, + [mx_vgm_cztype] varchar(100) NULL, + [mx_vgm_czdate] datetime2(0) NULL, + [mx_updateuser_id] bigint NULL, + [mx_updatedatetime] datetime2(0) NULL, + [mx_inputdatetime] datetime2(0) NULL, + [mx_inputuser_id] bigint NULL, + CONSTRAINT [PK_bs_business_container] PRIMARY KEY ([subid]), + CONSTRAINT [FK_bs_business_container_father] FOREIGN KEY ([father]) REFERENCES dbo.[bs_business] (b_id) + ); + CREATE INDEX [IX_bs_business_container_father] ON dbo.[bs_business_container] ([father], [subid]); + CREATE INDEX [IX_bs_business_container_mx_hstype_id] ON dbo.[bs_business_container] ([mx_hstype_id], [subid]); + CREATE INDEX [IX_bs_business_container_mx_truck_id] ON dbo.[bs_business_container] ([mx_truck_id], [subid]); + END; + + IF OBJECT_ID(N'dbo.bs_business_cw', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bs_business_cw] ( + [subid] bigint NOT NULL, + [subxh] int NOT NULL, + [father] bigint NULL, + [mx_bid] varchar(50) NULL, + [mx_level] int NOT NULL, + [mx_xh] int NULL, + [mx_dw_id] bigint NULL, + [mx_dw_name] nvarchar(50) NULL, + [mx_direction] varchar(20) NULL, + [mx_feetype_id] bigint NULL, + [mx_feetype_name] nvarchar(50) NULL, + [mx_moneytype_id] bigint NULL, + [mx_hstype_id] bigint NULL, + [mx_price] decimal(18,2) NULL, + [mx_qty] decimal(18,3) NULL, + [mx_amount] decimal(18,3) NULL, + [mx_amount_rmb] decimal(18,3) NULL, + [mx_exrate] decimal(18,4) NULL, + [mx_log_flag] varchar(50) NULL, + [mx_tax] decimal(18,4) NULL, + [mx_invoicenotax] decimal(18,3) NULL, + [mx_invoicetax] decimal(18,3) NULL, + [mx_sh_check] varchar(1) NULL, + [mx_sh_datetime] datetime2(0) NULL, + [mx_shman_id] bigint NULL, + [mx_cwgz_check] varchar(50) NULL, + [mx_cwgz_datetime] datetime2(0) NULL, + [mx_cwgzman_id] bigint NULL, + [mx_bill_id] bigint NULL, + [mx_bill_ywno] varchar(50) NULL, + [mx_bill_updatedatetime] datetime2(0) NULL, + [mx_bill_updateuser_id] bigint NULL, + [mx_bill_state] varchar(1) NULL, + [mx_bill_totalamount] decimal(18,3) NULL, + [mx_bill_totalamount_not] decimal(18,3) NULL, + [mx_invoice_id] bigint NULL, + [mx_invoice_ywno] varchar(50) NULL, + [mx_invoice_updatedatetime] datetime2(0) NULL, + [mx_invoice_updateuser_id] bigint NULL, + [mx_invoice_state] varchar(1) NULL, + [mx_invoice_totalamount] decimal(18,3) NULL, + [mx_invoice_totalamount_not] decimal(18,3) NULL, + [mx_sfd_id] bigint NULL, + [mx_sfd_ywno] varchar(50) NULL, + [mx_sfd_updatedatetime] datetime2(0) NULL, + [mx_sfd_updateuser_id] bigint NULL, + [mx_sfd_state] varchar(1) NULL, + [mx_sfd_totalamount] decimal(18,3) NULL, + [mx_sfd_totalamount_not] decimal(18,3) NULL, + [mx_mycompany_id] bigint NULL, + [mx_inputuser_id] bigint NULL, + [mx_inputdatetime] datetime2(0) NULL, + [mx_updateuser_id] bigint NULL, + [mx_updatedatetime] datetime2(0) NULL, + [mx_memo1] nvarchar(1000) NULL, + [mx_memo2] nvarchar(1000) NULL, + [mx_memo3] nvarchar(1000) NULL, + [mx_memo4] nvarchar(1000) NULL, + [mx_memo5] nvarchar(1000) NULL, + [mx_varchar_1] varchar(50) NULL, + [mx_varchar_2] varchar(50) NULL, + [mx_varchar_3] varchar(50) NULL, + [mx_varchar_4] varchar(50) NULL, + [mx_varchar_5] varchar(50) NULL, + [mx_con_no] varchar(50) NULL, + [mx_qty_type] varchar(50) NULL, + CONSTRAINT [PK_bs_business_cw] PRIMARY KEY ([subid]), + CONSTRAINT [FK_bs_business_cw_father] FOREIGN KEY ([father]) REFERENCES dbo.[bs_business] (b_id) + ); + CREATE INDEX [IX_bs_business_cw_father] ON dbo.[bs_business_cw] ([father], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_dw_id] ON dbo.[bs_business_cw] ([mx_dw_id], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_feetype_id] ON dbo.[bs_business_cw] ([mx_feetype_id], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_moneytype_id] ON dbo.[bs_business_cw] ([mx_moneytype_id], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_hstype_id] ON dbo.[bs_business_cw] ([mx_hstype_id], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_shman_id] ON dbo.[bs_business_cw] ([mx_shman_id], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_cwgzman_id] ON dbo.[bs_business_cw] ([mx_cwgzman_id], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_bill_id] ON dbo.[bs_business_cw] ([mx_bill_id], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_bill_updateuser_id] ON dbo.[bs_business_cw] ([mx_bill_updateuser_id], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_invoice_id] ON dbo.[bs_business_cw] ([mx_invoice_id], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_invoice_updateuser_id] ON dbo.[bs_business_cw] ([mx_invoice_updateuser_id], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_sfd_id] ON dbo.[bs_business_cw] ([mx_sfd_id], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_sfd_updateuser_id] ON dbo.[bs_business_cw] ([mx_sfd_updateuser_id], [subid]); + CREATE INDEX [IX_bs_business_cw_mx_mycompany_id] ON dbo.[bs_business_cw] ([mx_mycompany_id], [subid]); + END; + + IF OBJECT_ID(N'dbo.bs_business_hdbl', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bs_business_hdbl] ( + [subid] bigint NOT NULL, + [father] bigint NULL, + [mx_xh] int NULL, + [mx_blno] varchar(50) NULL, + [mx_shippermemo] nvarchar(2000) NULL, + [mx_consigneememo] nvarchar(2000) NULL, + [mx_notifymemo] nvarchar(2000) NULL, + [mx_agentcompanyMemo] nvarchar(2000) NULL, + [mx_freightpayment] varchar(50) NULL, + [mx_namegoods] nvarchar(4000) NULL, + [mx_ctns] int NULL, + [mx_ctns_unit_id] bigint NULL, + [mx_gw] decimal(18,3) NULL, + [mx_vol] decimal(18,3) NULL, + [mx_bz1] nvarchar(3000) NULL, + [mx_bz2] nvarchar(100) NULL, + [mx_bz3] nvarchar(100) NULL, + [mx_bz4] nvarchar(100) NULL, + [mx_bz5] nvarchar(100) NULL, + [mx_transterm] varchar(50) NULL, + [mx_drno] varchar(50) NULL, + [mx_aimport_id] bigint NULL, + [mx_shipmark] nvarchar(2000) NULL, + [mx_loadport_id] bigint NULL, + [mx_transport_id] bigint NULL, + [mx_inputuser_id] bigint NULL, + [mx_inputdatetime] datetime2(0) NULL, + [mx_updateuser_id] bigint NULL, + [mx_updatedatetime] datetime2(0) NULL, + CONSTRAINT [PK_bs_business_hdbl] PRIMARY KEY ([subid]), + CONSTRAINT [FK_bs_business_hdbl_father] FOREIGN KEY ([father]) REFERENCES dbo.[bs_business] (b_id) + ); + CREATE INDEX [IX_bs_business_hdbl_father] ON dbo.[bs_business_hdbl] ([father], [subid]); + CREATE INDEX [IX_bs_business_hdbl_mx_ctns_unit_id] ON dbo.[bs_business_hdbl] ([mx_ctns_unit_id], [subid]); + CREATE INDEX [IX_bs_business_hdbl_mx_aimport_id] ON dbo.[bs_business_hdbl] ([mx_aimport_id], [subid]); + CREATE INDEX [IX_bs_business_hdbl_mx_loadport_id] ON dbo.[bs_business_hdbl] ([mx_loadport_id], [subid]); + CREATE INDEX [IX_bs_business_hdbl_mx_transport_id] ON dbo.[bs_business_hdbl] ([mx_transport_id], [subid]); + END; + + IF OBJECT_ID(N'dbo.bs_business_hdbl_sub', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bs_business_hdbl_sub] ( + [subid] bigint NOT NULL, + [father] bigint NULL, + [mx_xh] int NULL, + [mx_con_no] varchar(50) NULL, + [mx_blno] varchar(50) NULL, + [mx_con_cartons] int NULL, + [mx_con_gw] decimal(18,6) NULL, + [mx_con_nw] decimal(18,6) NULL, + [mx_con_vol] decimal(18,6) NULL, + [mx_bz1] nvarchar(3000) NULL, + [mx_bz2] nvarchar(100) NULL, + [mx_bz3] nvarchar(100) NULL, + [mx_bz4] nvarchar(100) NULL, + [mx_bz5] nvarchar(100) NULL, + [mx_linkfd_id] bigint NULL, + [mx_inputuser_id] bigint NULL, + [mx_inputdatetime] datetime2(0) NULL, + [mx_updateuser_id] bigint NULL, + [mx_updatedatetime] datetime2(0) NULL, + CONSTRAINT [PK_bs_business_hdbl_sub] PRIMARY KEY ([subid]) + ); + CREATE INDEX [IX_bs_business_hdbl_sub_father] ON dbo.[bs_business_hdbl_sub] ([father], [subid]); + CREATE INDEX [IX_bs_business_hdbl_sub_mx_linkfd_id] ON dbo.[bs_business_hdbl_sub] ([mx_linkfd_id], [subid]); + END; + + IF OBJECT_ID(N'dbo.bs_business_transport', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[bs_business_transport] ( + [subid] bigint NOT NULL, + [father] bigint NULL, + [mx_xh] int NULL, + [mx_source_type] varchar(50) NULL, + [mx_keyid] varchar(50) NULL, + [mx_processtype] varchar(50) NULL, + [mx_transtype] varchar(50) NULL, + [mx_loadport] varchar(50) NULL, + [mx_aimport] varchar(50) NULL, + [mx_ETD] datetime2(0) NULL, + [mx_ETA] datetime2(0) NULL, + [mx_truck_id] bigint NULL, + [mx_truckno] varchar(50) NULL, + [mx_pno] varchar(50) NULL, + [mx_bz] nvarchar(200) NULL, + [mx_startdate] datetime2(0) NULL, + [mx_finish] int NOT NULL CONSTRAINT [DF_bs_business_transport_mx_finish] DEFAULT (0), + [mx_finishdate] datetime2(0) NULL, + [mx_finish_userid] bigint NULL, + [mx_manage_id] bigint NULL, + [mx_user_id] bigint NULL, + [mx_varcahr1] varchar(50) NULL, + [mx_varcahr2] varchar(50) NULL, + [mx_varcahr3] varchar(50) NULL, + [mx_bz1] nvarchar(300) NULL, + [mx_bz2] nvarchar(300) NULL, + [mx_bz3] nvarchar(300) NULL, + [mx_jhdatetime] datetime2(0) NULL, + [mx_level] varchar(50) NULL, + [mx_state] varchar(50) NULL, + [mx_vessel_voy] varchar(150) NULL, + [mx_lastupdate_datatime] datetime2(0) NULL, + [mx_attach_bz1] nvarchar(300) NULL, + [mx_attach_bz2] nvarchar(300) NULL, + [mx_attach_bz3] nvarchar(300) NULL, + [mx_packdate] datetime2(0) NULL, + [mx_packplace] nvarchar(300) NULL, + [mx_txdate] datetime2(0) NULL, + [mx_txplace] nvarchar(300) NULL, + [mx_hxdate] datetime2(0) NULL, + [mx_hxplace] nvarchar(300) NULL, + [mx_conno] varchar(3000) NULL, + [mx_inputuser_id] bigint NULL, + [mx_inputdatetime] datetime2(0) NULL, + [mx_updateuser_id] bigint NULL, + [mx_updatedatetime] datetime2(0) NULL, + CONSTRAINT [PK_bs_business_transport] PRIMARY KEY ([subid]), + CONSTRAINT [FK_bs_business_transport_father] FOREIGN KEY ([father]) REFERENCES dbo.[bs_business] (b_id) + ); + CREATE INDEX [IX_bs_business_transport_father] ON dbo.[bs_business_transport] ([father], [subid]); + CREATE INDEX [IX_bs_business_transport_mx_truck_id] ON dbo.[bs_business_transport] ([mx_truck_id], [subid]); + CREATE INDEX [IX_bs_business_transport_mx_manage_id] ON dbo.[bs_business_transport] ([mx_manage_id], [subid]); + CREATE INDEX [IX_bs_business_transport_mx_user_id] ON dbo.[bs_business_transport] ([mx_user_id], [subid]); + END; + + +COMMIT TRANSACTION; diff --git a/code/fms/fms-api/config/migrations/019_create_finance_tables.sql b/code/fms/fms-api/config/migrations/019_create_finance_tables.sql new file mode 100644 index 00000000..fc12d2fb --- /dev/null +++ b/code/fms/fms-api/config/migrations/019_create_finance_tables.sql @@ -0,0 +1,362 @@ +/* Generated schema-only migration: 财务. No legacy data is copied. */ +SET NOCOUNT ON; +SET XACT_ABORT ON; + +IF DB_NAME() <> N'FMS' + THROW 51501, N'本迁移只能在 FMS 目标数据库执行。', 1; + +BEGIN TRANSACTION; + + IF OBJECT_ID(N'dbo.cw_account', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_account] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(500) NULL, + [b_type] varchar(200) NULL, + [b_bank] nvarchar(200) NULL, + [b_account] varchar(200) NOT NULL, + [b_date] datetime2(0) NULL, + [b_amount_start] decimal(18,2) NULL, + [b_amount] decimal(18,2) NULL, + [b_bz] nvarchar(500) NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_state] varchar(50) NULL, + [b_owner_id] bigint NULL, + [b_mycompany_id] bigint NULL, + [b_truckno] varchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + CONSTRAINT [PK_cw_account] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_cw_account_b_account] UNIQUE ([b_account]) + ); + CREATE INDEX [IX_cw_account_b_owner_id] ON dbo.[cw_account] ([b_owner_id], [b_id]); + CREATE INDEX [IX_cw_account_b_mycompany_id] ON dbo.[cw_account] ([b_mycompany_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.cw_account_type', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_account_type] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(50) NULL, + [b_bz] nvarchar(50) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_cw_account_type] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_cw_account_type_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.cw_bill', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_bill] ( + [b_id] bigint NOT NULL, + [b_ywno] varchar(50) NOT NULL, + [b_date] datetime2(0) NULL, + [b_direction] varchar(20) NULL, + [b_document_type] varchar(50) NULL, + [b_dw_id] bigint NULL, + [b_mycompany_id] bigint NULL, + [b_amount] decimal(18,2) NULL, + [b_amount_desc] nvarchar(500) NULL, + [b_money_id] bigint NULL, + [b_account_id] bigint NULL, + [b_bankname] nvarchar(100) NULL, + [b_bankaccount] nvarchar(500) NULL, + [b_zl] decimal(18,0) NULL, + [b_plandate] datetime2(0) NULL, + [b_state] varchar(50) NULL, + [b_bz] nvarchar(500) NULL, + [b_owner_id] bigint NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_writeoff] varchar(50) NULL, + [b_writeoff_id] bigint NULL, + [b_writeoffdatetime] datetime2(0) NULL, + [b_dw_bankacount] nvarchar(500) NULL, + [b_dw_invaccount] varchar(500) NULL, + [b_my_bankacount] nvarchar(500) NULL, + [b_my_invaccount] varchar(500) NULL, + CONSTRAINT [PK_cw_bill] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_cw_bill_b_ywno] UNIQUE ([b_ywno]) + ); + CREATE INDEX [IX_cw_bill_b_dw_id] ON dbo.[cw_bill] ([b_dw_id], [b_id]); + CREATE INDEX [IX_cw_bill_b_mycompany_id] ON dbo.[cw_bill] ([b_mycompany_id], [b_id]); + CREATE INDEX [IX_cw_bill_b_money_id] ON dbo.[cw_bill] ([b_money_id], [b_id]); + CREATE INDEX [IX_cw_bill_b_account_id] ON dbo.[cw_bill] ([b_account_id], [b_id]); + CREATE INDEX [IX_cw_bill_b_owner_id] ON dbo.[cw_bill] ([b_owner_id], [b_id]); + CREATE INDEX [IX_cw_bill_b_writeoff_id] ON dbo.[cw_bill] ([b_writeoff_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.cw_billsub', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_billsub] ( + [subid] bigint NOT NULL, + [father] bigint NULL, + [mx_xh] int NULL, + [mx_fee_id] bigint NULL, + [mx_fee_money_id] bigint NULL, + [mx_fee_amount] decimal(18,2) NULL, + [mx_bill_amount] decimal(18,2) NULL, + [mx_bz] nvarchar(200) NULL, + CONSTRAINT [PK_cw_billsub] PRIMARY KEY ([subid]), + CONSTRAINT [FK_cw_billsub_father] FOREIGN KEY ([father]) REFERENCES dbo.[cw_bill] (b_id) + ); + CREATE INDEX [IX_cw_billsub_father] ON dbo.[cw_billsub] ([father], [subid]); + CREATE INDEX [IX_cw_billsub_mx_fee_id] ON dbo.[cw_billsub] ([mx_fee_id], [subid]); + CREATE INDEX [IX_cw_billsub_mx_fee_money_id] ON dbo.[cw_billsub] ([mx_fee_money_id], [subid]); + END; + + IF OBJECT_ID(N'dbo.cw_daily', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_daily] ( + [b_id] bigint NOT NULL, + [b_date] datetime2(0) NULL, + [b_bill] int NOT NULL CONSTRAINT [DF_cw_daily_b_bill] DEFAULT (0), + [b_feetype] varchar(50) NULL, + [b_amount] decimal(18,2) NULL, + [b_bz1] nvarchar(500) NULL, + [b_owner_id] bigint NULL, + [b_payee_id] bigint NULL, + [b_state] varchar(50) NULL, + [b_desc] nvarchar(500) NULL, + [b_type] varchar(50) NULL, + [b_account_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_zx] int NOT NULL CONSTRAINT [DF_cw_daily_b_zx] DEFAULT (0), + [b_zxuser_id] bigint NULL, + [b_zxdatetime] datetime2(0) NULL, + [b_dw_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_inputuser_id] bigint NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_cw_daily] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_cw_daily_b_code] UNIQUE ([b_code]) + ); + CREATE INDEX [IX_cw_daily_b_owner_id] ON dbo.[cw_daily] ([b_owner_id], [b_id]); + CREATE INDEX [IX_cw_daily_b_payee_id] ON dbo.[cw_daily] ([b_payee_id], [b_id]); + CREATE INDEX [IX_cw_daily_b_account_id] ON dbo.[cw_daily] ([b_account_id], [b_id]); + CREATE INDEX [IX_cw_daily_b_zxuser_id] ON dbo.[cw_daily] ([b_zxuser_id], [b_id]); + CREATE INDEX [IX_cw_daily_b_dw_id] ON dbo.[cw_daily] ([b_dw_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.cw_invoice', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_invoice] ( + [b_id] bigint NOT NULL, + [b_ywno] varchar(50) NOT NULL, + [b_date] datetime2(0) NULL, + [b_direction] varchar(20) NULL, + [b_document_type] varchar(50) NULL, + [b_dw_id] bigint NULL, + [b_mycompany_id] bigint NULL, + [b_amount] decimal(18,2) NULL, + [b_money_id] bigint NULL, + [b_account_id] bigint NULL, + [b_bankname] nvarchar(100) NULL, + [b_bankaccount] nvarchar(500) NULL, + [b_tax] varchar(50) NULL, + [b_state] varchar(50) NULL, + [b_bz] nvarchar(500) NULL, + [b_bz1] nvarchar(500) NULL, + [b_owner_id] bigint NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_writeoff] varchar(50) NULL, + [b_writeoff_id] bigint NULL, + [b_writeoffdatetime] datetime2(0) NULL, + [b_dw_bankacount] nvarchar(500) NULL, + [b_dw_invaccount] varchar(500) NULL, + [b_my_bankacount] nvarchar(500) NULL, + [b_my_invaccount] varchar(500) NULL, + CONSTRAINT [PK_cw_invoice] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_cw_invoice_b_ywno] UNIQUE ([b_ywno]) + ); + CREATE INDEX [IX_cw_invoice_b_dw_id] ON dbo.[cw_invoice] ([b_dw_id], [b_id]); + CREATE INDEX [IX_cw_invoice_b_mycompany_id] ON dbo.[cw_invoice] ([b_mycompany_id], [b_id]); + CREATE INDEX [IX_cw_invoice_b_money_id] ON dbo.[cw_invoice] ([b_money_id], [b_id]); + CREATE INDEX [IX_cw_invoice_b_account_id] ON dbo.[cw_invoice] ([b_account_id], [b_id]); + CREATE INDEX [IX_cw_invoice_b_owner_id] ON dbo.[cw_invoice] ([b_owner_id], [b_id]); + CREATE INDEX [IX_cw_invoice_b_writeoff_id] ON dbo.[cw_invoice] ([b_writeoff_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.cw_invoicesub', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_invoicesub] ( + [subid] bigint NOT NULL, + [father] bigint NULL, + [mx_xh] int NULL, + [mx_fee_id] bigint NULL, + [mx_fee_money_id] bigint NULL, + [mx_fee_amount] decimal(18,2) NULL, + [mx_invoice_amount] decimal(18,2) NULL, + [mx_bz] nvarchar(50) NULL, + CONSTRAINT [PK_cw_invoicesub] PRIMARY KEY ([subid]), + CONSTRAINT [FK_cw_invoicesub_father] FOREIGN KEY ([father]) REFERENCES dbo.[cw_invoice] (b_id) + ); + CREATE INDEX [IX_cw_invoicesub_father] ON dbo.[cw_invoicesub] ([father], [subid]); + CREATE INDEX [IX_cw_invoicesub_mx_fee_id] ON dbo.[cw_invoicesub] ([mx_fee_id], [subid]); + CREATE INDEX [IX_cw_invoicesub_mx_fee_money_id] ON dbo.[cw_invoicesub] ([mx_fee_money_id], [subid]); + END; + + IF OBJECT_ID(N'dbo.cw_sfd', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_sfd] ( + [b_id] bigint NOT NULL, + [b_ywno] varchar(50) NOT NULL, + [b_direction] varchar(20) NULL, + [b_document_type] varchar(50) NULL, + [b_date] datetime2(0) NULL, + [b_dw_id] bigint NULL, + [b_mycompany_id] bigint NULL, + [b_amount] decimal(18,3) NULL, + [b_amount_other] decimal(18,3) NULL, + [b_amount_sj] decimal(18,3) NULL, + [b_money_id] bigint NULL, + [b_exrate] decimal(18,4) NULL, + [b_amount_hx] decimal(18,3) NULL, + [b_amount_nothx] decimal(18,3) NULL, + [b_account_id] bigint NULL, + [b_bankname] nvarchar(100) NULL, + [b_bankaccount] nvarchar(500) NULL, + [b_state] varchar(50) NULL, + [b_bz] nvarchar(500) NULL, + [b_owner_id] bigint NULL, + [b_sh] int NOT NULL CONSTRAINT [DF_cw_sfd_b_sh] DEFAULT (0), + [b_sh_id] bigint NULL, + [b_shdatetime] datetime2(0) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_writeoff] varchar(50) NULL, + [b_writeoff_id] bigint NULL, + [b_writeoffdatetime] datetime2(0) NULL, + CONSTRAINT [PK_cw_sfd] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_cw_sfd_b_ywno] UNIQUE ([b_ywno]) + ); + CREATE INDEX [IX_cw_sfd_b_dw_id] ON dbo.[cw_sfd] ([b_dw_id], [b_id]); + CREATE INDEX [IX_cw_sfd_b_mycompany_id] ON dbo.[cw_sfd] ([b_mycompany_id], [b_id]); + CREATE INDEX [IX_cw_sfd_b_money_id] ON dbo.[cw_sfd] ([b_money_id], [b_id]); + CREATE INDEX [IX_cw_sfd_b_account_id] ON dbo.[cw_sfd] ([b_account_id], [b_id]); + CREATE INDEX [IX_cw_sfd_b_owner_id] ON dbo.[cw_sfd] ([b_owner_id], [b_id]); + CREATE INDEX [IX_cw_sfd_b_sh_id] ON dbo.[cw_sfd] ([b_sh_id], [b_id]); + CREATE INDEX [IX_cw_sfd_b_writeoff_id] ON dbo.[cw_sfd] ([b_writeoff_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.cw_sfdsub', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_sfdsub] ( + [subid] bigint NOT NULL, + [father] bigint NULL, + [mx_xh] int NULL, + [mx_fee_id] bigint NULL, + [mx_fee_money_id] bigint NULL, + [mx_fee_amount] decimal(18,2) NULL, + [mx_sf_money_id] bigint NULL, + [mx_sf_amount] decimal(18,2) NULL, + [mx_exrate] decimal(18,4) NULL, + [mx_bz] nvarchar(50) NULL, + CONSTRAINT [PK_cw_sfdsub] PRIMARY KEY ([subid]), + CONSTRAINT [FK_cw_sfdsub_father] FOREIGN KEY ([father]) REFERENCES dbo.[cw_sfd] (b_id) + ); + CREATE INDEX [IX_cw_sfdsub_father] ON dbo.[cw_sfdsub] ([father], [subid]); + CREATE INDEX [IX_cw_sfdsub_mx_fee_id] ON dbo.[cw_sfdsub] ([mx_fee_id], [subid]); + CREATE INDEX [IX_cw_sfdsub_mx_fee_money_id] ON dbo.[cw_sfdsub] ([mx_fee_money_id], [subid]); + CREATE INDEX [IX_cw_sfdsub_mx_sf_money_id] ON dbo.[cw_sfdsub] ([mx_sf_money_id], [subid]); + END; + + IF OBJECT_ID(N'dbo.cw_bill_business', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_bill_business] ( + subid bigint NOT NULL, + [b_bill_id] bigint NOT NULL, + [b_business_id] bigint NOT NULL, + b_xh int NOT NULL CONSTRAINT [DF_cw_bill_business_xh] DEFAULT (0), + CONSTRAINT [PK_cw_bill_business] PRIMARY KEY (subid), + CONSTRAINT [UQ_cw_bill_business] UNIQUE ([b_bill_id], [b_business_id]), + CONSTRAINT [FK_cw_bill_business_left] FOREIGN KEY ([b_bill_id]) REFERENCES dbo.[cw_bill] (b_id), + CONSTRAINT [FK_cw_bill_business_right] FOREIGN KEY ([b_business_id]) REFERENCES dbo.[bs_business] (b_id) + ); + END; + + IF OBJECT_ID(N'dbo.cw_invoice_bill', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_invoice_bill] ( + subid bigint NOT NULL, + [b_invoice_id] bigint NOT NULL, + [b_bill_id] bigint NOT NULL, + b_xh int NOT NULL CONSTRAINT [DF_cw_invoice_bill_xh] DEFAULT (0), + CONSTRAINT [PK_cw_invoice_bill] PRIMARY KEY (subid), + CONSTRAINT [UQ_cw_invoice_bill] UNIQUE ([b_invoice_id], [b_bill_id]), + CONSTRAINT [FK_cw_invoice_bill_left] FOREIGN KEY ([b_invoice_id]) REFERENCES dbo.[cw_invoice] (b_id), + CONSTRAINT [FK_cw_invoice_bill_right] FOREIGN KEY ([b_bill_id]) REFERENCES dbo.[cw_bill] (b_id) + ); + END; + + IF OBJECT_ID(N'dbo.cw_invoice_business', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_invoice_business] ( + subid bigint NOT NULL, + [b_invoice_id] bigint NOT NULL, + [b_business_id] bigint NOT NULL, + b_xh int NOT NULL CONSTRAINT [DF_cw_invoice_business_xh] DEFAULT (0), + CONSTRAINT [PK_cw_invoice_business] PRIMARY KEY (subid), + CONSTRAINT [UQ_cw_invoice_business] UNIQUE ([b_invoice_id], [b_business_id]), + CONSTRAINT [FK_cw_invoice_business_left] FOREIGN KEY ([b_invoice_id]) REFERENCES dbo.[cw_invoice] (b_id), + CONSTRAINT [FK_cw_invoice_business_right] FOREIGN KEY ([b_business_id]) REFERENCES dbo.[bs_business] (b_id) + ); + END; + + IF OBJECT_ID(N'dbo.cw_sfd_business', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_sfd_business] ( + subid bigint NOT NULL, + [b_sfd_id] bigint NOT NULL, + [b_business_id] bigint NOT NULL, + b_xh int NOT NULL CONSTRAINT [DF_cw_sfd_business_xh] DEFAULT (0), + CONSTRAINT [PK_cw_sfd_business] PRIMARY KEY (subid), + CONSTRAINT [UQ_cw_sfd_business] UNIQUE ([b_sfd_id], [b_business_id]), + CONSTRAINT [FK_cw_sfd_business_left] FOREIGN KEY ([b_sfd_id]) REFERENCES dbo.[cw_sfd] (b_id), + CONSTRAINT [FK_cw_sfd_business_right] FOREIGN KEY ([b_business_id]) REFERENCES dbo.[bs_business] (b_id) + ); + END; + + IF OBJECT_ID(N'dbo.cw_sfd_invoice', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_sfd_invoice] ( + subid bigint NOT NULL, + [b_sfd_id] bigint NOT NULL, + [b_invoice_id] bigint NOT NULL, + b_xh int NOT NULL CONSTRAINT [DF_cw_sfd_invoice_xh] DEFAULT (0), + CONSTRAINT [PK_cw_sfd_invoice] PRIMARY KEY (subid), + CONSTRAINT [UQ_cw_sfd_invoice] UNIQUE ([b_sfd_id], [b_invoice_id]), + CONSTRAINT [FK_cw_sfd_invoice_left] FOREIGN KEY ([b_sfd_id]) REFERENCES dbo.[cw_sfd] (b_id), + CONSTRAINT [FK_cw_sfd_invoice_right] FOREIGN KEY ([b_invoice_id]) REFERENCES dbo.[cw_invoice] (b_id) + ); + END; + + IF OBJECT_ID(N'dbo.cw_sfd_bill', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[cw_sfd_bill] ( + subid bigint NOT NULL, + [b_sfd_id] bigint NOT NULL, + [b_bill_id] bigint NOT NULL, + b_xh int NOT NULL CONSTRAINT [DF_cw_sfd_bill_xh] DEFAULT (0), + CONSTRAINT [PK_cw_sfd_bill] PRIMARY KEY (subid), + CONSTRAINT [UQ_cw_sfd_bill] UNIQUE ([b_sfd_id], [b_bill_id]), + CONSTRAINT [FK_cw_sfd_bill_left] FOREIGN KEY ([b_sfd_id]) REFERENCES dbo.[cw_sfd] (b_id), + CONSTRAINT [FK_cw_sfd_bill_right] FOREIGN KEY ([b_bill_id]) REFERENCES dbo.[cw_bill] (b_id) + ); + END; + + +COMMIT TRANSACTION; diff --git a/code/fms/fms-api/config/migrations/020_create_oa_tables.sql b/code/fms/fms-api/config/migrations/020_create_oa_tables.sql new file mode 100644 index 00000000..87e4ab75 --- /dev/null +++ b/code/fms/fms-api/config/migrations/020_create_oa_tables.sql @@ -0,0 +1,179 @@ +/* Generated schema-only migration: OA. No legacy data is copied. */ +SET NOCOUNT ON; +SET XACT_ABORT ON; + +IF DB_NAME() <> N'FMS' + THROW 51501, N'本迁移只能在 FMS 目标数据库执行。', 1; + +BEGIN TRANSACTION; + + IF OBJECT_ID(N'dbo.oa_notices', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[oa_notices] ( + [b_id] bigint NOT NULL, + [b_subject] nvarchar(250) NULL, + [b_info] nvarchar(max) NULL, + [b_inputdate] datetime2(0) NULL, + [b_inputuser_id] bigint NULL, + [b_toall] int NOT NULL CONSTRAINT [DF_oa_notices_b_toall] DEFAULT (0), + [b_order] int NULL, + [b_visible] int NOT NULL CONSTRAINT [DF_oa_notices_b_visible] DEFAULT (1), + [b_body] varbinary(max) NULL, + [b_owner_id] bigint NULL, + [b_state] varchar(50) NULL, + [b_dl_id] bigint NULL, + [b_xl_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_oa_notices] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_oa_notices_b_code] UNIQUE ([b_code]) + ); + CREATE INDEX [IX_oa_notices_b_owner_id] ON dbo.[oa_notices] ([b_owner_id], [b_id]); + CREATE INDEX [IX_oa_notices_b_dl_id] ON dbo.[oa_notices] ([b_dl_id], [b_id]); + CREATE INDEX [IX_oa_notices_b_xl_id] ON dbo.[oa_notices] ([b_xl_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.oa_notices_attach', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[oa_notices_attach] ( + [SubID] bigint NOT NULL, + [father] bigint NULL, + [mx_attachname] nvarchar(500) NULL, + [mx_attachfile] varbinary(max) NULL, + [mx_contentid] nvarchar(500) NULL, + [mx_attachsize] varchar(50) NULL, + [mx_ifattachfile] varchar(500) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + CONSTRAINT [PK_oa_notices_attach] PRIMARY KEY ([SubID]), + CONSTRAINT [FK_oa_notices_attach_father] FOREIGN KEY ([father]) REFERENCES dbo.[oa_notices] (b_id) + ); + CREATE INDEX [IX_oa_notices_attach_father] ON dbo.[oa_notices_attach] ([father], [SubID]); + END; + + IF OBJECT_ID(N'dbo.oa_notices_dl', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[oa_notices_dl] ( + [b_id] bigint NOT NULL, + [b_name] nvarchar(100) NULL, + [b_bz] nvarchar(100) NULL, + [b_xh] int NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_oa_notices_dl] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_oa_notices_dl_b_code] UNIQUE ([b_code]) + ); + END; + + IF OBJECT_ID(N'dbo.oa_notices_xl', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[oa_notices_xl] ( + [b_id] bigint NOT NULL, + [b_xh] int NULL, + [b_code] varchar(50) NOT NULL, + [b_name] nvarchar(100) NULL, + [b_father_id] bigint NULL, + [b_bz] nvarchar(100) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + CONSTRAINT [PK_oa_notices_xl] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_oa_notices_xl_b_code] UNIQUE ([b_code]) + ); + CREATE INDEX [IX_oa_notices_xl_b_father_id] ON dbo.[oa_notices_xl] ([b_father_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.oa_noticesSub', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[oa_noticesSub] ( + [subid] bigint NOT NULL, + [father] bigint NULL, + [mx_xh] varchar(50) NULL, + [mx_user_id] bigint NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + CONSTRAINT [PK_oa_noticesSub] PRIMARY KEY ([subid]), + CONSTRAINT [FK_oa_noticesSub_father] FOREIGN KEY ([father]) REFERENCES dbo.[oa_notices] (b_id) + ); + CREATE INDEX [IX_oa_noticesSub_father] ON dbo.[oa_noticesSub] ([father], [subid]); + CREATE INDEX [IX_oa_noticesSub_mx_user_id] ON dbo.[oa_noticesSub] ([mx_user_id], [subid]); + END; + + IF OBJECT_ID(N'dbo.oa_reminder', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[oa_reminder] ( + [b_id] bigint NOT NULL, + [b_subject] nvarchar(250) NULL, + [b_content] nvarchar(max) NULL, + [b_datebegin] datetime2(0) NULL, + [b_reminder] int NOT NULL CONSTRAINT [DF_oa_reminder_b_reminder] DEFAULT (0), + [b_reminderday] int NULL, + [b_customer_id] bigint NULL, + [b_owner_id] bigint NULL, + [b_inputuser_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_oa_reminder] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_oa_reminder_b_code] UNIQUE ([b_code]) + ); + CREATE INDEX [IX_oa_reminder_b_customer_id] ON dbo.[oa_reminder] ([b_customer_id], [b_id]); + CREATE INDEX [IX_oa_reminder_b_owner_id] ON dbo.[oa_reminder] ([b_owner_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.oa_title', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[oa_title] ( + [b_id] bigint NOT NULL, + [b_subject] nvarchar(250) NULL, + [b_inputuser_id] bigint NULL, + [b_inputdate] datetime2(0) NULL, + [b_inputtime] time(0) NULL, + [b_order] int NOT NULL, + [b_content] nvarchar(max) NULL, + [b_cate_id] bigint NULL, + [b_inputdatetime] datetime2(0) NULL, + [b_updateuser_id] bigint NULL, + [b_updatedatetime] datetime2(0) NULL, + [b_code] varchar(50) NOT NULL, + CONSTRAINT [PK_oa_title] PRIMARY KEY ([b_id]), + CONSTRAINT [UQ_oa_title_b_code] UNIQUE ([b_code]) + ); + CREATE INDEX [IX_oa_title_b_cate_id] ON dbo.[oa_title] ([b_cate_id], [b_id]); + END; + + IF OBJECT_ID(N'dbo.oa_title_bmfl', N'U') IS NULL + BEGIN + CREATE TABLE dbo.[oa_title_bmfl] ( + b_id bigint NOT NULL, + b_parent_id bigint NULL, + b_name nvarchar(150) NOT NULL, + b_level int NOT NULL CONSTRAINT [DF_oa_title_bmfl_level] DEFAULT (1), + b_path varchar(1000) NOT NULL, + b_xh int NOT NULL CONSTRAINT [DF_oa_title_bmfl_xh] DEFAULT (0), + b_canuse int NOT NULL CONSTRAINT [DF_oa_title_bmfl_canuse] DEFAULT (1), + b_inputuser_id bigint NULL, + b_inputdatetime datetime2(0) NOT NULL CONSTRAINT [DF_oa_title_bmfl_inputdatetime] DEFAULT (SYSDATETIME()), + b_updateuser_id bigint NULL, + b_updatedatetime datetime2(0) NULL, + CONSTRAINT [PK_oa_title_bmfl] PRIMARY KEY (b_id), + CONSTRAINT [CK_oa_title_bmfl_parent] CHECK (b_parent_id IS NULL OR b_parent_id <> b_id), + CONSTRAINT [FK_oa_title_bmfl_parent] FOREIGN KEY (b_parent_id) REFERENCES dbo.[oa_title_bmfl] (b_id) + ); + CREATE INDEX [IX_oa_title_bmfl_parent] ON dbo.[oa_title_bmfl] (b_parent_id, b_xh, b_id); + CREATE INDEX [IX_oa_title_bmfl_path] ON dbo.[oa_title_bmfl] (b_path, b_xh, b_id); + END; + + +COMMIT TRANSACTION; diff --git a/code/fms/fms-api/config/migrations/021_create_business_views.sql b/code/fms/fms-api/config/migrations/021_create_business_views.sql new file mode 100644 index 00000000..fd2b80a8 --- /dev/null +++ b/code/fms/fms-api/config/migrations/021_create_business_views.sql @@ -0,0 +1,539 @@ +/* Generated schema-only migration: 业务视图. No legacy data is copied. */ +SET NOCOUNT ON; +SET XACT_ABORT ON; + +IF DB_NAME() <> N'FMS' + THROW 51501, N'本迁移只能在 FMS 目标数据库执行。', 1; + +BEGIN TRANSACTION; + + IF OBJECT_ID(N'dbo.v_b_feetype', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_feetype]; + EXEC sys.sp_executesql N'CREATE VIEW dbo.v_b_feetype AS SELECT fee.b_id, fee.b_name, fee.b_name_e, fee.b_bz, fee.b_default, fee.b_amount, fee.b_tax, fee.b_money_id, fee.b_inputuser_id, fee.b_inputdatetime, fee.b_updateuser_id, fee.b_updatedatetime, money.b_hl FROM dbo.b_feetype AS fee LEFT JOIN dbo.b_money AS money ON money.b_id = fee.b_money_id'; + + IF OBJECT_ID(N'dbo.v_b_hl', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_hl]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_hl] AS SELECT dbo.b_hl.b_id, dbo.b_hl.b_money_id, + dbo.b_hl.b_bz, dbo.b_hl.b_hl, dbo.b_hl.b_month, dbo.b_hl.b_qsdate, + dbo.b_hl.b_zzdate, CONVERT(varchar(4), dbo.b_hl.b_qsdate, 120) AS v_year, + dbo.b_hl.b_type +FROM dbo.b_hl'; + + IF OBJECT_ID(N'dbo.v_b_othercompany', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_othercompany]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_othercompany] AS SELECT dbo.b_othercompany.b_id, dbo.b_othercompany.b_pycode, dbo.b_othercompany.b_name, dbo.b_othercompany.b_shortname, dbo.b_othercompany.b_linkman, dbo.b_othercompany.b_phone, + dbo.b_othercompany.b_addr, dbo.b_othercompany.b_firstlinkdate, dbo.b_othercompany.b_htno, dbo.b_othercompany.b_black, dbo.b_othercompany.b_canuse, dbo.b_othercompany.b_zl, + dbo.b_othercompany.b_tel, dbo.b_othercompany.b_fax, dbo.b_othercompany.b_www, dbo.b_othercompany.b_email, dbo.b_othercompany.b_bankacount, dbo.b_othercompany.b_cate_id, + dbo.b_othercompany.b_bz1, dbo.b_othercompany.b_bz2, dbo.b_othercompany.b_bz3, dbo.b_othercompany.b_bz4, dbo.b_othercompany.b_province, dbo.b_othercompany.b_city, + dbo.b_othercompany.b_area, dbo.b_othercompany.b_country, dbo.b_othercompany.b_showcolor, dbo.b_othercompany.b_type_id, dbo.b_othercompany.b_from_id, dbo.b_othercompany.b_edicode, + dbo.b_othercompany.b_type1_id, dbo.b_othercompany.b_type2_id, dbo.b_othercompany.b_type3_id, dbo.b_othercompany.b_type4_id, dbo.b_othercompany.b_type5_id, + dbo.b_othercompany.b_owner_id, dbo.b_othercompany.b_inputuser_id, dbo.b_othercompany.b_inputdatetime, dbo.b_othercompany.b_updateuser_id, dbo.b_othercompany.b_updatedatetime, + dbo.b_othercompany.b_password, dbo.b_othercompany.b_state, dbo.b_othercompany.b_bankacount_e, dbo.b_othercompany.b_addr_e, dbo.b_othercompany.b_name_e, + dbo.b_othercompany.b_type, dbo.b_user.b_name AS v_ownername, dbo.b_othercompany.b_htdate, dbo.b_othercompany.b_htexpiredate, dbo.b_othercompany.b_invaccount +FROM dbo.b_othercompany LEFT OUTER JOIN + dbo.b_user ON dbo.b_othercompany.b_owner_id = dbo.b_user.b_id +WHERE (ISNULL(dbo.b_othercompany.b_black, ''0'') <> ''1'')'; + + IF OBJECT_ID(N'dbo.v_b_othercompany_bg', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_othercompany_bg]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_othercompany_bg] AS SELECT dbo.b_othercompany.b_id, dbo.b_othercompany.b_name, dbo.b_user.b_name AS v_ownername, dbo.b_user.b_department AS v_ownerdepartment, dbo.b_othercompany.b_owner_id, + dbo.b_othercompany.b_type, dbo.b_othercompany.b_pycode, dbo.b_othercompany.b_bankacount, dbo.b_othercompany.b_invaccount +FROM dbo.b_othercompany LEFT OUTER JOIN + dbo.b_user ON dbo.b_othercompany.b_owner_id = dbo.b_user.b_id +WHERE (dbo.b_othercompany.b_type LIKE ''%bg%'') AND (ISNULL(dbo.b_othercompany.b_black, ''0'') <> ''1'')'; + + IF OBJECT_ID(N'dbo.v_b_othercompany_bmfl', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_othercompany_bmfl]; + EXEC sys.sp_executesql N'CREATE VIEW dbo.v_b_othercompany_bmfl AS SELECT b_id, b_name FROM dbo.b_othercompany_bmfl'; + + IF OBJECT_ID(N'dbo.v_b_othercompany_customer', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_othercompany_customer]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_othercompany_customer] AS SELECT dbo.b_othercompany.b_name, dbo.b_othercompany.b_id, dbo.b_user.b_name AS v_ownername, dbo.b_user.b_department AS v_ownerdepartment, dbo.b_othercompany.b_owner_id, + dbo.b_othercompany.b_pycode, dbo.b_othercompany.b_type, dbo.b_othercompany.b_bankacount, dbo.b_othercompany.b_invaccount, dbo.b_othercompany.b_zl +FROM dbo.b_othercompany LEFT OUTER JOIN + dbo.b_user ON dbo.b_othercompany.b_owner_id = dbo.b_user.b_id +WHERE (dbo.b_othercompany.b_type LIKE ''%customer%'') AND (ISNULL(dbo.b_othercompany.b_black, ''0'') <> ''1'')'; + + IF OBJECT_ID(N'dbo.v_b_othercompany_cy', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_othercompany_cy]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_othercompany_cy] AS SELECT dbo.b_othercompany.b_id, dbo.b_othercompany.b_name, dbo.b_user.b_name AS v_ownername, dbo.b_user.b_department AS v_ownerdepartment, dbo.b_othercompany.b_owner_id, + dbo.b_othercompany.b_type, dbo.b_othercompany.b_pycode, dbo.b_othercompany.b_bankacount, dbo.b_othercompany.b_invaccount +FROM dbo.b_othercompany LEFT OUTER JOIN + dbo.b_user ON dbo.b_othercompany.b_owner_id = dbo.b_user.b_id +WHERE (dbo.b_othercompany.b_type LIKE ''%cy%'') AND (ISNULL(dbo.b_othercompany.b_black, ''0'') <> ''1'')'; + + IF OBJECT_ID(N'dbo.v_b_othercompany_dc', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_othercompany_dc]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_othercompany_dc] AS SELECT dbo.b_othercompany.b_id, dbo.b_othercompany.b_name, dbo.b_user.b_name AS v_ownername, dbo.b_user.b_department AS v_ownerdepartment, dbo.b_othercompany.b_owner_id, + dbo.b_othercompany.b_type, dbo.b_othercompany.b_pycode, dbo.b_othercompany.b_bankacount, dbo.b_othercompany.b_invaccount +FROM dbo.b_othercompany LEFT OUTER JOIN + dbo.b_user ON dbo.b_othercompany.b_owner_id = dbo.b_user.b_id +WHERE (dbo.b_othercompany.b_type LIKE ''%dc%'') AND (ISNULL(dbo.b_othercompany.b_black, ''0'') <> ''1'')'; + + IF OBJECT_ID(N'dbo.v_b_othercompany_my', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_othercompany_my]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_othercompany_my] AS SELECT dbo.b_othercompany.b_id, dbo.b_othercompany.b_name, dbo.b_user.b_name AS v_ownername, dbo.b_user.b_department AS v_ownerdepartment, dbo.b_othercompany.b_owner_id, + dbo.b_othercompany.b_pycode, dbo.b_othercompany.b_type, dbo.b_othercompany.b_bankacount, dbo.b_othercompany.b_invaccount +FROM dbo.b_othercompany LEFT OUTER JOIN + dbo.b_user ON dbo.b_othercompany.b_owner_id = dbo.b_user.b_id +WHERE (dbo.b_othercompany.b_type LIKE ''%my%'') AND (ISNULL(dbo.b_othercompany.b_black, ''0'') <> ''1'')'; + + IF OBJECT_ID(N'dbo.v_b_othercompany_other', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_othercompany_other]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_othercompany_other] AS SELECT dbo.b_othercompany.b_id, dbo.b_othercompany.b_name, dbo.b_user.b_name AS v_ownername, dbo.b_user.b_department AS v_ownerdepartment, dbo.b_othercompany.b_owner_id, + dbo.b_othercompany.b_type, dbo.b_othercompany.b_pycode, dbo.b_othercompany.b_bankacount, dbo.b_othercompany.b_invaccount +FROM dbo.b_othercompany LEFT OUTER JOIN + dbo.b_user ON dbo.b_othercompany.b_owner_id = dbo.b_user.b_id +WHERE (dbo.b_othercompany.b_type LIKE ''%other%'') AND (ISNULL(dbo.b_othercompany.b_black, ''0'') <> ''1'')'; + + IF OBJECT_ID(N'dbo.v_b_othercompany_ship', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_othercompany_ship]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_othercompany_ship] AS SELECT dbo.b_othercompany.b_id, dbo.b_othercompany.b_name, dbo.b_user.b_name AS v_ownername, dbo.b_user.b_department AS v_ownerdepartment, dbo.b_othercompany.b_owner_id, + dbo.b_othercompany.b_type, dbo.b_othercompany.b_pycode, dbo.b_othercompany.b_bankacount, dbo.b_othercompany.b_invaccount +FROM dbo.b_othercompany LEFT OUTER JOIN + dbo.b_user ON dbo.b_othercompany.b_owner_id = dbo.b_user.b_id +WHERE (dbo.b_othercompany.b_type LIKE ''%ship%'') AND (ISNULL(dbo.b_othercompany.b_black, ''0'') <> ''1'')'; + + IF OBJECT_ID(N'dbo.v_b_othercompany_truck', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_othercompany_truck]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_othercompany_truck] AS SELECT dbo.b_othercompany.b_id, dbo.b_othercompany.b_name, ISNULL(dbo.b_othercompany.b_shortname, '''') + ISNULL(dbo.b_othercompany.b_phone, '''') AS b_truckphone, + dbo.b_user.b_name AS v_ownername, dbo.b_user.b_department AS v_ownerdepartment, dbo.b_othercompany.b_type, dbo.b_othercompany.b_pycode, dbo.b_othercompany.b_bankacount, + dbo.b_othercompany.b_invaccount +FROM dbo.b_othercompany LEFT OUTER JOIN + dbo.b_user ON dbo.b_othercompany.b_owner_id = dbo.b_user.b_id +WHERE (dbo.b_othercompany.b_type LIKE ''%truck%'') AND (ISNULL(dbo.b_othercompany.b_black, ''0'') <> ''1'')'; + + IF OBJECT_ID(N'dbo.v_b_othercompany_warehouse', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_othercompany_warehouse]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_othercompany_warehouse] AS SELECT dbo.b_othercompany.b_id, dbo.b_othercompany.b_name, dbo.b_user.b_name AS v_ownername, dbo.b_user.b_department AS v_ownerdepartment, dbo.b_othercompany.b_owner_id, + dbo.b_othercompany.b_type, dbo.b_othercompany.b_pycode, dbo.b_othercompany.b_bankacount, dbo.b_othercompany.b_invaccount +FROM dbo.b_othercompany LEFT OUTER JOIN + dbo.b_user ON dbo.b_othercompany.b_owner_id = dbo.b_user.b_id +WHERE (dbo.b_othercompany.b_type LIKE ''%warehouse%'') AND (ISNULL(dbo.b_othercompany.b_black, ''0'') <> ''1'')'; + + IF OBJECT_ID(N'dbo.v_b_port', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_port]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_port] AS SELECT b_id, b_name_e AS b_name, b_country +FROM dbo.b_port'; + + IF OBJECT_ID(N'dbo.v_b_user', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_user]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_user] AS SELECT b_name, b_department, b_id, b_machineid, b_bz, b_password, b_canuse, b_othermachinelogin, b_salesman, b_docman, b_dealman, b_receivelevel, b_paylevel, b_visible_customer, + b_visible_supply, b_levelvisible +FROM dbo.b_user'; + + IF OBJECT_ID(N'dbo.v_b_user_feetype', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_user_feetype]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_user_feetype] AS SELECT dbo.b_user_feetype.b_id, dbo.b_user_feetype.b_user_id, + dbo.b_user_feetype.b_feetype_id, dbo.b_feetype.b_name, + dbo.b_feetype.b_name AS v_b_feetype_name, dbo.b_user_feetype.b_bz +FROM dbo.b_user_feetype LEFT OUTER JOIN + dbo.b_feetype ON dbo.b_user_feetype.b_feetype_id = dbo.b_feetype.b_id'; + + IF OBJECT_ID(N'dbo.v_b_user_id', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_user_id]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_user_id] AS SELECT b_id, b_id AS b_name +FROM dbo.b_user'; + + IF OBJECT_ID(N'dbo.v_b_userandcontact', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_userandcontact]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_userandcontact] AS SELECT b_id, b_name +FROM dbo.b_user +union +select b_id,b_name_ch as b_name +from dbo.b_contact'; + + IF OBJECT_ID(N'dbo.v_b_vessel', N'V') IS NOT NULL + DROP VIEW dbo.[v_b_vessel]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_b_vessel] AS SELECT b_id, b_vessel_name AS b_name, b_voy +FROM dbo.b_vessel'; + + IF OBJECT_ID(N'dbo.v_bc_khht', N'V') IS NOT NULL + DROP VIEW dbo.[v_bc_khht]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_bc_khht] AS SELECT dbo.bc_khht.b_id, dbo.bc_khht.b_customer_id, dbo.bc_khht.b_htno, dbo.bc_khht.b_begindate, dbo.bc_khht.b_enddate, dbo.bc_khht.b_httype, dbo.bc_khht.b_bz, + dbo.b_othercompany.b_name AS v_customer_name, dbo.bc_khht.b_state, dbo.bc_khht.b_owner_id, dbo.bc_khht.b_inputuser_id, dbo.bc_khht.b_inputdatetime, dbo.bc_khht.b_mycompany_id, + dbo.bc_khht.b_zl, dbo.bc_khht.b_bz1, b_othercompany_1.b_name AS v_mycompany_name, dbo.bc_khht.b_sales_id, dbo.b_user.b_name AS v_sales_name, dbo.bc_khht.b_updatedatetime, + dbo.bc_khht.b_updateuser_id +FROM dbo.bc_khht LEFT OUTER JOIN + dbo.b_user ON dbo.bc_khht.b_sales_id = dbo.b_user.b_id LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_1 ON dbo.bc_khht.b_mycompany_id = b_othercompany_1.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.bc_khht.b_customer_id = dbo.b_othercompany.b_id'; + + IF OBJECT_ID(N'dbo.v_bc_pricelist', N'V') IS NOT NULL + DROP VIEW dbo.[v_bc_pricelist]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_bc_pricelist] AS SELECT dbo.bc_priceList.b_id, dbo.bc_priceList.b_dw_id, dbo.bc_priceList.b_type, dbo.bc_priceList.b_canuse, dbo.bc_priceList.b_begindate, dbo.bc_priceList.b_enddate, dbo.bc_priceList.b_loadport, + dbo.bc_priceList.b_aimport, dbo.bc_priceList.b_cate_id, dbo.b_othercompany.b_name AS v_dw_name, dbo.bc_priceList.b_name, dbo.bc_priceList.b_owner_id, dbo.bc_priceList.b_state, + dbo.bc_priceList.b_inputuser_id, dbo.bc_priceList.b_inputdatetime, dbo.bc_priceList.b_updatedatetime, dbo.bc_priceList.b_updateuser_id +FROM dbo.bc_priceList LEFT OUTER JOIN + dbo.b_othercompany ON dbo.bc_priceList.b_dw_id = dbo.b_othercompany.b_id'; + + IF OBJECT_ID(N'dbo.v_bc_pricelist_sub', N'V') IS NOT NULL + DROP VIEW dbo.[v_bc_pricelist_sub]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_bc_pricelist_sub] AS SELECT dbo.bc_pricelist_sub.subid, dbo.bc_pricelist_sub.father, dbo.bc_pricelist_sub.mx_xh, dbo.bc_pricelist_sub.mx_dw_id, dbo.bc_pricelist_sub.mx_type_id, dbo.bc_pricelist_sub.mx_feetype_id, + dbo.bc_pricelist_sub.mx_moneytype_id, dbo.bc_pricelist_sub.mx_exrate, dbo.bc_pricelist_sub.mx_price, dbo.bc_pricelist_sub.mx_qty, dbo.bc_pricelist_sub.mx_amount_root, + dbo.bc_pricelist_sub.mx_amount, dbo.bc_pricelist_sub.mx_tax, dbo.bc_pricelist_sub.mx_level, dbo.bc_pricelist_sub.mx_hstype_id, dbo.bc_pricelist_sub.mx_varchar_1, + dbo.bc_pricelist_sub.mx_varchar_2, dbo.bc_pricelist_sub.mx_varchar_3, dbo.bc_pricelist_sub.mx_varchar_4, dbo.bc_pricelist_sub.mx_inputdatetime, dbo.bc_pricelist_sub.mx_inputuser_id, + dbo.bc_pricelist_sub.mx_updateuser_id, dbo.bc_pricelist_sub.mx_updatedatetime, dbo.b_othercompany.b_name AS v_mx_dw_name, dbo.b_feetype.b_name AS v_mx_feetype_name, + dbo.bc_pricelist_sub.mx_dw_field, dbo.b_sys_pricelisttype.b_name AS v_dw_field, dbo.b_sys_pricelisttype.b_dw_id AS v_dw_id, dbo.b_sys_pricelisttype.b_dw_name AS v_dw_name +FROM dbo.bc_pricelist_sub LEFT OUTER JOIN + dbo.b_feetype ON dbo.bc_pricelist_sub.mx_feetype_id = dbo.b_feetype.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.bc_pricelist_sub.mx_dw_id = dbo.b_othercompany.b_id LEFT OUTER JOIN + dbo.b_sys_pricelisttype ON dbo.bc_pricelist_sub.mx_dw_field = dbo.b_sys_pricelisttype.b_id'; + + IF OBJECT_ID(N'dbo.v_bs_business', N'V') IS NOT NULL + DROP VIEW dbo.[v_bs_business]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_bs_business] AS SELECT dbo.bs_business.b_id, dbo.bs_business.b_ywno, dbo.bs_business.b_ywtype, dbo.bs_business.b_cargo_source, dbo.bs_business.b_orderdate, dbo.bs_business.b_transterm, + dbo.bs_business.b_customer_id, dbo.bs_business.b_mycompany_id, dbo.bs_business.b_loadport, dbo.bs_business.b_disport, dbo.bs_business.b_aimport, dbo.bs_business.b_transport, + dbo.bs_business.b_freightpayment, dbo.bs_business.b_state, dbo.bs_business.b_ysfs, dbo.bs_business.b_ctns, dbo.bs_business.b_ctns_unit, dbo.bs_business.b_namegoods, + dbo.bs_business.b_vol, dbo.bs_business.b_gw, dbo.bs_business.b_voy, dbo.bs_business.b_vessel, dbo.bs_business.b_etd, dbo.bs_business.b_eta, dbo.bs_business.b_shipingdate, + dbo.bs_business.b_arrivedate, dbo.bs_business.b_progress, dbo.bs_business.b_desc_con, dbo.bs_business.b_desc_noandseal, dbo.bs_business.b_sales_id, dbo.bs_business.b_sw_id, + dbo.bs_business.b_operater_id, dbo.bs_business.b_owner_id, dbo.bs_business.b_shipcompany_id, dbo.bs_business.b_warehouse_id, dbo.bs_business.b_dcdw_id, + dbo.bs_business.b_bgcompany_id, dbo.bs_business.b_truck_id, dbo.bs_business.b_dcdwlinkman, dbo.bs_business.b_dcno, dbo.bs_business.b_dcdate, dbo.bs_business.b_pcyqmemo, + dbo.bs_business.b_enterstoreno, dbo.bs_business.b_showcolor, dbo.bs_business.b_blno, dbo.bs_business.b_bl_copy, dbo.bs_business.b_bl_state, dbo.bs_business.b_bl_date, + dbo.bs_business.b_bl_qsdate, dbo.bs_business.b_bl_jcdate, dbo.bs_business.b_bgdate, dbo.bs_business.b_bgno, dbo.bs_business.b_bz1, dbo.bs_business.b_bz2, dbo.bs_business.b_bz3, + dbo.bs_business.b_bz4, dbo.bs_business.b_shippermemo, dbo.bs_business.b_consigneememo, dbo.bs_business.b_notifymemo, dbo.bs_business.b_shipmark, + dbo.bs_business.b_agentcompanyMemo, dbo.bs_business.b_con20, dbo.bs_business.b_inputuser_id, dbo.bs_business.b_inputdatetime, dbo.bs_business.b_updateuser_id, + dbo.bs_business.b_updatedatetime, dbo.bs_business.b_yslocked, dbo.bs_business.b_yslocked_date, dbo.bs_business.b_yslocked_userid, dbo.bs_business.b_yflocked, + dbo.bs_business.b_yflocked_date, dbo.bs_business.b_yflocked_userid, dbo.bs_business.b_cwlocked, dbo.bs_business.b_cwlocked_date, dbo.bs_business.b_cwlocked_userid, + b_othercompany_1.b_name AS v_my_company, b_othercompany_3.b_name AS v_customer_company, b_othercompany_2.b_name AS v_ship_company, + b_othercompany_4.b_name AS v_bg_company, b_othercompany_5.b_name AS v_dc_company, b_othercompany_6.b_name AS v_warehouse_company, + dbo.b_othercompany.b_name AS v_truck_company, b_user_2.b_name AS v_sw_name, b_user_1.b_name AS v_operater_name, dbo.b_user.b_name AS v_sales_name, dbo.bs_business.b_bgstate, + dbo.bs_business.b_drno, dbo.bs_business.b_loaddate, dbo.bs_business.b_fcdate, dbo.bs_business.b_jgbegindate, dbo.bs_business.b_jgenddate, dbo.bs_business.b_bgtype, + dbo.bs_business.b_cystate, dbo.bs_business.b_jgdate, dbo.bs_business.b_jddate, dbo.bs_business.b_oceanline, dbo.bs_business.b_doc_id, b_user_3.b_name AS v_doc_name, + dbo.bs_business.b_con40, dbo.bs_business.b_con40h, dbo.bs_business.b_con45, dbo.bs_business.b_ac_ctns, dbo.bs_business.b_ac_vol, dbo.bs_business.b_ac_gw +FROM dbo.bs_business LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_1 ON dbo.bs_business.b_mycompany_id = b_othercompany_1.b_id LEFT OUTER JOIN + dbo.b_user AS b_user_1 ON dbo.bs_business.b_operater_id = b_user_1.b_id LEFT OUTER JOIN + dbo.b_user AS b_user_2 ON dbo.bs_business.b_sw_id = b_user_2.b_id LEFT OUTER JOIN + dbo.b_user AS b_user_3 ON dbo.bs_business.b_doc_id = b_user_3.b_id LEFT OUTER JOIN + dbo.b_user ON dbo.bs_business.b_sales_id = dbo.b_user.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.bs_business.b_truck_id = dbo.b_othercompany.b_id LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_6 ON dbo.bs_business.b_warehouse_id = b_othercompany_6.b_id LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_5 ON dbo.bs_business.b_dcdw_id = b_othercompany_5.b_id LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_4 ON dbo.bs_business.b_bgcompany_id = b_othercompany_4.b_id LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_2 ON dbo.bs_business.b_shipcompany_id = b_othercompany_2.b_id LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_3 ON dbo.bs_business.b_customer_id = b_othercompany_3.b_id'; + + IF OBJECT_ID(N'dbo.v_bs_business_container', N'V') IS NOT NULL + DROP VIEW dbo.[v_bs_business_container]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_bs_business_container] AS SELECT dbo.bs_business_container.subid, dbo.bs_business_container.father, dbo.bs_business_container.mx_xh, dbo.bs_business_container.mx_con_no, dbo.bs_business_container.mx_hstype_id, + dbo.bs_business_container.mx_sealno, dbo.bs_business_container.mx_con_size, dbo.bs_business_container.mx_con_gw, dbo.bs_business_container.mx_con_nw, + dbo.bs_business_container.mx_con_cartons, dbo.bs_business_container.mx_con_vol, dbo.bs_business_container.mx_truck_id, dbo.bs_business_container.mx_truckno, + dbo.bs_business_container.mx_drive, dbo.bs_business_container.mx_drivephone, dbo.bs_business_container.mx_txplace, dbo.bs_business_container.mx_txmemo, + dbo.bs_business_container.mx_txdate, dbo.bs_business_container.mx_zxdate, dbo.bs_business_container.mx_zxplace, dbo.bs_business_container.mx_zxmemo, + dbo.bs_business_container.mx_date1, dbo.bs_business_container.mx_date2, dbo.bs_business_container.mx_date3, dbo.bs_business_container.mx_date4, dbo.bs_business_container.mx_date5, + dbo.bs_business_container.mx_date6, dbo.bs_business_container.mx_bz1, dbo.bs_business_container.mx_bz2, dbo.bs_business_container.mx_bz3, dbo.bs_business_container.mx_bz4, + dbo.bs_business_container.mx_bz5, dbo.bs_business_container.mx_bz6, dbo.bs_business_container.mx_bz7, dbo.bs_business_container.mx_bz8, dbo.bs_business_container.mx_vgm, + dbo.bs_business_container.mx_updateuser_id, dbo.bs_business_container.mx_updatedatetime, dbo.bs_business_container.mx_inputdatetime, dbo.bs_business_container.mx_inputuser_id, + dbo.bs_business_container.mx_con_type, dbo.bs_business_container.mx_vgm_cztype, dbo.bs_business_container.mx_vgm_czdate, dbo.bs_business_container.mx_truck_name, + dbo.bs_business_container.mx_memo8, dbo.bs_business.b_ywno, dbo.bs_business.b_drno, dbo.bs_business.b_shipingdate, dbo.bs_business.b_customer_id, + dbo.b_othercompany.b_name AS v_customer_company, dbo.bs_business.b_namegoods, dbo.bs_business.b_vessel, dbo.bs_business.b_voy, dbo.bs_business.b_blno, + dbo.bs_business.b_sales_id, dbo.b_user.b_name AS v_sales_name +FROM dbo.bs_business_container LEFT OUTER JOIN + dbo.bs_business ON dbo.bs_business_container.father = dbo.bs_business.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.bs_business.b_customer_id = dbo.b_othercompany.b_id LEFT OUTER JOIN + dbo.b_user ON dbo.bs_business.b_sales_id = dbo.b_user.b_id'; + + IF OBJECT_ID(N'dbo.v_bs_business_container_notpx', N'V') IS NOT NULL + DROP VIEW dbo.[v_bs_business_container_notpx]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_bs_business_container_notpx] AS SELECT dbo.bs_business_container.father, dbo.bs_business_container.mx_con_no, dbo.bs_business_container.mx_sealno, dbo.bs_business_container.mx_con_gw, + dbo.bs_business_container.mx_con_cartons, dbo.bs_business_container.mx_con_vol, a.mx_con_gw AS v_px_gw, a.mx_con_cartons AS v_px_cartons, a.mx_con_vol AS v_px_vol, + ISNULL(dbo.bs_business_container.mx_con_gw, 0) - ISNULL(a.mx_con_gw, 0) AS v_notpx_gw, ISNULL(dbo.bs_business_container.mx_con_cartons, 0) - ISNULL(a.mx_con_cartons, 0) + AS v_notpx_cartons, ISNULL(dbo.bs_business_container.mx_con_vol, 0) - ISNULL(a.mx_con_vol, 0) AS v_notpx_vol, dbo.bs_business_container.subid, dbo.bs_business.b_namegoods, + dbo.bs_business_container.mx_con_type +FROM dbo.bs_business_container LEFT OUTER JOIN + dbo.bs_business ON dbo.bs_business_container.father = dbo.bs_business.b_id LEFT OUTER JOIN + (SELECT father, mx_con_no, SUM(mx_con_gw) AS mx_con_gw, SUM(mx_con_cartons) AS mx_con_cartons, SUM(mx_con_vol) AS mx_con_vol + FROM dbo.bs_business_hdbl_sub + GROUP BY father, mx_con_no) AS a ON dbo.bs_business_container.mx_con_no = a.mx_con_no AND dbo.bs_business_container.father = a.father'; + + IF OBJECT_ID(N'dbo.v_bs_business_cw', N'V') IS NOT NULL + DROP VIEW dbo.[v_bs_business_cw]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_bs_business_cw] AS SELECT subid, subxh, father, mx_bid, mx_level, mx_xh, mx_dw_id, mx_dw_name, mx_direction, mx_feetype_id, mx_feetype_name, mx_moneytype_id, mx_hstype_id, mx_price, mx_qty, mx_amount, + mx_amount_rmb, mx_exrate, mx_log_flag, mx_tax, mx_invoicenotax, mx_invoicetax, mx_sh_check, mx_sh_datetime, mx_shman_id, mx_cwgz_check, mx_cwgz_datetime, mx_cwgzman_id, + mx_bill_id, mx_bill_ywno, mx_bill_updatedatetime, mx_bill_updateuser_id, mx_bill_state, mx_bill_totalamount, mx_bill_totalamount_not, mx_invoice_id, mx_invoice_ywno, + mx_invoice_updatedatetime, mx_invoice_updateuser_id, mx_invoice_state, mx_invoice_totalamount, mx_invoice_totalamount_not, mx_sfd_id, mx_sfd_ywno, mx_sfd_updatedatetime, + mx_sfd_updateuser_id, mx_sfd_state, mx_sfd_totalamount, mx_sfd_totalamount_not, mx_mycompany_id, mx_inputuser_id, mx_inputdatetime, mx_updateuser_id, mx_updatedatetime, + mx_memo1, mx_memo2, mx_memo3, mx_memo4, mx_memo5, mx_varchar_1, mx_varchar_2, mx_varchar_3, mx_varchar_4, mx_varchar_5, mx_con_no, mx_qty_type +FROM dbo.bs_business_cw'; + + IF OBJECT_ID(N'dbo.v_bs_business_cw_yf', N'V') IS NOT NULL + DROP VIEW dbo.[v_bs_business_cw_yf]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_bs_business_cw_yf] AS SELECT subid, father, mx_xh, mx_dw_id, mx_direction, mx_feetype_id, ISNULL(mx_amount, 0) AS mx_amount, mx_price, mx_qty, mx_level, mx_moneytype_id, mx_hstype_id, mx_varchar_5, mx_exrate, + mx_tax, mx_inputdatetime, mx_inputuser_id, ISNULL(mx_amount_rmb, 0) AS mx_amount_rmb, mx_log_flag, mx_sh_check, mx_sh_datetime, mx_cwgz_check, mx_cwgz_datetime, mx_bill_id, + mx_bill_ywno, mx_bill_updatedatetime, mx_bill_updateuser_id, mx_bill_state, mx_bill_totalamount, mx_bill_totalamount_not, mx_invoice_id, mx_invoice_ywno, mx_invoice_updatedatetime, + mx_invoice_updateuser_id, mx_invoice_state, mx_invoice_totalamount, mx_invoice_totalamount_not, mx_sfd_id, mx_sfd_ywno, mx_sfd_updatedatetime, mx_sfd_updateuser_id, mx_sfd_state, + ISNULL(mx_sfd_totalamount, 0) AS mx_sfd_totalamount, mx_mycompany_id, ISNULL(mx_sfd_totalamount_not, 0) AS mx_sfd_totalamount_not, mx_updateuser_id, mx_updatedatetime, + mx_cwgzman_id, subxh, mx_shman_id, mx_con_no, mx_qty_type, mx_bid, mx_dw_name, mx_feetype_name, mx_invoicenotax, mx_invoicetax, mx_memo1 +FROM dbo.bs_business_cw +WHERE (mx_direction = ''应付'')'; + + IF OBJECT_ID(N'dbo.v_bs_business_cw_ys', N'V') IS NOT NULL + DROP VIEW dbo.[v_bs_business_cw_ys]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_bs_business_cw_ys] AS SELECT subid, father, mx_xh, mx_dw_id, mx_direction, mx_feetype_id, ISNULL(mx_amount, 0) AS mx_amount, mx_price, mx_qty, mx_level, mx_moneytype_id, mx_hstype_id, mx_exrate, mx_tax, + mx_inputdatetime, mx_inputuser_id, ISNULL(mx_amount_rmb, 0) AS mx_amount_rmb, mx_log_flag, mx_sh_check, mx_sh_datetime, mx_cwgz_check, mx_cwgz_datetime, mx_bill_id, + mx_bill_updatedatetime, mx_bill_updateuser_id, mx_bill_state, mx_bill_totalamount, mx_bill_totalamount_not, mx_invoice_id, mx_invoice_ywno, mx_invoice_updatedatetime, + mx_invoice_updateuser_id, mx_invoice_state, mx_invoice_totalamount, mx_invoice_totalamount_not, mx_sfd_id, mx_sfd_ywno, mx_sfd_updatedatetime, mx_sfd_updateuser_id, mx_sfd_state, + ISNULL(mx_sfd_totalamount, 0) AS mx_sfd_totalamount, mx_mycompany_id, ISNULL(mx_sfd_totalamount_not, 0) AS mx_sfd_totalamount_not, mx_updateuser_id, mx_updatedatetime, + mx_cwgzman_id, subxh, mx_shman_id, mx_con_no, mx_qty_type, mx_bid, mx_dw_name, mx_feetype_name, mx_bill_ywno, mx_invoicenotax, mx_invoicetax, mx_memo1 +FROM dbo.bs_business_cw +WHERE (mx_direction = ''应收'')'; + + IF OBJECT_ID(N'dbo.v_bs_business_hdblno', N'V') IS NOT NULL + DROP VIEW dbo.[v_bs_business_hdblno]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_bs_business_hdblno] AS SELECT subid, father, mx_xh, mx_blno, mx_shippermemo, mx_consigneememo, mx_notifymemo, mx_agentcompanyMemo, mx_freightpayment, mx_namegoods, mx_ctns, mx_ctns_unit_id, mx_gw, + mx_vol, mx_bz1, mx_bz2, mx_bz3, mx_bz4, mx_bz5, mx_transterm, mx_drno, mx_aimport_id, mx_shipmark, mx_loadport_id, mx_transport_id, mx_inputuser_id, mx_inputdatetime, + mx_updateuser_id, mx_updatedatetime +FROM dbo.bs_business_hdbl'; + + IF OBJECT_ID(N'dbo.v_bs_business_hdblno_sub', N'V') IS NOT NULL + DROP VIEW dbo.[v_bs_business_hdblno_sub]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_bs_business_hdblno_sub] AS SELECT subid, father, mx_xh, mx_con_no, mx_blno, mx_con_cartons, mx_con_gw, mx_con_nw, mx_con_vol, mx_bz1, mx_bz2, mx_bz3, mx_bz4, mx_bz5, mx_linkfd_id, mx_inputuser_id, + mx_inputdatetime, mx_updateuser_id, mx_updatedatetime +FROM dbo.bs_business_hdbl_sub'; + + IF OBJECT_ID(N'dbo.v_bs_business_transport', N'V') IS NOT NULL + DROP VIEW dbo.[v_bs_business_transport]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_bs_business_transport] AS SELECT dbo.bs_business_transport.subid, dbo.bs_business_transport.father, dbo.bs_business_transport.mx_xh, dbo.bs_business_transport.mx_processtype, dbo.bs_business_transport.mx_transtype, + dbo.bs_business_transport.mx_loadport, dbo.bs_business_transport.mx_aimport, dbo.bs_business_transport.mx_ETD, dbo.bs_business_transport.mx_ETA, + dbo.bs_business_transport.mx_truck_id, dbo.bs_business_transport.mx_truckno, dbo.bs_business_transport.mx_pno, dbo.bs_business_transport.mx_bz, dbo.bs_business_transport.mx_finish, + dbo.bs_business_transport.mx_finishdate, dbo.b_othercompany.b_name AS v_truck_name, dbo.bs_business_transport.mx_keyid, dbo.bs_business_transport.mx_user_id, + dbo.b_user.b_name AS v_user_name, dbo.bs_business_transport.mx_startdate, dbo.bs_business_transport.mx_source_type, dbo.bs_business_transport.mx_bz1, + dbo.bs_business_transport.mx_bz2, dbo.bs_business_transport.mx_bz3, dbo.bs_business_transport.mx_attach_bz1, dbo.bs_business_transport.mx_attach_bz2, + dbo.bs_business_transport.mx_attach_bz3, dbo.bs_business_transport.mx_packdate, dbo.bs_business_transport.mx_packplace, dbo.bs_business_transport.mx_txdate, + dbo.bs_business_transport.mx_txplace, dbo.bs_business_transport.mx_hxdate, dbo.bs_business_transport.mx_hxplace, dbo.bs_business_transport.mx_conno, '''' AS mx_attach +FROM dbo.bs_business_transport LEFT OUTER JOIN + dbo.b_user ON dbo.bs_business_transport.mx_user_id = dbo.b_user.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.bs_business_transport.mx_truck_id = dbo.b_othercompany.b_id +WHERE (dbo.bs_business_transport.mx_source_type = ''bs_business'')'; + + IF OBJECT_ID(N'dbo.v_cw_account', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_account]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_account] AS SELECT dbo.cw_account.b_id, dbo.cw_account.b_name, dbo.cw_account.b_type, dbo.cw_account.b_bank, dbo.cw_account.b_account, dbo.cw_account.b_amount_start, dbo.cw_account.b_bz, + dbo.cw_account.b_date, ISNULL(dbo.cw_account.b_amount_start, 0) + ISNULL(a.sk, 0) - ISNULL(a.fk, 0) AS v_yuamount, ISNULL(dbo.cw_account.b_amount_start, 0) + ISNULL(a.sk, 0) - ISNULL(a.fk, + 0) AS b_amount, CASE WHEN ISNULL(cw_account.b_bank, '''') = '''' THEN '''' ELSE ''银行名称:'' + ISNULL(cw_account.b_bank, '''') + '' '' END + CASE WHEN ISNULL(cw_account.b_account, '''') + = '''' THEN '''' ELSE ''银行账号:'' + ISNULL(cw_account.b_account, '''') END AS v_bankaccount, dbo.b_user.b_name AS v_ownername, dbo.cw_account.b_inputdatetime, dbo.cw_account.b_state, + dbo.cw_account.b_owner_id, dbo.cw_account.b_mycompany_id, dbo.b_othercompany.b_name AS v_company_name, dbo.cw_account.b_truckno, dbo.cw_account.b_inputuser_id, + dbo.cw_account.b_updatedatetime, dbo.cw_account.b_updateuser_id +FROM dbo.cw_account LEFT OUTER JOIN + dbo.b_othercompany ON dbo.cw_account.b_mycompany_id = dbo.b_othercompany.b_id LEFT OUTER JOIN + dbo.b_user ON dbo.cw_account.b_owner_id = dbo.b_user.b_id LEFT OUTER JOIN + (SELECT b_account_id, SUM(b_sk) AS sk, SUM(b_fk) AS fk + FROM (SELECT b_id, b_account_id, CASE b_type WHEN ''收入'' THEN b_amount ELSE 0 END AS b_sk, CASE b_type WHEN ''支出'' THEN b_amount ELSE 0 END AS b_fk + FROM dbo.cw_daily + UNION + SELECT b_id, b_account_id, CASE WHEN b_direction = ''实收'' THEN b_amount ELSE 0 END AS b_sk, CASE WHEN b_direction = ''实付'' THEN b_amount ELSE 0 END AS b_fk + FROM dbo.cw_sfd) AS a_1 + GROUP BY b_account_id) AS a ON a.b_account_id = dbo.cw_account.b_id'; + + IF OBJECT_ID(N'dbo.v_cw_daily', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_daily]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_daily] AS SELECT dbo.cw_daily.b_date, dbo.cw_daily.b_desc, dbo.cw_daily.b_feetype, dbo.cw_daily.b_bill, dbo.cw_daily.b_owner_id, dbo.cw_daily.b_state, dbo.cw_daily.b_id, dbo.cw_daily.b_amount, + dbo.cw_daily.b_bz1, dbo.cw_daily.b_type, dbo.cw_daily.b_payee_id, b_user_1.b_name AS v_ownername, dbo.cw_daily.b_account_id, dbo.cw_daily.b_inputdatetime, + dbo.cw_account.b_name AS v_account_name, dbo.cw_daily.b_zx, dbo.cw_daily.b_zxuser_id, dbo.cw_daily.b_zxdatetime, dbo.cw_daily.b_dw_id, dbo.b_othercompany.b_name AS v_dw_name, + dbo.cw_account.b_bank AS v_accountbank, dbo.cw_account.b_account AS v_b_account, dbo.cw_daily.b_updatedatetime, dbo.cw_daily.b_updateuser_id, dbo.cw_daily.b_inputuser_id +FROM dbo.cw_daily LEFT OUTER JOIN + dbo.b_othercompany ON dbo.cw_daily.b_dw_id = dbo.b_othercompany.b_id LEFT OUTER JOIN + dbo.cw_account ON dbo.cw_daily.b_account_id = dbo.cw_account.b_id LEFT OUTER JOIN + dbo.b_user AS b_user_1 ON dbo.cw_daily.b_owner_id = b_user_1.b_id'; + + IF OBJECT_ID(N'dbo.v_cw_fee_f', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_fee_f]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_fee_f] AS SELECT dbo.bs_business.b_ywno, dbo.bs_business_cw.subid, dbo.bs_business_cw.subxh, dbo.bs_business_cw.father, dbo.bs_business_cw.mx_xh, dbo.bs_business_cw.mx_dw_id, + dbo.bs_business_cw.mx_dw_name, dbo.bs_business_cw.mx_direction, dbo.bs_business_cw.mx_feetype_id, dbo.bs_business_cw.mx_feetype_name, dbo.bs_business_cw.mx_moneytype_id, + dbo.bs_business_cw.mx_price, dbo.bs_business_cw.mx_qty, dbo.bs_business_cw.mx_amount, dbo.bs_business_cw.mx_sh_check, dbo.bs_business_cw.mx_sh_datetime, + dbo.bs_business_cw.mx_shman_id, dbo.bs_business_cw.mx_bill_ywno, dbo.bs_business_cw.mx_invoice_ywno, dbo.bs_business_cw.mx_invoice_updatedatetime, + dbo.bs_business_cw.mx_invoice_updateuser_id, dbo.bs_business_cw.mx_sfd_id, dbo.bs_business_cw.mx_sfd_ywno, dbo.bs_business_cw.mx_sfd_updatedatetime, + dbo.bs_business_cw.mx_sfd_updateuser_id, ISNULL(dbo.bs_business_cw.mx_sfd_totalamount, 0) AS mx_sfd_totalamount, ISNULL(dbo.bs_business_cw.mx_sfd_totalamount_not, 0) + AS mx_sfd_totalamount_not, dbo.bs_business_cw.mx_mycompany_id, dbo.bs_business.b_vessel, dbo.bs_business.b_voy, dbo.bs_business.b_shipingdate, dbo.bs_business.b_loaddate, + dbo.bs_business_cw.mx_exrate, dbo.bs_business.b_drno, dbo.bs_business.b_blno, dbo.b_othercompany.b_name AS v_customer_company, dbo.bs_business.b_desc_noandseal, + dbo.bs_business.b_orderdate, dbo.bs_business_cw.mx_bill_updatedatetime, dbo.bs_business.b_sales_id, dbo.bs_business.b_sw_id, dbo.bs_business.b_operater_id, + dbo.bs_business.b_loadport, dbo.bs_business.b_aimport, dbo.b_user.b_name AS v_sales_name, b_user_1.b_name AS v_operater_name, dbo.bs_business_cw.mx_amount_rmb, + dbo.bs_business_cw.mx_bill_id, dbo.bs_business_cw.mx_invoice_id, dbo.bs_business_cw.mx_sfd_state, dbo.bs_business_cw.mx_inputuser_id, dbo.bs_business_cw.mx_inputdatetime, + dbo.bs_business_cw.mx_memo1 +FROM dbo.bs_business INNER JOIN + dbo.b_user ON dbo.bs_business.b_sales_id = dbo.b_user.b_id LEFT OUTER JOIN + dbo.b_user AS b_user_1 ON dbo.bs_business.b_operater_id = b_user_1.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.bs_business.b_customer_id = dbo.b_othercompany.b_id RIGHT OUTER JOIN + dbo.bs_business_cw ON dbo.bs_business.b_id = dbo.bs_business_cw.father'; + + IF OBJECT_ID(N'dbo.v_cw_fee_s', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_fee_s]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_fee_s] AS SELECT dbo.bs_business.b_ywno, dbo.bs_business_cw.subid, dbo.bs_business_cw.subxh, dbo.bs_business_cw.father, dbo.bs_business_cw.mx_xh, dbo.bs_business_cw.mx_dw_id, + dbo.bs_business_cw.mx_dw_name, dbo.bs_business_cw.mx_direction, dbo.bs_business_cw.mx_feetype_id, dbo.bs_business_cw.mx_feetype_name, dbo.bs_business_cw.mx_moneytype_id, + dbo.bs_business_cw.mx_price, dbo.bs_business_cw.mx_qty, dbo.bs_business_cw.mx_amount, dbo.bs_business_cw.mx_sh_check, dbo.bs_business_cw.mx_sh_datetime, + dbo.bs_business_cw.mx_shman_id, dbo.bs_business_cw.mx_bill_ywno, dbo.bs_business_cw.mx_invoice_ywno, dbo.bs_business_cw.mx_invoice_updatedatetime, + dbo.bs_business_cw.mx_invoice_updateuser_id, dbo.bs_business_cw.mx_sfd_id, dbo.bs_business_cw.mx_sfd_ywno, dbo.bs_business_cw.mx_sfd_updatedatetime, + dbo.bs_business_cw.mx_sfd_updateuser_id, ISNULL(dbo.bs_business_cw.mx_sfd_totalamount, 0) AS mx_sfd_totalamount, ISNULL(dbo.bs_business_cw.mx_sfd_totalamount_not, 0) + AS mx_sfd_totalamount_not, dbo.bs_business_cw.mx_mycompany_id, dbo.bs_business.b_vessel, dbo.bs_business.b_voy, dbo.bs_business.b_shipingdate, dbo.bs_business.b_loaddate, + dbo.bs_business_cw.mx_exrate, dbo.bs_business.b_drno, dbo.bs_business.b_blno, dbo.b_othercompany.b_name AS v_customer_company, dbo.bs_business.b_desc_noandseal, + dbo.bs_business.b_orderdate, dbo.bs_business_cw.mx_bill_updatedatetime, dbo.bs_business.b_sales_id, dbo.bs_business.b_sw_id, dbo.bs_business.b_operater_id, + dbo.bs_business.b_loadport, dbo.bs_business.b_aimport, dbo.b_user.b_name AS v_sales_name, b_user_1.b_name AS v_operater_name, dbo.bs_business_cw.mx_amount_rmb, + dbo.bs_business_cw.mx_bill_id, dbo.bs_business_cw.mx_invoice_id, dbo.bs_business_cw.mx_sfd_state, dbo.bs_business_cw.mx_inputuser_id, dbo.bs_business_cw.mx_inputdatetime, + dbo.bs_business_cw.mx_memo1 +FROM dbo.bs_business INNER JOIN + dbo.b_user ON dbo.bs_business.b_sales_id = dbo.b_user.b_id LEFT OUTER JOIN + dbo.b_user AS b_user_1 ON dbo.bs_business.b_operater_id = b_user_1.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.bs_business.b_customer_id = dbo.b_othercompany.b_id RIGHT OUTER JOIN + dbo.bs_business_cw ON dbo.bs_business.b_id = dbo.bs_business_cw.father'; + + IF OBJECT_ID(N'dbo.v_cw_fkd', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_fkd]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_fkd] AS SELECT dbo.cw_sfd.b_id, dbo.cw_sfd.b_date, dbo.cw_sfd.b_money_id, dbo.cw_sfd.b_exrate, dbo.b_othercompany.b_name AS v_dw_name, dbo.cw_sfd.b_state, dbo.cw_sfd.b_owner_id, dbo.cw_sfd.b_bz, + dbo.cw_sfd.b_inputuser_id, dbo.cw_sfd.b_bankname, dbo.cw_sfd.b_bankaccount, dbo.cw_sfd.b_mycompany_id, b_othercompany_1.b_name AS v_mycompanyname, dbo.cw_sfd.b_amount_other, + dbo.cw_sfd.b_inputdatetime, dbo.cw_sfd.b_amount, dbo.cw_sfd.b_amount_hx, dbo.cw_sfd.b_amount_nothx, dbo.cw_sfd.b_sh, dbo.cw_sfd.b_updateuser_id, dbo.cw_sfd.b_updatedatetime, + dbo.cw_sfd.b_amount_sj, dbo.cw_sfd.b_dw_id, dbo.cw_sfd.b_direction, dbo.cw_sfd.b_writeoff, dbo.cw_sfd.b_writeoff_id, dbo.cw_sfd.b_writeoffdatetime, dbo.cw_sfd.b_shdatetime, dbo.cw_sfd.b_sh_id, dbo.cw_sfd.b_ywno, dbo.cw_sfd.b_document_type, dbo.b_user.b_name AS v_ownername, + dbo.cw_sfd.b_account_id +FROM dbo.cw_sfd INNER JOIN + dbo.b_user ON dbo.cw_sfd.b_owner_id = dbo.b_user.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.cw_sfd.b_dw_id = dbo.b_othercompany.b_id LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_1 ON dbo.cw_sfd.b_mycompany_id = b_othercompany_1.b_id +WHERE (dbo.cw_sfd.b_direction = ''实付'')'; + + IF OBJECT_ID(N'dbo.v_cw_fkdsub', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_fkdsub]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_fkdsub] AS SELECT dbo.cw_sfdsub.subid, dbo.cw_sfdsub.father, dbo.cw_sfdsub.mx_xh, dbo.cw_sfdsub.mx_fee_id, dbo.cw_sfdsub.mx_fee_money_id, dbo.cw_sfdsub.mx_fee_amount, dbo.cw_sfdsub.mx_sf_money_id, + dbo.cw_sfdsub.mx_sf_amount, dbo.cw_sfdsub.mx_exrate, dbo.cw_sfdsub.mx_bz, dbo.bs_business_cw.mx_dw_name, dbo.bs_business_cw.mx_direction, dbo.bs_business_cw.mx_feetype_name, + dbo.bs_business_cw.mx_amount, dbo.bs_business_cw.mx_invoice_ywno, dbo.bs_business.b_blno, dbo.bs_business.b_loaddate, dbo.bs_business.b_shipingdate, dbo.bs_business.b_id, + dbo.bs_business_cw.mx_invoice_updatedatetime, dbo.bs_business.b_ywno, dbo.bs_business_cw.mx_sfd_totalamount_not, dbo.bs_business_cw.mx_bill_ywno +FROM dbo.cw_sfdsub LEFT OUTER JOIN + dbo.bs_business_cw ON dbo.cw_sfdsub.mx_fee_id = dbo.bs_business_cw.subid LEFT OUTER JOIN + dbo.bs_business ON dbo.bs_business_cw.father = dbo.bs_business.b_id'; + + IF OBJECT_ID(N'dbo.v_cw_skd', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_skd]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_skd] AS SELECT dbo.cw_sfd.b_id, dbo.cw_sfd.b_date, dbo.cw_sfd.b_money_id, dbo.cw_sfd.b_exrate, dbo.b_othercompany.b_name AS v_dw_name, dbo.cw_sfd.b_state, dbo.cw_sfd.b_owner_id, dbo.cw_sfd.b_bz, + dbo.cw_sfd.b_inputuser_id, dbo.cw_sfd.b_bankname, dbo.cw_sfd.b_bankaccount, dbo.cw_sfd.b_mycompany_id, b_othercompany_1.b_name AS v_mycompanyname, dbo.cw_sfd.b_amount_other, + dbo.cw_sfd.b_inputdatetime, dbo.cw_sfd.b_amount, dbo.cw_sfd.b_amount_hx, dbo.cw_sfd.b_amount_nothx, dbo.cw_sfd.b_sh, dbo.cw_sfd.b_updateuser_id, dbo.cw_sfd.b_updatedatetime, + dbo.cw_sfd.b_amount_sj, dbo.cw_sfd.b_dw_id, dbo.cw_sfd.b_direction, dbo.cw_sfd.b_writeoff, dbo.cw_sfd.b_writeoff_id, dbo.cw_sfd.b_writeoffdatetime, dbo.cw_sfd.b_shdatetime, dbo.cw_sfd.b_sh_id, dbo.cw_sfd.b_ywno, dbo.cw_sfd.b_document_type, dbo.b_user.b_name AS v_ownername, + dbo.cw_sfd.b_account_id +FROM dbo.cw_sfd INNER JOIN + dbo.b_user ON dbo.cw_sfd.b_owner_id = dbo.b_user.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.cw_sfd.b_dw_id = dbo.b_othercompany.b_id LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_1 ON dbo.cw_sfd.b_mycompany_id = b_othercompany_1.b_id +WHERE (dbo.cw_sfd.b_direction = ''实收'')'; + + IF OBJECT_ID(N'dbo.v_cw_skdsub', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_skdsub]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_skdsub] AS SELECT dbo.cw_sfdsub.subid, dbo.cw_sfdsub.father, dbo.cw_sfdsub.mx_xh, dbo.cw_sfdsub.mx_fee_id, dbo.cw_sfdsub.mx_fee_money_id, dbo.cw_sfdsub.mx_fee_amount, dbo.cw_sfdsub.mx_sf_money_id, + dbo.cw_sfdsub.mx_sf_amount, dbo.cw_sfdsub.mx_exrate, dbo.cw_sfdsub.mx_bz, dbo.bs_business_cw.mx_dw_name, dbo.bs_business_cw.mx_direction, dbo.bs_business_cw.mx_feetype_name, + dbo.bs_business_cw.mx_amount, dbo.bs_business_cw.mx_invoice_ywno, dbo.bs_business.b_blno, dbo.bs_business.b_loaddate, dbo.bs_business.b_shipingdate, dbo.bs_business.b_id, + dbo.bs_business_cw.mx_invoice_updatedatetime, dbo.bs_business.b_ywno, dbo.bs_business_cw.mx_sfd_totalamount_not, dbo.bs_business_cw.mx_bill_ywno +FROM dbo.cw_sfdsub LEFT OUTER JOIN + dbo.bs_business_cw ON dbo.cw_sfdsub.mx_fee_id = dbo.bs_business_cw.subid LEFT OUTER JOIN + dbo.bs_business ON dbo.bs_business_cw.father = dbo.bs_business.b_id'; + + IF OBJECT_ID(N'dbo.v_cw_yfbill', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_yfbill]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_yfbill] AS SELECT dbo.cw_bill.b_id, dbo.cw_bill.b_ywno, dbo.cw_bill.b_direction, dbo.cw_bill.b_dw_id, dbo.cw_bill.b_mycompany_id, dbo.cw_bill.b_amount, dbo.cw_bill.b_money_id, dbo.cw_bill.b_account_id, + dbo.cw_bill.b_bankname, dbo.cw_bill.b_bankaccount, dbo.cw_bill.b_zl, dbo.cw_bill.b_plandate, dbo.cw_bill.b_state, dbo.cw_bill.b_bz, dbo.cw_bill.b_owner_id, dbo.cw_bill.b_inputuser_id, + dbo.cw_bill.b_inputdatetime, dbo.cw_bill.b_updateuser_id, dbo.cw_bill.b_updatedatetime, dbo.cw_bill.b_writeoff, dbo.cw_bill.b_writeoff_id, dbo.cw_bill.b_writeoffdatetime, dbo.b_othercompany.b_name AS v_dw_name, b_othercompany_1.b_name AS v_mycompanyname, dbo.cw_bill.b_date, dbo.cw_bill.b_document_type, dbo.cw_bill.b_dw_bankacount, + dbo.cw_bill.b_dw_invaccount, dbo.cw_bill.b_my_bankacount, dbo.cw_bill.b_my_invaccount +FROM dbo.cw_bill LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_1 ON dbo.cw_bill.b_mycompany_id = b_othercompany_1.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.cw_bill.b_dw_id = dbo.b_othercompany.b_id +WHERE (dbo.cw_bill.b_direction = ''应付'')'; + + IF OBJECT_ID(N'dbo.v_cw_yfbillsub', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_yfbillsub]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_yfbillsub] AS SELECT dbo.cw_billsub.subid, dbo.cw_billsub.father, dbo.cw_billsub.mx_xh, dbo.cw_billsub.mx_fee_id, dbo.cw_billsub.mx_bz, dbo.cw_billsub.mx_fee_money_id, dbo.cw_billsub.mx_fee_amount, + dbo.cw_billsub.mx_bill_amount, dbo.bs_business_cw.mx_feetype_name, dbo.bs_business.b_ywno, dbo.bs_business.b_shipingdate, dbo.bs_business.b_loaddate, dbo.bs_business.b_drno, + dbo.bs_business.b_blno, dbo.bs_business.b_loadport, dbo.bs_business.b_aimport, dbo.bs_business_cw.mx_dw_name, dbo.bs_business_cw.mx_moneytype_id, dbo.bs_business_cw.mx_exrate, + dbo.bs_business_cw.mx_price, dbo.bs_business_cw.mx_qty, dbo.bs_business_cw.mx_amount, dbo.bs_business_cw.mx_amount_rmb, dbo.bs_business_cw.mx_sfd_totalamount, + dbo.bs_business_cw.mx_sfd_totalamount_not, dbo.bs_business_cw.mx_sh_check, dbo.bs_business_cw.mx_sh_datetime, dbo.bs_business_cw.mx_shman_id, dbo.bs_business_cw.mx_bill_ywno, + dbo.bs_business_cw.mx_invoice_ywno, dbo.bs_business_cw.mx_inputuser_id, dbo.bs_business_cw.mx_inputdatetime, dbo.bs_business.b_sales_id, dbo.bs_business.b_operater_id, + dbo.b_user.b_name AS v_sales_name, b_user_1.b_name AS v_operater_name, dbo.bs_business_cw.mx_direction +FROM dbo.bs_business INNER JOIN + dbo.b_user ON dbo.bs_business.b_sales_id = dbo.b_user.b_id RIGHT OUTER JOIN + dbo.b_user AS b_user_1 ON dbo.bs_business.b_operater_id = b_user_1.b_id RIGHT OUTER JOIN + dbo.bs_business_cw ON dbo.bs_business.b_id = dbo.bs_business_cw.father RIGHT OUTER JOIN + dbo.cw_billsub ON dbo.bs_business_cw.subid = dbo.cw_billsub.mx_fee_id'; + + IF OBJECT_ID(N'dbo.v_cw_yfinvoice', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_yfinvoice]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_yfinvoice] AS SELECT dbo.cw_invoice.b_id, dbo.cw_invoice.b_direction, dbo.cw_invoice.b_dw_id, dbo.cw_invoice.b_mycompany_id, dbo.cw_invoice.b_amount, dbo.cw_invoice.b_money_id, + dbo.cw_invoice.b_account_id, dbo.cw_invoice.b_bankname, dbo.b_othercompany.b_name AS v_dw_name, b_othercompany_1.b_name AS v_mycompanyname, dbo.cw_invoice.b_bankaccount, + dbo.cw_invoice.b_owner_id, dbo.cw_invoice.b_state, dbo.cw_invoice.b_tax, dbo.cw_invoice.b_bz, dbo.cw_invoice.b_inputuser_id, dbo.cw_invoice.b_inputdatetime, dbo.cw_invoice.b_ywno, + dbo.cw_invoice.b_updateuser_id, dbo.cw_invoice.b_updatedatetime, dbo.cw_invoice.b_writeoff, dbo.cw_invoice.b_writeoff_id, dbo.cw_invoice.b_writeoffdatetime, dbo.cw_invoice.b_document_type, dbo.cw_invoice.b_date, dbo.cw_invoice.b_dw_bankacount, dbo.cw_invoice.b_dw_invaccount, dbo.cw_invoice.b_my_bankacount, + dbo.cw_invoice.b_my_invaccount, dbo.cw_invoice.b_bz1 +FROM dbo.cw_invoice LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_1 ON dbo.cw_invoice.b_mycompany_id = b_othercompany_1.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.cw_invoice.b_dw_id = dbo.b_othercompany.b_id +WHERE (dbo.cw_invoice.b_direction = ''应付'')'; + + IF OBJECT_ID(N'dbo.v_cw_yfinvoicesub', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_yfinvoicesub]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_yfinvoicesub] AS SELECT dbo.cw_invoicesub.subid, dbo.cw_invoicesub.father, dbo.cw_invoicesub.mx_xh, dbo.cw_invoicesub.mx_fee_id, dbo.cw_invoicesub.mx_bz, dbo.cw_invoicesub.mx_fee_money_id, + dbo.cw_invoicesub.mx_fee_amount, dbo.bs_business_cw.mx_feetype_name, dbo.bs_business.b_ywno, dbo.bs_business.b_shipingdate, dbo.bs_business.b_loaddate, dbo.bs_business.b_drno, + dbo.bs_business.b_blno, dbo.bs_business.b_loadport, dbo.bs_business.b_aimport, dbo.bs_business_cw.mx_dw_name, dbo.bs_business_cw.mx_moneytype_id, dbo.bs_business_cw.mx_exrate, + dbo.bs_business_cw.mx_price, dbo.bs_business_cw.mx_qty, dbo.bs_business_cw.mx_amount, dbo.bs_business_cw.mx_amount_rmb, dbo.bs_business_cw.mx_sfd_totalamount, + dbo.bs_business_cw.mx_sfd_totalamount_not, dbo.bs_business_cw.mx_sh_check, dbo.bs_business_cw.mx_sh_datetime, dbo.bs_business_cw.mx_shman_id, dbo.bs_business_cw.mx_bill_ywno, + dbo.bs_business_cw.mx_invoice_ywno, dbo.bs_business_cw.mx_inputuser_id, dbo.bs_business_cw.mx_inputdatetime, dbo.bs_business.b_sales_id, dbo.bs_business.b_operater_id, + dbo.b_user.b_name AS v_sales_name, b_user_1.b_name AS v_operater_name, dbo.cw_invoicesub.mx_invoice_amount +FROM dbo.bs_business INNER JOIN + dbo.b_user ON dbo.bs_business.b_sales_id = dbo.b_user.b_id RIGHT OUTER JOIN + dbo.b_user AS b_user_1 ON dbo.bs_business.b_operater_id = b_user_1.b_id RIGHT OUTER JOIN + dbo.bs_business_cw ON dbo.bs_business.b_id = dbo.bs_business_cw.father RIGHT OUTER JOIN + dbo.cw_invoicesub ON dbo.bs_business_cw.subid = dbo.cw_invoicesub.mx_fee_id'; + + IF OBJECT_ID(N'dbo.v_cw_ysbill', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_ysbill]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_ysbill] AS SELECT dbo.cw_bill.b_id, dbo.cw_bill.b_ywno, dbo.cw_bill.b_direction, dbo.cw_bill.b_dw_id, dbo.cw_bill.b_mycompany_id, dbo.cw_bill.b_amount, dbo.cw_bill.b_money_id, dbo.cw_bill.b_account_id, + dbo.cw_bill.b_bankname, dbo.cw_bill.b_bankaccount, dbo.cw_bill.b_zl, dbo.cw_bill.b_plandate, dbo.cw_bill.b_state, dbo.cw_bill.b_bz, dbo.cw_bill.b_owner_id, dbo.cw_bill.b_inputuser_id, + dbo.cw_bill.b_inputdatetime, dbo.cw_bill.b_updateuser_id, dbo.cw_bill.b_updatedatetime, dbo.cw_bill.b_writeoff, dbo.cw_bill.b_writeoff_id, dbo.cw_bill.b_writeoffdatetime, dbo.b_othercompany.b_name AS v_dw_name, b_othercompany_1.b_name AS v_mycompanyname, dbo.cw_bill.b_date, dbo.cw_bill.b_document_type, dbo.cw_bill.b_dw_bankacount, + dbo.cw_bill.b_dw_invaccount, dbo.cw_bill.b_my_bankacount, dbo.cw_bill.b_my_invaccount +FROM dbo.cw_bill LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_1 ON dbo.cw_bill.b_mycompany_id = b_othercompany_1.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.cw_bill.b_dw_id = dbo.b_othercompany.b_id +WHERE (dbo.cw_bill.b_direction = ''应收'')'; + + IF OBJECT_ID(N'dbo.v_cw_ysbillsub', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_ysbillsub]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_ysbillsub] AS SELECT dbo.cw_billsub.subid, dbo.cw_billsub.father, dbo.cw_billsub.mx_xh, dbo.cw_billsub.mx_fee_id, dbo.cw_billsub.mx_bz, dbo.cw_billsub.mx_fee_money_id, dbo.cw_billsub.mx_fee_amount, + dbo.cw_billsub.mx_bill_amount, dbo.bs_business_cw.mx_feetype_name, dbo.bs_business.b_ywno, dbo.bs_business.b_shipingdate, dbo.bs_business.b_loaddate, dbo.bs_business.b_drno, + dbo.bs_business.b_blno, dbo.bs_business.b_loadport, dbo.bs_business.b_aimport, dbo.bs_business_cw.mx_dw_name, dbo.bs_business_cw.mx_moneytype_id, dbo.bs_business_cw.mx_exrate, + dbo.bs_business_cw.mx_price, dbo.bs_business_cw.mx_qty, dbo.bs_business_cw.mx_amount, dbo.bs_business_cw.mx_amount_rmb, dbo.bs_business_cw.mx_sfd_totalamount, + dbo.bs_business_cw.mx_sfd_totalamount_not, dbo.bs_business_cw.mx_sh_check, dbo.bs_business_cw.mx_sh_datetime, dbo.bs_business_cw.mx_shman_id, dbo.bs_business_cw.mx_bill_ywno, + dbo.bs_business_cw.mx_invoice_ywno, dbo.bs_business_cw.mx_inputuser_id, dbo.bs_business_cw.mx_inputdatetime, dbo.bs_business.b_sales_id, dbo.bs_business.b_operater_id, + dbo.b_user.b_name AS v_sales_name, b_user_1.b_name AS v_operater_name, dbo.bs_business_cw.mx_direction +FROM dbo.bs_business INNER JOIN + dbo.b_user ON dbo.bs_business.b_sales_id = dbo.b_user.b_id RIGHT OUTER JOIN + dbo.b_user AS b_user_1 ON dbo.bs_business.b_operater_id = b_user_1.b_id RIGHT OUTER JOIN + dbo.bs_business_cw ON dbo.bs_business.b_id = dbo.bs_business_cw.father RIGHT OUTER JOIN + dbo.cw_billsub ON dbo.bs_business_cw.subid = dbo.cw_billsub.mx_fee_id'; + + IF OBJECT_ID(N'dbo.v_cw_ysinvoice', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_ysinvoice]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_ysinvoice] AS SELECT dbo.cw_invoice.b_id, dbo.cw_invoice.b_direction, dbo.cw_invoice.b_dw_id, dbo.cw_invoice.b_mycompany_id, dbo.cw_invoice.b_amount, dbo.cw_invoice.b_money_id, + dbo.cw_invoice.b_account_id, dbo.cw_invoice.b_bankname, dbo.b_othercompany.b_name AS v_dw_name, b_othercompany_1.b_name AS v_mycompanyname, dbo.cw_invoice.b_bankaccount, + dbo.cw_invoice.b_owner_id, dbo.cw_invoice.b_state, dbo.cw_invoice.b_tax, dbo.cw_invoice.b_bz, dbo.cw_invoice.b_inputuser_id, dbo.cw_invoice.b_inputdatetime, dbo.cw_invoice.b_ywno, + dbo.cw_invoice.b_updateuser_id, dbo.cw_invoice.b_updatedatetime, dbo.cw_invoice.b_writeoff, dbo.cw_invoice.b_writeoff_id, dbo.cw_invoice.b_writeoffdatetime, dbo.cw_invoice.b_document_type, dbo.cw_invoice.b_date, dbo.cw_invoice.b_dw_bankacount, dbo.cw_invoice.b_dw_invaccount, dbo.cw_invoice.b_my_bankacount, + dbo.cw_invoice.b_my_invaccount, dbo.cw_invoice.b_bz1 +FROM dbo.cw_invoice LEFT OUTER JOIN + dbo.b_othercompany AS b_othercompany_1 ON dbo.cw_invoice.b_mycompany_id = b_othercompany_1.b_id LEFT OUTER JOIN + dbo.b_othercompany ON dbo.cw_invoice.b_dw_id = dbo.b_othercompany.b_id +WHERE (dbo.cw_invoice.b_direction = ''应收'')'; + + IF OBJECT_ID(N'dbo.v_cw_ysinvoicesub', N'V') IS NOT NULL + DROP VIEW dbo.[v_cw_ysinvoicesub]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_cw_ysinvoicesub] AS SELECT dbo.cw_invoicesub.subid, dbo.cw_invoicesub.father, dbo.cw_invoicesub.mx_xh, dbo.cw_invoicesub.mx_fee_id, dbo.cw_invoicesub.mx_bz, dbo.cw_invoicesub.mx_fee_money_id, + dbo.cw_invoicesub.mx_fee_amount, dbo.bs_business_cw.mx_feetype_name, dbo.bs_business.b_ywno, dbo.bs_business.b_shipingdate, dbo.bs_business.b_loaddate, dbo.bs_business.b_drno, + dbo.bs_business.b_blno, dbo.bs_business.b_loadport, dbo.bs_business.b_aimport, dbo.bs_business_cw.mx_dw_name, dbo.bs_business_cw.mx_moneytype_id, dbo.bs_business_cw.mx_exrate, + dbo.bs_business_cw.mx_price, dbo.bs_business_cw.mx_qty, dbo.bs_business_cw.mx_amount, dbo.bs_business_cw.mx_amount_rmb, dbo.bs_business_cw.mx_sfd_totalamount, + dbo.bs_business_cw.mx_sfd_totalamount_not, dbo.bs_business_cw.mx_sh_check, dbo.bs_business_cw.mx_sh_datetime, dbo.bs_business_cw.mx_shman_id, dbo.bs_business_cw.mx_bill_ywno, + dbo.bs_business_cw.mx_invoice_ywno, dbo.bs_business_cw.mx_inputuser_id, dbo.bs_business_cw.mx_inputdatetime, dbo.bs_business.b_sales_id, dbo.bs_business.b_operater_id, + dbo.b_user.b_name AS v_sales_name, b_user_1.b_name AS v_operater_name, dbo.cw_invoicesub.mx_invoice_amount +FROM dbo.bs_business INNER JOIN + dbo.b_user ON dbo.bs_business.b_sales_id = dbo.b_user.b_id RIGHT OUTER JOIN + dbo.b_user AS b_user_1 ON dbo.bs_business.b_operater_id = b_user_1.b_id RIGHT OUTER JOIN + dbo.bs_business_cw ON dbo.bs_business.b_id = dbo.bs_business_cw.father RIGHT OUTER JOIN + dbo.cw_invoicesub ON dbo.bs_business_cw.subid = dbo.cw_invoicesub.mx_fee_id'; + + IF OBJECT_ID(N'dbo.v_feetype', N'V') IS NOT NULL + DROP VIEW dbo.[v_feetype]; + EXEC sys.sp_executesql N'CREATE VIEW [dbo].[v_feetype] AS SELECT dbo.b_money.b_hl, dbo.b_feetype.b_id, dbo.b_feetype.b_name, dbo.b_feetype.b_name_e, dbo.b_feetype.b_bz, dbo.b_feetype.b_default, dbo.b_feetype.b_amount, dbo.b_feetype.b_tax, + dbo.b_feetype.b_money_id, dbo.b_feetype.b_inputuser_id, dbo.b_feetype.b_inputdatetime, dbo.b_feetype.b_updateuser_id, dbo.b_feetype.b_updatedatetime +FROM dbo.b_feetype LEFT OUTER JOIN + dbo.b_money ON dbo.b_feetype.b_money_id = dbo.b_money.b_name'; + +COMMIT TRANSACTION; diff --git a/code/fms/fms-api/config/migrations/tools/GenerateBusinessMigrations.java b/code/fms/fms-api/config/migrations/tools/GenerateBusinessMigrations.java new file mode 100644 index 00000000..4b701218 --- /dev/null +++ b/code/fms/fms-api/config/migrations/tools/GenerateBusinessMigrations.java @@ -0,0 +1,633 @@ +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + +/** + * Reads the legacy SQL Server catalog and emits reviewed, schema-only FMS migrations. + * The generated SQL never connects back to the legacy database and never contains data. + */ +public final class GenerateBusinessMigrations { + private static final Set EXCLUDED_TABLES = lowerSet( + "b_contact", "b_contact_type", "b_othercompany", "b_othercompany_bmfl", + "b_user", "b_user_power", "b_user_qx", "b_user_record", + "dtproperties", "log_datas" + ); + private static final Set TREE_TABLES = lowerSet( + "b_other_bmfl", "bc_pricelist_bmfl", "oa_title_bmfl" + ); + private static final Set EXCLUDED_VIEWS = lowerSet( + "v_autoidrule", "v_b_contact", "v_b_employee", "v_b_user_record" + ); + private static final Set BOOLEAN_COLUMNS = lowerSet( + "b_black", "b_canuse", "b_visible", "b_used", "b_default", "b_isdefault", + "b_finish", "b_sh", "b_bill", "b_zx", "b_toall", "b_reminder", + "b_othermachinelogin", "b_salesman", "b_docman", "b_dealman", + "b_visible_customer", "b_visible_supply", "b_levelvisible", "b_fromcustomer", + "b_logintime", "b_checkxy", "b_loginfee", "mx_finish", "mx_sh" + ); + private static final Set TRUE_DEFAULT_COLUMNS = lowerSet( + "b_canuse", "b_visible", "b_used" + ); + private static final Set UNICODE_HINTS = lowerSet( + "name", "memo", "bz", "addr", "address", "subject", "content", "info", + "desc", "caption", "department", "duty", "bank", "goods", "mark", + "remark", "taste", "habit", "situation", "place", "body" + ); + private static final Map BUSINESS_CODE_FIELDS = Map.ofEntries( + Map.entry("bc_khht", "b_htno"), + Map.entry("bs_business", "b_ywno"), + Map.entry("cw_account", "b_account"), + Map.entry("cw_bill", "b_ywno"), + Map.entry("cw_invoice", "b_ywno"), + Map.entry("cw_sfd", "b_ywno") + ); + private static final Map CHILD_PARENTS = Map.ofEntries( + Map.entry("b_othercompany_accountbank", "b_othercompany"), + Map.entry("bc_pricelist_sub", "bc_pricelist"), + Map.entry("bs_business_container", "bs_business"), + Map.entry("bs_business_cw", "bs_business"), + Map.entry("bs_business_hdbl", "bs_business"), + Map.entry("bs_business_transport", "bs_business"), + Map.entry("cw_billsub", "cw_bill"), + Map.entry("cw_invoicesub", "cw_invoice"), + Map.entry("cw_sfdsub", "cw_sfd"), + Map.entry("oa_notices_attach", "oa_notices"), + Map.entry("oa_noticessub", "oa_notices") + ); + private static final Map RENAMED_COLUMNS = Map.ofEntries( + Map.entry("bs_business_cw.mx_type_id", "mx_direction"), + Map.entry("bs_business_transport.mx_hstype_id", "mx_source_type"), + Map.entry("cw_bill.b_module_id", "b_direction"), + Map.entry("cw_bill.b_type_id", "b_document_type"), + Map.entry("cw_invoice.b_module_id", "b_direction"), + Map.entry("cw_invoice.b_type_id", "b_document_type"), + Map.entry("cw_sfd.b_module_id", "b_direction"), + Map.entry("cw_sfd.b_type_id", "b_document_type") + ); + + private record Column( + String name, + String type, + int maxLength, + int precision, + int scale, + boolean nullable, + int ordinal + ) {} + + private record Table(String name, List columns) {} + + public static void main(String[] args) throws Exception { + Path apiRoot = Path.of("").toAbsolutePath().normalize(); + Path sourceConfig = apiRoot.resolve("config/dbconfigs/G3HY2025.properties"); + Path migrations = apiRoot.resolve("config/migrations"); + + Properties properties = new Properties(); + try (InputStream input = Files.newInputStream(sourceConfig)) { + properties.load(input); + } + + try (Connection connection = DriverManager.getConnection( + properties.getProperty("url"), + properties.getProperty("username"), + properties.getProperty("password") + )) { + Map tables = loadTables(connection); + writeDomain(migrations.resolve("016_create_base_tables.sql"), "基础资料", tables, "base"); + writeDomain( + migrations.resolve("017_create_contract_file_tables.sql"), + "合同和文件资料", + tables, + "contract-file" + ); + writeDomain(migrations.resolve("018_create_business_tables.sql"), "业务单据", tables, "business"); + writeDomain(migrations.resolve("019_create_finance_tables.sql"), "财务", tables, "finance"); + writeDomain(migrations.resolve("020_create_oa_tables.sql"), "OA", tables, "oa"); + writeViews(migrations.resolve("021_create_business_views.sql"), connection); + writeVerification(migrations.resolve("verify_business_schema.sql"), tables, connection); + } + } + + private static Map loadTables(Connection connection) throws Exception { + String sql = """ + SELECT t.name AS table_name, c.name AS column_name, ty.name AS type_name, + c.max_length, c.precision, c.scale, c.is_nullable, c.column_id + FROM sys.tables AS t + INNER JOIN sys.schemas AS s ON s.schema_id = t.schema_id + INNER JOIN sys.columns AS c ON c.object_id = t.object_id + INNER JOIN sys.types AS ty ON ty.user_type_id = c.user_type_id + WHERE s.name = N'dbo' AND t.is_ms_shipped = 0 + ORDER BY t.name, c.column_id + """; + Map> columnsByTable = new LinkedHashMap<>(); + try (Statement statement = connection.createStatement(); ResultSet rows = statement.executeQuery(sql)) { + while (rows.next()) { + String tableName = rows.getString("table_name"); + columnsByTable.computeIfAbsent(tableName, ignored -> new ArrayList<>()).add(new Column( + rows.getString("column_name"), + rows.getString("type_name"), + rows.getInt("max_length"), + rows.getInt("precision"), + rows.getInt("scale"), + rows.getBoolean("is_nullable"), + rows.getInt("column_id") + )); + } + } + + Map result = new LinkedHashMap<>(); + for (Map.Entry> entry : columnsByTable.entrySet()) { + if (!includeTable(entry.getKey())) continue; + result.put(entry.getKey().toLowerCase(Locale.ROOT), new Table(entry.getKey(), entry.getValue())); + } + return result; + } + + private static boolean includeTable(String tableName) { + String name = tableName.toLowerCase(Locale.ROOT); + if (EXCLUDED_TABLES.contains(name)) return false; + return name.startsWith("b_") + || name.startsWith("bc_") + || name.startsWith("bf_") + || name.startsWith("bs_") + || name.startsWith("cw_") + || name.startsWith("oa_"); + } + + private static String domainOf(String tableName) { + String name = tableName.toLowerCase(Locale.ROOT); + if (name.startsWith("bc_") || name.startsWith("bf_")) return "contract-file"; + if (name.startsWith("bs_")) return "business"; + if (name.startsWith("cw_")) return "finance"; + if (name.startsWith("oa_")) return "oa"; + return "base"; + } + + private static void writeDomain( + Path target, + String title, + Map tables, + String domain + ) throws Exception { + StringBuilder sql = new StringBuilder(header(title)); + tables.values().stream() + .filter(table -> domainOf(table.name()).equals(domain)) + .sorted(Comparator.comparing(Table::name, String.CASE_INSENSITIVE_ORDER)) + .forEach(table -> sql.append(createTable(table))); + if (domain.equals("finance")) appendFinanceRelations(sql); + sql.append("\nCOMMIT TRANSACTION;\n"); + Files.writeString(target, sql.toString(), StandardCharsets.UTF_8); + } + + private static String header(String title) { + return """ + /* Generated schema-only migration: %s. No legacy data is copied. */ + SET NOCOUNT ON; + SET XACT_ABORT ON; + + IF DB_NAME() <> N'FMS' + THROW 51501, N'本迁移只能在 FMS 目标数据库执行。', 1; + + BEGIN TRANSACTION; + + """.formatted(title); + } + + private static String createTable(Table table) { + String lowerName = table.name().toLowerCase(Locale.ROOT); + if (TREE_TABLES.contains(lowerName)) return createTreeTable(table.name()); + + boolean child = hasColumn(table, "subid"); + String primaryKey = child ? originalColumnName(table, "subid") : "b_id"; + boolean sourceHasStringId = !child && table.columns().stream().anyMatch(column -> + column.name().equalsIgnoreCase("b_id") && isTextType(column.type()) + ); + String businessCode = businessCodeField(table, sourceHasStringId); + + List definitions = new ArrayList<>(); + if (!child && !hasColumn(table, "b_id")) { + definitions.add(" b_id bigint NOT NULL"); + } + for (Column column : table.columns()) { + if (isPluralIdColumn(column.name())) continue; + String targetName = targetColumnName(table, column.name()); + String definition = " " + quote(targetName) + " " + targetType(table, column); + boolean requiredCode = businessCode != null && column.name().equalsIgnoreCase(businessCode); + boolean requiredKey = column.name().equalsIgnoreCase(primaryKey) + || (!child && column.name().equalsIgnoreCase("b_id")); + if (BOOLEAN_COLUMNS.contains(column.name().toLowerCase(Locale.ROOT))) { + int defaultValue = TRUE_DEFAULT_COLUMNS.contains(column.name().toLowerCase(Locale.ROOT)) ? 1 : 0; + definition += " NOT NULL CONSTRAINT " + + quote("DF_" + safeName(table.name()) + "_" + safeName(column.name())) + + " DEFAULT (" + defaultValue + ")"; + } else { + definition += requiredCode || requiredKey ? " NOT NULL" : column.nullable() ? " NULL" : " NOT NULL"; + } + definitions.add(definition); + } + if (sourceHasStringId && businessCode != null && !hasColumn(table, businessCode)) { + definitions.add(" " + quote(businessCode) + " varchar(50) NOT NULL"); + } + definitions.add(" CONSTRAINT " + quote("PK_" + safeName(table.name())) + + " PRIMARY KEY (" + quote(primaryKey) + ")"); + if (businessCode != null) { + definitions.add(" CONSTRAINT " + quote("UQ_" + safeName(table.name()) + "_" + businessCode) + + " UNIQUE (" + quote(businessCode) + ")"); + } + String parentTable = CHILD_PARENTS.get(lowerName); + if (child && parentTable != null && hasColumn(table, "father")) { + definitions.add(" CONSTRAINT " + quote("FK_" + safeName(table.name()) + "_father") + + " FOREIGN KEY (" + quote(originalColumnName(table, "father")) + ") REFERENCES dbo." + + quote(parentTable) + " (b_id)"); + } + + StringBuilder result = new StringBuilder(); + result.append(" IF OBJECT_ID(N'dbo.").append(escape(table.name())).append("', N'U') IS NULL\n"); + result.append(" BEGIN\n"); + result.append(" CREATE TABLE dbo.").append(quote(table.name())).append(" (\n"); + result.append(String.join(",\n", definitions)).append("\n );\n"); + appendIndexes(result, table, primaryKey, businessCode); + result.append(" END;\n\n"); + return result.toString(); + } + + private static String createTreeTable(String tableName) { + String safe = safeName(tableName); + return """ + IF OBJECT_ID(N'dbo.%s', N'U') IS NULL + BEGIN + CREATE TABLE dbo.%s ( + b_id bigint NOT NULL, + b_parent_id bigint NULL, + b_name nvarchar(150) NOT NULL, + b_level int NOT NULL CONSTRAINT %s DEFAULT (1), + b_path varchar(1000) NOT NULL, + b_xh int NOT NULL CONSTRAINT %s DEFAULT (0), + b_canuse int NOT NULL CONSTRAINT %s DEFAULT (1), + b_inputuser_id bigint NULL, + b_inputdatetime datetime2(0) NOT NULL CONSTRAINT %s DEFAULT (SYSDATETIME()), + b_updateuser_id bigint NULL, + b_updatedatetime datetime2(0) NULL, + CONSTRAINT %s PRIMARY KEY (b_id), + CONSTRAINT %s CHECK (b_parent_id IS NULL OR b_parent_id <> b_id), + CONSTRAINT %s FOREIGN KEY (b_parent_id) REFERENCES dbo.%s (b_id) + ); + CREATE INDEX %s ON dbo.%s (b_parent_id, b_xh, b_id); + CREATE INDEX %s ON dbo.%s (b_path, b_xh, b_id); + END; + + """.formatted( + escape(tableName), quote(tableName), + quote("DF_" + safe + "_level"), quote("DF_" + safe + "_xh"), + quote("DF_" + safe + "_canuse"), quote("DF_" + safe + "_inputdatetime"), + quote("PK_" + safe), quote("CK_" + safe + "_parent"), quote("FK_" + safe + "_parent"), + quote(tableName), quote("IX_" + safe + "_parent"), quote(tableName), + quote("IX_" + safe + "_path"), quote(tableName) + ); + } + + private static void appendIndexes( + StringBuilder sql, + Table table, + String primaryKey, + String businessCode + ) { + Set indexed = new LinkedHashSet<>(); + for (Column column : table.columns()) { + String targetName = targetColumnName(table, column.name()); + String lower = targetName.toLowerCase(Locale.ROOT); + if (lower.equals(primaryKey.toLowerCase(Locale.ROOT))) continue; + if (businessCode != null && lower.equals(businessCode.toLowerCase(Locale.ROOT))) continue; + if (lower.equals("father") || (lower.endsWith("_id") && !isAuditUserColumn(lower))) { + if (!indexed.add(lower)) continue; + String indexName = "IX_" + safeName(table.name()) + "_" + safeName(column.name()); + sql.append(" CREATE INDEX ").append(quote(indexName)).append(" ON dbo.") + .append(quote(table.name())).append(" (").append(quote(targetName)) + .append(", ").append(quote(primaryKey)).append(");\n"); + } + } + } + + private static String businessCodeField(Table table, boolean sourceHasStringId) { + String lowerName = table.name().toLowerCase(Locale.ROOT); + String configured = BUSINESS_CODE_FIELDS.get(lowerName); + if (configured != null) return configured; + if (hasColumn(table, "b_code")) return originalColumnName(table, "b_code"); + return sourceHasStringId ? "b_code" : null; + } + + private static String targetType(Table table, Column column) { + String name = column.name().toLowerCase(Locale.ROOT); + String sourceType = column.type().toLowerCase(Locale.ROOT); + String renameKey = table.name().toLowerCase(Locale.ROOT) + "." + name; + if (renameKey.equals("bs_business_cw.mx_type_id") + || renameKey.equals("cw_bill.b_module_id") + || renameKey.equals("cw_invoice.b_module_id") + || renameKey.equals("cw_sfd.b_module_id")) { + return "varchar(20)"; + } + if (renameKey.equals("bs_business_transport.mx_hstype_id") + || renameKey.endsWith(".b_type_id")) { + return "varchar(50)"; + } + if (name.equals("b_id") || name.equals("subid") || name.equals("father") || isReferenceId(name)) { + return "bigint"; + } + if (BOOLEAN_COLUMNS.contains(name) || sourceType.equals("bit")) return "int"; + if (name.endsWith("datetime") || name.endsWith("_datetime") || name.equals("b_inputdate")) { + return "datetime2(0)"; + } + if (name.equals("b_inputtime")) return "time(0)"; + if (name.equals("b_birthday") || name.endsWith("begindate") || name.endsWith("enddate") + || name.endsWith("expiredate")) { + return "date"; + } + if (sourceType.equals("text") || sourceType.equals("ntext")) return "nvarchar(max)"; + if (sourceType.equals("image")) return "varbinary(max)"; + if (sourceType.equals("datetime") || sourceType.equals("smalldatetime")) return "datetime2(0)"; + if (sourceType.equals("float") || sourceType.equals("real")) return "decimal(18,6)"; + if (sourceType.equals("money") || sourceType.equals("smallmoney")) return "decimal(19,4)"; + if (sourceType.equals("decimal") || sourceType.equals("numeric")) { + return sourceType + "(" + column.precision() + "," + column.scale() + ")"; + } + if (sourceType.equals("varchar") || sourceType.equals("char") + || sourceType.equals("nvarchar") || sourceType.equals("nchar")) { + boolean unicode = sourceType.startsWith("n") || hasUnicodeHint(name); + String base = unicode ? "nvarchar" : "varchar"; + int bytesPerChar = sourceType.startsWith("n") ? 2 : 1; + String length = column.maxLength() < 0 ? "max" : String.valueOf(column.maxLength() / bytesPerChar); + return base + "(" + length + ")"; + } + if (sourceType.equals("binary") || sourceType.equals("varbinary")) { + String length = column.maxLength() < 0 ? "max" : String.valueOf(column.maxLength()); + return sourceType + "(" + length + ")"; + } + if (sourceType.equals("timestamp") || sourceType.equals("rowversion")) return "binary(8)"; + if (sourceType.equals("uniqueidentifier")) return "bigint"; + return sourceType; + } + + private static boolean isReferenceId(String name) { + return name.endsWith("_id") + || name.equals("userid") + || name.equals("moduleid") + || name.endsWith("userid") + || name.endsWith("moduleid"); + } + + private static boolean isAuditUserColumn(String name) { + return name.equals("b_inputuser_id") + || name.equals("b_updateuser_id") + || name.equals("mx_inputuser_id") + || name.equals("mx_updateuser_id"); + } + + private static boolean isPluralIdColumn(String name) { + String lower = name.toLowerCase(Locale.ROOT); + return lower.endsWith("_ids") || lower.equals("b_yw_ids") || lower.equals("b_bill_ids") + || lower.equals("b_inv_ids"); + } + + private static boolean hasUnicodeHint(String name) { + for (String hint : UNICODE_HINTS) { + if (name.contains(hint)) return true; + } + return false; + } + + private static boolean isTextType(String type) { + String lower = type.toLowerCase(Locale.ROOT); + return lower.equals("varchar") || lower.equals("nvarchar") || lower.equals("char") + || lower.equals("nchar") || lower.equals("text") || lower.equals("ntext"); + } + + private static boolean hasColumn(Table table, String name) { + return table.columns().stream().anyMatch(column -> column.name().equalsIgnoreCase(name)); + } + + private static String originalColumnName(Table table, String name) { + return table.columns().stream() + .filter(column -> column.name().equalsIgnoreCase(name)) + .findFirst() + .map(Column::name) + .orElse(name); + } + + private static void appendFinanceRelations(StringBuilder sql) { + appendRelation(sql, "cw_bill_business", "b_bill_id", "cw_bill", "b_business_id", "bs_business"); + appendRelation(sql, "cw_invoice_bill", "b_invoice_id", "cw_invoice", "b_bill_id", "cw_bill"); + appendRelation(sql, "cw_invoice_business", "b_invoice_id", "cw_invoice", "b_business_id", "bs_business"); + appendRelation(sql, "cw_sfd_business", "b_sfd_id", "cw_sfd", "b_business_id", "bs_business"); + appendRelation(sql, "cw_sfd_invoice", "b_sfd_id", "cw_sfd", "b_invoice_id", "cw_invoice"); + appendRelation(sql, "cw_sfd_bill", "b_sfd_id", "cw_sfd", "b_bill_id", "cw_bill"); + } + + private static void appendRelation( + StringBuilder sql, + String table, + String leftColumn, + String leftTable, + String rightColumn, + String rightTable + ) { + String safe = safeName(table); + sql.append(" IF OBJECT_ID(N'dbo.").append(table).append("', N'U') IS NULL\n") + .append(" BEGIN\n") + .append(" CREATE TABLE dbo.").append(quote(table)).append(" (\n") + .append(" subid bigint NOT NULL,\n") + .append(" ").append(quote(leftColumn)).append(" bigint NOT NULL,\n") + .append(" ").append(quote(rightColumn)).append(" bigint NOT NULL,\n") + .append(" b_xh int NOT NULL CONSTRAINT ").append(quote("DF_" + safe + "_xh")) + .append(" DEFAULT (0),\n") + .append(" CONSTRAINT ").append(quote("PK_" + safe)).append(" PRIMARY KEY (subid),\n") + .append(" CONSTRAINT ").append(quote("UQ_" + safe)).append(" UNIQUE (") + .append(quote(leftColumn)).append(", ").append(quote(rightColumn)).append("),\n") + .append(" CONSTRAINT ").append(quote("FK_" + safe + "_left")).append(" FOREIGN KEY (") + .append(quote(leftColumn)).append(") REFERENCES dbo.").append(quote(leftTable)).append(" (b_id),\n") + .append(" CONSTRAINT ").append(quote("FK_" + safe + "_right")).append(" FOREIGN KEY (") + .append(quote(rightColumn)).append(") REFERENCES dbo.").append(quote(rightTable)).append(" (b_id)\n") + .append(" );\n") + .append(" END;\n\n"); + } + + private static void writeViews(Path target, Connection connection) throws Exception { + String query = """ + SELECT v.name, sm.definition + FROM sys.views AS v + INNER JOIN sys.schemas AS s ON s.schema_id = v.schema_id + INNER JOIN sys.sql_modules AS sm ON sm.object_id = v.object_id + WHERE s.name = N'dbo' + ORDER BY v.name + """; + StringBuilder sql = new StringBuilder(header("业务视图")); + try (Statement statement = connection.createStatement(); ResultSet rows = statement.executeQuery(query)) { + while (rows.next()) { + String name = rows.getString("name"); + if (!includeView(name)) continue; + String definition = rows.getString("definition"); + if (name.equalsIgnoreCase("v_b_othercompany_bmfl")) { + definition = "CREATE VIEW dbo.v_b_othercompany_bmfl AS " + + "SELECT b_id, b_name FROM dbo.b_othercompany_bmfl"; + } else if (name.equalsIgnoreCase("v_b_feetype")) { + definition = "CREATE VIEW dbo.v_b_feetype AS SELECT " + + "fee.b_id, fee.b_name, fee.b_name_e, fee.b_bz, fee.b_default, " + + "fee.b_amount, fee.b_tax, fee.b_money_id, fee.b_inputuser_id, " + + "fee.b_inputdatetime, fee.b_updateuser_id, fee.b_updatedatetime, money.b_hl " + + "FROM dbo.b_feetype AS fee " + + "LEFT JOIN dbo.b_money AS money ON money.b_id = fee.b_money_id"; + } + definition = removeLegacyPluralIds(definition); + definition = renameLegacySemanticIds(name, definition); + sql.append(" IF OBJECT_ID(N'dbo.").append(escape(name)).append("', N'V') IS NOT NULL\n") + .append(" DROP VIEW dbo.").append(quote(name)).append(";\n") + .append(" EXEC sys.sp_executesql N'") + .append(escape(definition)) + .append("';\n\n"); + } + } + sql.append("COMMIT TRANSACTION;\n"); + Files.writeString(target, sql.toString(), StandardCharsets.UTF_8); + } + + private static boolean includeView(String viewName) { + String name = viewName.toLowerCase(Locale.ROOT); + if (EXCLUDED_VIEWS.contains(name)) return false; + return name.startsWith("v_b_") || name.startsWith("v_bc_") + || name.startsWith("v_bs_") || name.startsWith("v_cw_") + || name.equals("v_feetype"); + } + + private static String removeLegacyPluralIds(String definition) { + String result = definition; + for (String field : List.of("b_yw_ids", "b_bill_ids", "b_inv_ids")) { + result = result.replaceAll( + "(?i)(?:dbo\\.)?[A-Za-z0-9_]+\\." + field + "\\s*,\\s*", + "" + ); + result = result.replaceAll( + "(?i),\\s*(?:dbo\\.)?[A-Za-z0-9_]+\\." + field + "(?=\\s+FROM)", + "" + ); + } + return result; + } + + private static String renameLegacySemanticIds(String viewName, String definition) { + String result = definition; + result = replaceIgnoreCase(result, "dbo.bs_business_cw.mx_type_id", "dbo.bs_business_cw.mx_direction"); + result = replaceIgnoreCase(result, "dbo.bs_business_transport.mx_hstype_id", "dbo.bs_business_transport.mx_source_type"); + result = replaceIgnoreCase(result, "dbo.cw_bill.b_module_id", "dbo.cw_bill.b_direction"); + result = replaceIgnoreCase(result, "dbo.cw_bill.b_type_id", "dbo.cw_bill.b_document_type"); + result = replaceIgnoreCase(result, "dbo.cw_invoice.b_module_id", "dbo.cw_invoice.b_direction"); + result = replaceIgnoreCase(result, "dbo.cw_invoice.b_type_id", "dbo.cw_invoice.b_document_type"); + result = replaceIgnoreCase(result, "dbo.cw_sfd.b_module_id", "dbo.cw_sfd.b_direction"); + result = replaceIgnoreCase(result, "dbo.cw_sfd.b_type_id", "dbo.cw_sfd.b_document_type"); + if (viewName.equalsIgnoreCase("v_bs_business_cw") + || viewName.equalsIgnoreCase("v_bs_business_cw_yf") + || viewName.equalsIgnoreCase("v_bs_business_cw_ys")) { + result = replaceIgnoreCase(result, "mx_type_id", "mx_direction"); + } + if (viewName.equalsIgnoreCase("v_cw_account")) { + result = replaceIgnoreCase(result, "b_type_id", "b_direction"); + result = replaceIgnoreCase( + result, + "a.b_account_id = dbo.cw_account.b_account", + "a.b_account_id = dbo.cw_account.b_id" + ); + } + return result; + } + + private static String replaceIgnoreCase(String value, String source, String replacement) { + return value.replaceAll("(?i)" + java.util.regex.Pattern.quote(source), replacement); + } + + private static String targetColumnName(Table table, String sourceName) { + String key = table.name().toLowerCase(Locale.ROOT) + "." + sourceName.toLowerCase(Locale.ROOT); + return RENAMED_COLUMNS.getOrDefault(key, sourceName); + } + + private static void writeVerification( + Path target, + Map tables, + Connection connection + ) throws Exception { + int expectedTables = tables.size() + 6 + 5; + int expectedViews = 0; + try (Statement statement = connection.createStatement(); ResultSet rows = statement.executeQuery( + "SELECT name FROM sys.views WHERE is_ms_shipped = 0" + )) { + while (rows.next()) if (includeView(rows.getString(1))) expectedViews++; + } + String sql = """ + SET NOCOUNT ON; + + IF DB_NAME() <> N'FMS' + THROW 51510, N'验证脚本只能在 FMS 目标数据库执行。', 1; + + SELECT + (SELECT COUNT(*) FROM sys.tables WHERE is_ms_shipped = 0) AS table_count, + (SELECT COUNT(*) FROM sys.views WHERE is_ms_shipped = 0) AS view_count, + %d AS generated_business_table_minimum, + %d AS generated_business_view_count; + + SELECT OBJECT_SCHEMA_NAME(c.object_id) AS schema_name, + OBJECT_NAME(c.object_id) AS object_name, + c.name AS column_name, + TYPE_NAME(c.user_type_id) AS type_name + FROM sys.columns AS c + INNER JOIN sys.tables AS t ON t.object_id = c.object_id + WHERE t.is_ms_shipped = 0 + AND (c.name = N'b_id' OR c.name = N'subid' OR c.name = N'father' OR c.name LIKE N'%%[_]id') + AND TYPE_NAME(c.user_type_id) <> N'bigint' + ORDER BY schema_name, object_name, c.column_id; + + SELECT s.name AS schema_name, v.name AS view_name + FROM sys.views AS v + INNER JOIN sys.schemas AS s ON s.schema_id = v.schema_id + WHERE v.is_ms_shipped = 0 AND OBJECTPROPERTY(v.object_id, 'IsSchemaBound') IN (0, 1) + AND EXISTS ( + SELECT 1 FROM sys.sql_expression_dependencies AS d + WHERE d.referencing_id = v.object_id AND d.referenced_id IS NULL + AND d.referenced_entity_name IS NOT NULL + ) + ORDER BY s.name, v.name; + """.formatted(expectedTables, expectedViews); + Files.writeString(target, sql, StandardCharsets.UTF_8); + } + + private static String quote(String identifier) { + return "[" + identifier.replace("]", "]]" ) + "]"; + } + + private static String escape(String value) { + return value.replace("'", "''"); + } + + private static String safeName(String value) { + return value.replaceAll("[^A-Za-z0-9_]", "_"); + } + + private static Set lowerSet(String... values) { + Set result = new HashSet<>(); + for (String value : values) result.add(value.toLowerCase(Locale.ROOT)); + return result; + } +} diff --git a/code/fms/fms-api/config/migrations/tools/RunBusinessMigrations.java b/code/fms/fms-api/config/migrations/tools/RunBusinessMigrations.java new file mode 100644 index 00000000..1f37fcae --- /dev/null +++ b/code/fms/fms-api/config/migrations/tools/RunBusinessMigrations.java @@ -0,0 +1,58 @@ +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.List; +import java.util.Properties; + +/** Executes only the reviewed schema-only business migrations against the FMS database. */ +public final class RunBusinessMigrations { + private static final List MIGRATIONS = List.of( + "015_normalize_existing_business_tables.sql", + "016_create_base_tables.sql", + "017_create_contract_file_tables.sql", + "018_create_business_tables.sql", + "019_create_finance_tables.sql", + "020_create_oa_tables.sql", + "021_create_business_views.sql" + ); + + public static void main(String[] args) throws Exception { + Path apiRoot = Path.of("").toAbsolutePath().normalize(); + Path configPath = apiRoot.resolve("config/dbconfigs/G3HD.properties"); + Path migrationDirectory = apiRoot.resolve("config/migrations"); + + Properties properties = new Properties(); + try (InputStream input = Files.newInputStream(configPath)) { + properties.load(input); + } + + try (Connection connection = DriverManager.getConnection( + properties.getProperty("url"), + properties.getProperty("username"), + properties.getProperty("password") + )) { + if (!"FMS".equalsIgnoreCase(connection.getCatalog())) { + throw new IllegalStateException("Refusing to migrate database: " + connection.getCatalog()); + } + for (String migration : MIGRATIONS) { + String sql = Files.readString(migrationDirectory.resolve(migration), StandardCharsets.UTF_8); + try (Statement statement = connection.createStatement()) { + statement.execute(sql); + } + System.out.println("APPLIED|" + migration); + } + try (Statement statement = connection.createStatement(); ResultSet rows = statement.executeQuery( + "SELECT (SELECT COUNT(*) FROM sys.tables WHERE is_ms_shipped = 0), " + + "(SELECT COUNT(*) FROM sys.views WHERE is_ms_shipped = 0)" + )) { + rows.next(); + System.out.println("CATALOG|tables=" + rows.getInt(1) + "|views=" + rows.getInt(2)); + } + } + } +} diff --git a/code/fms/fms-api/config/migrations/tools/VerifyBusinessMigration.java b/code/fms/fms-api/config/migrations/tools/VerifyBusinessMigration.java new file mode 100644 index 00000000..565eb37e --- /dev/null +++ b/code/fms/fms-api/config/migrations/tools/VerifyBusinessMigration.java @@ -0,0 +1,238 @@ +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Properties; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** Performs read-only checks after the business schema migrations have run. */ +public final class VerifyBusinessMigration { + private static final List TABLE_MIGRATIONS = List.of( + "016_create_base_tables.sql", + "017_create_contract_file_tables.sql", + "018_create_business_tables.sql", + "019_create_finance_tables.sql", + "020_create_oa_tables.sql" + ); + private static final Pattern CREATE_TABLE = Pattern.compile( + "(?i)CREATE\\s+TABLE\\s+dbo\\.(?:\\[([^]]+)]|([A-Za-z0-9_]+))" + ); + + public static void main(String[] args) throws Exception { + Path apiRoot = Path.of("").toAbsolutePath().normalize(); + Path migrationDirectory = apiRoot.resolve("config/migrations"); + Set generatedTables = loadGeneratedTables(migrationDirectory); + + Properties properties = new Properties(); + try (InputStream input = Files.newInputStream(apiRoot.resolve("config/dbconfigs/G3HD.properties"))) { + properties.load(input); + } + + try (Connection connection = DriverManager.getConnection( + properties.getProperty("url"), + properties.getProperty("username"), + properties.getProperty("password") + )) { + if (!"FMS".equalsIgnoreCase(connection.getCatalog())) { + throw new IllegalStateException("Refusing to verify database: " + connection.getCatalog()); + } + + verifyGeneratedTables(connection, generatedTables); + verifyCoreTables(connection); + verifyViews(connection); + printCatalogCounts(connection, generatedTables.size()); + } + } + + private static Set loadGeneratedTables(Path migrationDirectory) throws Exception { + Set result = new LinkedHashSet<>(); + for (String migration : TABLE_MIGRATIONS) { + String sql = Files.readString(migrationDirectory.resolve(migration), StandardCharsets.UTF_8); + Matcher matcher = CREATE_TABLE.matcher(sql); + while (matcher.find()) { + result.add(matcher.group(1) != null ? matcher.group(1) : matcher.group(2)); + } + } + return result; + } + + private static void verifyGeneratedTables(Connection connection, Set tables) throws Exception { + for (String table : tables) { + if (!tableExists(connection, table)) { + throw new IllegalStateException("Missing generated table: dbo." + table); + } + if (rowCount(connection, table) != 0) { + throw new IllegalStateException("Generated table is not empty: dbo." + table); + } + + String primaryKey = columnExists(connection, table, "subid") ? "subid" : "b_id"; + if (!primaryKeyMatches(connection, table, primaryKey)) { + throw new IllegalStateException("Unexpected primary key on dbo." + table + "; expected " + primaryKey); + } + verifyIdTypes(connection, table); + verifyNoLegacyTypes(connection, table); + verifyRemovedPluralIds(connection, table); + } + System.out.println("PASS|generated_tables=" + tables.size() + "|empty=true|keys=true|types=true"); + } + + private static void verifyCoreTables(Connection connection) throws Exception { + for (String table : List.of("b_othercompany", "b_contact", "b_othercompany_bmfl")) { + if (!tableExists(connection, table)) { + throw new IllegalStateException("Missing core business table: dbo." + table); + } + verifyIdTypes(connection, table); + } + + long users = scalar(connection, "SELECT COUNT_BIG(*) FROM dbo.b_user"); + long modules = scalar(connection, "SELECT COUNT_BIG(*) FROM dbo.s_module"); + long fields = scalar(connection, "SELECT COUNT_BIG(*) FROM dbo.s_module_field"); + long autoCodes = scalar(connection, "SELECT COUNT_BIG(*) FROM dbo.s_module_auto_code"); + if (users == 0 || modules == 0 || fields == 0) { + throw new IllegalStateException("Existing user or module metadata is missing"); + } + System.out.println("PASS|preserved|users=" + users + "|modules=" + modules + + "|fields=" + fields + "|auto_codes=" + autoCodes); + } + + private static void verifyViews(Connection connection) throws Exception { + List viewNames = new ArrayList<>(); + try (Statement statement = connection.createStatement(); ResultSet rows = statement.executeQuery( + "SELECT QUOTENAME(SCHEMA_NAME(schema_id)) + N'.' + QUOTENAME(name) " + + "FROM sys.views WHERE is_ms_shipped = 0 ORDER BY name" + )) { + while (rows.next()) { + viewNames.add(rows.getString(1)); + } + } + for (String viewName : viewNames) { + try (Statement refresh = connection.createStatement()) { + refresh.execute("EXEC sys.sp_refreshview N'" + viewName.replace("'", "''") + "'"); + } + } + System.out.println("PASS|views_refreshed=" + viewNames.size()); + } + + private static void printCatalogCounts(Connection connection, int generatedTableCount) throws Exception { + try (Statement statement = connection.createStatement(); ResultSet rows = statement.executeQuery( + "SELECT (SELECT COUNT(*) FROM sys.tables WHERE is_ms_shipped = 0), " + + "(SELECT COUNT(*) FROM sys.views WHERE is_ms_shipped = 0)" + )) { + rows.next(); + System.out.println("PASS|catalog|tables=" + rows.getInt(1) + "|views=" + rows.getInt(2) + + "|generated_tables=" + generatedTableCount); + } + } + + private static boolean tableExists(Connection connection, String table) throws Exception { + try (PreparedStatement statement = connection.prepareStatement( + "SELECT COUNT(*) FROM sys.tables WHERE schema_id = SCHEMA_ID(N'dbo') AND name = ?" + )) { + statement.setString(1, table); + try (ResultSet rows = statement.executeQuery()) { + rows.next(); + return rows.getInt(1) == 1; + } + } + } + + private static boolean columnExists(Connection connection, String table, String column) throws Exception { + try (PreparedStatement statement = connection.prepareStatement( + "SELECT COUNT(*) FROM sys.columns WHERE object_id = OBJECT_ID(?) AND name = ?" + )) { + statement.setString(1, "dbo." + table); + statement.setString(2, column); + try (ResultSet rows = statement.executeQuery()) { + rows.next(); + return rows.getInt(1) == 1; + } + } + } + + private static boolean primaryKeyMatches(Connection connection, String table, String expected) throws Exception { + String sql = """ + SELECT c.name + FROM sys.indexes AS i + INNER JOIN sys.index_columns AS ic + ON ic.object_id = i.object_id AND ic.index_id = i.index_id + INNER JOIN sys.columns AS c + ON c.object_id = ic.object_id AND c.column_id = ic.column_id + WHERE i.object_id = OBJECT_ID(?) AND i.is_primary_key = 1 + ORDER BY ic.key_ordinal + """; + try (PreparedStatement statement = connection.prepareStatement(sql)) { + statement.setString(1, "dbo." + table); + try (ResultSet rows = statement.executeQuery()) { + return rows.next() + && rows.getString(1).equalsIgnoreCase(expected) + && !rows.next(); + } + } + } + + private static void verifyIdTypes(Connection connection, String table) throws Exception { + String sql = """ + SELECT c.name, TYPE_NAME(c.user_type_id) + FROM sys.columns AS c + WHERE c.object_id = OBJECT_ID(?) + AND (LOWER(c.name) IN (N'b_id', N'subid', N'father') OR LOWER(c.name) LIKE N'%[_]id') + AND TYPE_NAME(c.user_type_id) <> N'bigint' + """; + try (PreparedStatement statement = connection.prepareStatement(sql)) { + statement.setString(1, "dbo." + table); + try (ResultSet rows = statement.executeQuery()) { + if (rows.next()) { + throw new IllegalStateException("Non-bigint ID column: dbo." + table + "." + + rows.getString(1) + " (" + rows.getString(2).toLowerCase(Locale.ROOT) + ")"); + } + } + } + } + + private static void verifyNoLegacyTypes(Connection connection, String table) throws Exception { + String sql = """ + SELECT c.name, TYPE_NAME(c.user_type_id) + FROM sys.columns AS c + WHERE c.object_id = OBJECT_ID(?) + AND TYPE_NAME(c.user_type_id) IN (N'text', N'ntext', N'image', N'float', N'real', N'uniqueidentifier') + """; + try (PreparedStatement statement = connection.prepareStatement(sql)) { + statement.setString(1, "dbo." + table); + try (ResultSet rows = statement.executeQuery()) { + if (rows.next()) { + throw new IllegalStateException("Legacy type remains: dbo." + table + "." + rows.getString(1)); + } + } + } + } + + private static void verifyRemovedPluralIds(Connection connection, String table) throws Exception { + for (String column : List.of("b_yw_ids", "b_bill_ids", "b_inv_ids")) { + if (columnExists(connection, table, column)) { + throw new IllegalStateException("Legacy plural-ID column remains: dbo." + table + "." + column); + } + } + } + + private static long rowCount(Connection connection, String table) throws Exception { + return scalar(connection, "SELECT COUNT_BIG(*) FROM dbo.[" + table.replace("]", "]]" ) + "]"); + } + + private static long scalar(Connection connection, String sql) throws Exception { + try (Statement statement = connection.createStatement(); ResultSet rows = statement.executeQuery(sql)) { + rows.next(); + return rows.getLong(1); + } + } +} diff --git a/code/fms/fms-api/config/migrations/verify_business_schema.sql b/code/fms/fms-api/config/migrations/verify_business_schema.sql new file mode 100644 index 00000000..d80ba03d --- /dev/null +++ b/code/fms/fms-api/config/migrations/verify_business_schema.sql @@ -0,0 +1,32 @@ +SET NOCOUNT ON; + +IF DB_NAME() <> N'FMS' + THROW 51510, N'验证脚本只能在 FMS 目标数据库执行。', 1; + +SELECT + (SELECT COUNT(*) FROM sys.tables WHERE is_ms_shipped = 0) AS table_count, + (SELECT COUNT(*) FROM sys.views WHERE is_ms_shipped = 0) AS view_count, + 90 AS generated_business_table_minimum, + 48 AS generated_business_view_count; + +SELECT OBJECT_SCHEMA_NAME(c.object_id) AS schema_name, + OBJECT_NAME(c.object_id) AS object_name, + c.name AS column_name, + TYPE_NAME(c.user_type_id) AS type_name +FROM sys.columns AS c +INNER JOIN sys.tables AS t ON t.object_id = c.object_id +WHERE t.is_ms_shipped = 0 + AND (c.name = N'b_id' OR c.name = N'subid' OR c.name = N'father' OR c.name LIKE N'%[_]id') + AND TYPE_NAME(c.user_type_id) <> N'bigint' +ORDER BY schema_name, object_name, c.column_id; + +SELECT s.name AS schema_name, v.name AS view_name +FROM sys.views AS v +INNER JOIN sys.schemas AS s ON s.schema_id = v.schema_id +WHERE v.is_ms_shipped = 0 AND OBJECTPROPERTY(v.object_id, 'IsSchemaBound') IN (0, 1) + AND EXISTS ( + SELECT 1 FROM sys.sql_expression_dependencies AS d + WHERE d.referencing_id = v.object_id AND d.referenced_id IS NULL + AND d.referenced_entity_name IS NOT NULL + ) +ORDER BY s.name, v.name; diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/controller/DataController.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/controller/DataController.class index 9ba1559c1e9b2e9d6ed925711b131f7ab805f2aa..4f253d009f6d4e749608b7ad840e73d4b42ecc91 100644 GIT binary patch delta 1687 zcmb_cNmCO+7=1lSOo+o06wz`+mNJCG6lE2qh2>JNQ50F+0F^)@1_P*>;O@9D2yWxf z#h)NzA$qVpd-Lj_@Z!O;)bjOA7%&N*Jj`_W>+aX@_4j=}RPwdl`|0=l4*)h`WYjz1 z(7mX@W))koRlw61J*{o*k38PG_DXRNI%GfW&xKL z?u{GEH2LzTGVNq;+bF|KCQ_+rtV=d0>Ld3_uxL!MpR%erJtoQi+z5S77 zJQ|7!6lS{OQC+m05GXf3d*)S4cf7VvV9gA)QpQ2pnds zpcG~7PscnQyUZ0GToL3*uyqCALX4VQ!u(4DpctL}tJVT^A;OV>4^hr{u;0W36uBbs z2JWhH5{a?bL&VAU7<$=r3Bo`hKL!1! zkvvWw=XatFB7u`ga88vjG=53F6$5M+&M0yLMW$;E{6CE~*+ia76KQE&VrewKtBdui z`>OeWT25!VuQOStxXBsQiMPpSrP!d9sKY07><)R7GJHb`40F5% zcT>eMLPbvUEN3y4R4p3Erd`$Vu#NB1OZciC?@+JcBX-N|t4^h$(=3xhbK6dM`CiRM z1538iymD!lbSaCv?B2tDo+*3Mt->vf@qlg}wp$B%NJP42t^Y(R&89^qMVL-)rqmWM4`ty=NXS_Q=_ua&#` z9VTK8HYV@`_#tlD;Kl^wckeXQ5@x|d7iaFh-#zEdcfWJaR?nxd$mX9P8vrh1Wi?U@ zbhhBKK&X_RF61KU!&M#q2Cm_{zzHWS+MShPIy`9L25we=2A74HsusdugU)vAM*bGl zgduR7tA=jGxo^gFomE ztu%b&%J&d|DI;88xx0fDW71w8iHsAOAQI#{iM!l|1YsaU(~wns+ju!myGQRL?jy%L zLy~C>9R0?=1YedOX6jav4 zw7;P%v4)sCA=+5_wK!PYGw3E<@AK;Dry@ zm%d!jqR4(sI-kuxG35L*;}zL-Hk;!J4x@xupg*e9^L96|)Rf8451V)2&Aa#9bKiOQufGre1n>ZlCy~RLg}jXd#sx|* z<(_mq(%*HTt7Z_k1jd&=-_!R6#wyjV2^2A5VbaD&um$ckeRubE6zphsryI$h=SC{r z^P0+Cm0E7fJ++za7a#O>uoAS?S`c=nX4YP)cD&aD<;D@@rVc%Sw`M@j*qAm5lP#&! zAmg5~Q8w<0NcChWbr2fwoQ-*$6_|?DZ++!A)z4l_w*^GKOqQS6IEMv+q7D)OfhU#5 zDJ!p4Kdje)d}iZwoF_VEKQ5#D#xh<08IfugFSvB7u$5XUtUnbo-@h>RR;| zfqRvVKkfb~o_cjlAfM2jZg{@h=y$hO_(E=XNW9z#nzFMcL(l9}XI{5GQn-8S##5Y6 zlx_#DXT12X(kf)Sxyq3Hh^1N=n9s7yuol5_*`MID?u zK3^=X30yvE!jQBBQWn+)&YyggmzQ(^Uvb*x_}udxL!5xL%4SZ*D+g1&aujhj=L)#Q z-$m{^@eWvU{(x|n_F*~K_A%vL-$%)r&+lXQ9Z%(OnZM%@fCzDg_Sek8C|pH_tFa6! z|EFbeO)U#%Bw{SK40aw>+B10`1rM1L!TCrR=b*!2Q_xMWCXMAB;A7w|%@5HNBr8Rq z;e=Zn68q*a zDmd?9okXaRW)$qsu;8iDg3CjLOQQwPAGR`E_UuWG9F$#vOO`om@n*c)q$XEaX literal 0 HcmV?d00001 diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$AutoCodeRule.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$AutoCodeRule.class new file mode 100644 index 0000000000000000000000000000000000000000..02472f61c9d684757ac8f05132fa9242fe0c2cd6 GIT binary patch literal 3085 zcmbVNds7=#6#rcy*$_570t6#cKqw?zXj*GUyI7?>Bs8T6NVWB~Bp0%6vKx0djQYRd zMrZ7d8E5#z58!w3t2mx}H;+ZOOol(so^v1PoO@os{rlhZzW}VE97hj&74)fyAj&ZO z(l|466~j8s?en7Tlo+C`re%5$8G19>qkhEDuOO~s04l@%qLn+n=h`P;?xgA(H8baO z=gchf+=k&92gVsc@YnNeb4hCk8jyd)$qjjxQdk6?ss|3a176O#O_-v(s-L8;qo8q+$!>CX2~m) z%e**!N5z!Xak$I9!=Gwg>`tqg5i!MG&v3jWqf(dK@2Z#+mlMUh<8aH{?NhP?gB8NK+G0*mcWq6z^Tq~`5 z_HyQgi}zIA!~5i-Y`A4n1BM6Jc99nrKTxrP52@w8MlI{<>-kD>) zJ-Z|Y=2dUcr{0-K{lXl!R&w@qw>58id&Y(s6ru#t2+|XIUO!in~DOLHn>}K%o?FuP-VShxNdNxY2!t}Y>4*@_|WbNHE&tmktR7coEijb z1q9PKJ1Gb;+6qa*31#%^tJEES{J2B#*+W1wfTZ}5kdzdE0m%vFB_~*yoPb<%f^5kN zq$MX*mYgtHa)MmR31o>6k^KlhqVEG*{excG0XDTi!L;cH6m7YIgqH4WU_?tt8W_{Y zqYX@GX{CWlEfs6vhL(;uFsr2o8kpD8i3S$6^k4(pYckXWoxV{pfEBSy^3U=aoA?+H zX+^GNV02EB2(4F2BDg*&iSQy)5&=e~BtlfAB!Y}dNrV}fk_dD_N+Q&Rlti$D_=M!; z0eL8*93@H-rHQ79W{Bp97KpM$OGG2|+xe89FS2u&xOk|donsmJoy5!Wss5E_d?WNr zSqo9W3;f!Z`U)O3YqLsR^g>L#b&mUQ(ogw!+Ubp99UJrj5qgBtf(k(i*lfNjN7qG2 z5$z8szmf2!fFezcjEdCCM~+lm%89G8(NP`^RUYY1ITflr)}3;?U5DVaC$6eO=h;)C zo+rEWJQJGj8{K7lF4XgEcb*qQJ)U(eC7GijUr`W^i*vA15@db|X3}50a U7<4O1lMq85#{@b>aGWCjAEyOVo&W#< literal 0 HcmV?d00001 diff --git a/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$CodeCandidate.class b/code/fms/fms-api/target/classes/cn/g3soft/fmsapi/service/DataSaveService$CodeCandidate.class new file mode 100644 index 0000000000000000000000000000000000000000..817e9c599491b2c249deec96aeb64a3aa0852c07 GIT binary patch literal 1755 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 literal 0 HcmV?d00001 diff --git a/code/fms/fms-api/target/schema-generator/GenerateBusinessMigrations$Table.class b/code/fms/fms-api/target/schema-generator/GenerateBusinessMigrations$Table.class new file mode 100644 index 0000000000000000000000000000000000000000..8859c68f0578b114e20091dc0ad523855335faba GIT binary patch literal 1735 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

5|DP-B|rtD`%bGrh@-C{ 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 F|3Bd3g-`$h literal 0 HcmV?d00001 diff --git a/code/fms/fms-api/target/schema-generator/RunBusinessMigrations.class b/code/fms/fms-api/target/schema-generator/RunBusinessMigrations.class new file mode 100644 index 0000000000000000000000000000000000000000..cae03a8817113cda8e01e4fd9447773585f25b17 GIT binary patch literal 4445 zcmcIo`F9i775<))J(4_ZiZPj_fLLQ2uq;BrSde0b4Qeghv5YB@#vMz~^5F4|(2R^B zq-miIUDKos&C+yDO7|9M!G@-!X+xWIOPi+K4{d+!f6(@voY4DbMzVxuek;dEZ|1%4 z-Fx3%zWavP-oE-10G;?-5H(mJ!6%~@bqq_6s*`F&SB-3>Z{#RX+YEI(HAA!SXIRkG zJmiO;0TO~0(3G9mjBGt*ER?WF#$qgC2sxq*&5Vp{I*;_L_83ErIm!@g>X}vJ?u{Lp zJJsw?RY-^lB_SDipn+kLZFY`Wre3hQE4{I4-aU;nmWw?B!^}^px^|NLp)iEgrZK8z zBbgER!HVp=cmLkjT;9y_ysdFd=(}6SJFtR5%5%~-$r+leoS>>|KUOg;^^{C#*}Q6N zreR4~&CuXDprR0GC46}-zFKG(aPY{O*KP?dXjHJHV*~S zhNy%sGVT?*m{VeKv%_v4)m^;vFvem=plVg3j@;=Hu$sWE1kr_V3HxO1M}ncziGy`akL=BBlRTeP4K>U2WHu>|n}$KvMA2hNR#81S`{&Mh z0TCKz#l`%1H=VURnW{$;y%PFl^y7h|Gb_OiL1Bw(tGbz`1T2NuxUq*eQ%W{=U6Wvhm51u=vN1sA<{9#umD4C8$gR2d^k6KJ4d>?v59K{=5u)fXK! znb|tc)>eR4k6=rDck-W^*c4lcHDR6lXc%&69+2 z=n^Jm7%+=uR{>h4sxNDX%i(n5#b-Mu%%Q%Hc$T!3Y88^Wh_ILp; zQGlS**!+ULEG$nMk$I2G_y9i0usBV^ZSF*Vf*W-9k^@C9mgdQUXYe5jAC~c$NHw=x zR6xjqe2S-u-32xpz(?^h2_Kj734F4${hY9DP87GmEReosuIgca43i; z@T7!K%lM2)uo5Aa0ZD02Y|{-tKF4q})z#A#9}G8nW4!M`?_g6)bGUn;FB!H@Sgp2T zDJy(%f7d`)ShI#FtYK?R%jI|`yer(+yy-SuCpCV2{+;5`pO^6zo@S6eM?6sAdCG~~ zv>)NY0d5s^JH{7-=cJFi*6fs^JRF1 z*rj6qI}B^vqT7q>Y16RtYT6zamx&7C_ZU{TMca$Os>*)Au%a!xqlg*R4An?iin&OQ ztZhqM5n`$pN`5E=Y>5_EOG=y&iUSEoxh!rzR~Vis=SZ)r-K2D?=Knt9MXJPS)C>bD zEo-QDAx{*(&b6hqytB+UukGDWTYPadL+Hgl#I3!Bi4mS36sb-N6RJjStg)%uoo$Hv z9TjkWX`Q#i8t}%KWW@ zE{PrXn5Jz}#^jRR9y2qRAFon}8sMWM7qem847;~69?noZ6xr7iW`6vNT-Dj%-;?Ot zdx~CvLrD?u9PI4r+jq)M-d*gJ6Z2hcaUFga#OwIIgg=Nfd4oJV+W|FW(j4c+cj9L3 zHo9&~UsIItQ|0;L0bMiq6SEVWtm`q&@j}jH;c}`i3suF&!4o-N1zzrUFYU_9*b@;~ zbv;ELkAf~I=$?{~>vYB86qG+Pte!ofA|9Fn-C#+6-3*R0JPkuUHg6wgySvM-=HQ9tWB9sq;4cJgnPkN=@%1?r3snL^D6#s0xMk?K5h{9Zq6B9-;TsxCc+72```puV5qI z#3r(6GuhNiR&8Pph_KaYW9txQ?ev+m8{60sY$pq&>@1DvXuO1WvSdV2NjdB^(GcUn!83T&a(f%sCf%JB_!WMK*IP<>_c!4JV`5(Sf{@; zp4cU*zdf#8#ecB)CVc|=tL-==(Y?Yob%{`L%P~l|K$J_PPZv7Zl6l3=9<7L+>j4rw z3&T$-oIaw8m*L0H9nuh-vYGz(Li}46Iv@IG=-Z+1hQ1%V5V|ytA6>#jw{pxPBBWOc jT!S0<1&s~#{#z3HOXv4B=l9q6Bdr8!_D%d5e}(ct3LB&@ literal 0 HcmV?d00001 diff --git a/code/fms/fms-api/target/schema-generator/VerifyBusinessMigration.class b/code/fms/fms-api/target/schema-generator/VerifyBusinessMigration.class new file mode 100644 index 0000000000000000000000000000000000000000..15d9ef717f297382b457114b4d489ee7caa5b3a1 GIT binary patch literal 12177 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 literal 0 HcmV?d00001 diff --git a/code/fms/fms-api/target/test-classes/cn/g3soft/fmsapi/service/DataSaveServiceTests$JdbcFixture.class b/code/fms/fms-api/target/test-classes/cn/g3soft/fmsapi/service/DataSaveServiceTests$JdbcFixture.class index 97009b78899d8444433500b0e9ad4d4df21615de..528b50a017341ee4baf82107b3c123a1593e2b2c 100644 GIT binary patch delta 157 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 a9F90wG>OgSyoY7o)r>i!MYM`-nEhXtD#rx? delta 2756 zcmaJ?33yc175?vR@6DT=?IoE&G$BezCV`NIKq4V5BU?fz1dK@>5{Q$T2M$bTAep2Q zONY`@Td-BUE~U2A?zI~gX_yJ3)T*U+!>)F-wRW|&#nx_CrRTm`^0oEr_rCY;J+T zh1XRqPTAe6f+7wb#p0sf8!Tn8#{(k~Lq!>bV`O+@+!#|am%+KmxOsSI*oaWjD;Sh; zlq~Ua6&18sS5s57ig^rh;VN9MU_M7R7BJ-P4on6bC*t8qV|QRLgC(|8#2hmiW#+~TEQlcH=&cEAf0M&obnwtqH(#Zn`1LM7CB2?Td-BZbsW98 zUNkv-T>ThOa07=Q+r$y)rWHf9x4HB9zDVQRSTt$`!CXO&1RKTFQUc(j) zxDY^uV-!&l)oRPA7*yV9VARkshH(XPjtNX2JGEThf+>!hv0pr(ZD4N^m$W&pZ)GUW zrQEyKw|**U?3GEYI7n%v@u=Dv2uF;Nh66YxY4&!p%2l3!81GbYE62O=ZiZ@cL8}%= zTs>+nj>>Y~CZ2PZRlZkNocN>@jql(%hC4|S3`8OfV;-L@n`q;mg&OX{-3spExEJqZ zm?u`}xrNW-5{In`+xr<7i(|!$H608e;P@a;h;zKbbw56=;3FI##m9u#)+}D;`zi+U z364)ngw(NEBr*~R?vWTh!0~B(MjXm(Ck#F(3-)>OcwYaiFEF@9hDT$eiHJeB%7w!? z#qkjKGidRfjOcYnd}55C_#$Q9onht~dAcOSfh-wyaoNGe#e9c)95Wne@vwL{zgoQu zk8nJS^P5HDEfcr_fyS2!-2fyi|yn3LMO?F$Yr=rgG+F+Cy!nMXZF--V_=M zZU|2itcJq!8I}schyRGM^-NpGUx^x1_Mg3Yl6~)A(N+yWWsOBJJeM zI$fD{%4qC*rKyo6u$m?4M=8xK2>wbGp$hZqX`%bG8Vj(VO_!$YmZ>Rc9rzi3PIWF~ZFmm9AQp7d z;^*;8N@kL-$gl8g*zg-lNU|Yq`z_giM;aSxUcet{CRy_$jldss9H}6V*nk8?h9t2Z zNhD}yfs)vl#G7sBaEsr176<%#;tbx_o5DLR7?@>J5=S!ZiRtgjvWJvu+RWf~APJ!# zpTT{=G(I#S$zkF>Ncex8$s&>bsU$v2Y%z;Fi*_sWDD5?LJTIYrEn2aTq>boCC;I5X zH;_C8AN?x2v5)>@2XQ^_B#XQt_40raSuk;H7EBzVCu?*^-8ceX{%1)K4Ro#5vtPjV}$5@T3&Jni0O1#5bq$^uTPQx><(JRLCBb)1PYr zU5{M#`h{s+W}~G$pwEopPCJ<=Aa4Rh-VByw|1Grh z-$-x4-|-I`<&9AAPnyw6W+PBuS&V<-6?6JJHC!umk+GZ%3iW=Da+b#mSdqiYbZYf( G%>6e+b!T$` diff --git a/code/fms/fms-vue/src/components/FmsTree.vue b/code/fms/fms-vue/src/components/FmsTree.vue index ea3ebac4..ddc4c040 100644 --- a/code/fms/fms-vue/src/components/FmsTree.vue +++ b/code/fms/fms-vue/src/components/FmsTree.vue @@ -1,22 +1,93 @@