Files
workspace/code/fms/sql/fms_module_otherdata.sql
T
2026-09-14 22:30:13 +08:00

216 lines
10 KiB
Transact-SQL

/* ============================================================================
其他数据:模块注册(base_otherdata 根 + 6 个分组 + 64 个数据模块 + 字段定义)
依据文档:FMS业务表设计.md「其他数据」节
前置脚本:fms_business_otherdata.sql(建表 + 视图)
说明:
1. 三层组织:其他数据(base_otherdata)→ 分组(常用/系统/仓库/物流/铁运/空运,module 类型)
→ 数据模块(data);模块编码 = 表名(如 b_money),b_view_table / b_save_table 都指向表;
2. b_canuse 沿用旧库 b_other_bmfl 的启用状态(启用 46、停用 16);
3. s_field 的字段名先用字段编码占位,重跑本脚本后需执行
FieldNameSync --all-otherdata --force 重建字段名与 view/edit 配置;
4. b_from / b_grade 也在此注册(表由迁移工具重建为雪花);
5. b_othercompany_partner_type(树形分类)不在本脚本注册,由 othercompany 页面维护。
============================================================================ */
SET NOCOUNT ON;
GO
/* ----------------------------------------------------------------------------
1. 清理(脚本可重复执行)
---------------------------------------------------------------------------- */
delete from dbo.s_field where b_module_id in (select b_id from dbo.s_module where b_path like '/base/base_otherdata/%');
GO
delete from dbo.s_module where b_path like '/base/base_otherdata/%' or b_id = 'base_otherdata';
GO
/* ----------------------------------------------------------------------------
2. 根模块
---------------------------------------------------------------------------- */
insert into dbo.s_module (b_id, b_parent_id, b_depth, b_path, b_name, b_i18n, b_module_type, b_canuse, b_xh, b_bz)
values ('base_otherdata', 'base', 1, '/base/base_otherdata/', N'其他数据', 'module.base_otherdata', 'module', 1, 30,
N'原 G3HY「其他数据」的 62 张基础字典 + b_from / b_grade');
GO
/* ----------------------------------------------------------------------------
3. 分组(6 个 module 节点):常用 / 系统 / 仓库 / 物流 / 铁运 / 空运
---------------------------------------------------------------------------- */
declare @groups table (id varchar(50) primary key, name nvarchar(200) not null, xh int not null);
insert into @groups (id, name, xh) values
('od_common', N'常用', 10),
('od_system', N'系统', 20),
('od_depot', N'仓库', 30),
('od_logistics', N'物流', 40),
('od_rail', N'铁运', 50),
('od_air', N'空运', 60);
insert into dbo.s_module (b_id, b_parent_id, b_depth, b_path, b_name, b_i18n, b_module_type, b_canuse, b_xh)
select g.id, 'base_otherdata', 2, '/base/base_otherdata/' + g.id + '/', g.name, 'module.' + g.id, 'module', 1, g.xh
from @groups g;
GO
/* ----------------------------------------------------------------------------
4. 数据模块(64 个):id 为 'v_' + 表名(列表统一写法),插入时取表名作为模块编码;
分组按 xh 段划分(与列表中的分组顺序一致);b_view_table / b_save_table 都指向表本身
---------------------------------------------------------------------------- */
declare @mods table (id varchar(50) primary key, name nvarchar(200) not null, canuse tinyint not null, xh int not null);
insert into @mods (id, name, canuse, xh) values
-- 1.常用
('v_b_feetype', N'费用类别', 1, 10),
('v_b_oceanline', N'航线', 1, 20),
('v_b_goodssource', N'货物来源', 1, 30),
('v_b_dailyfeetype', N'日常费用', 1, 40),
('v_b_dailytype', N'收支类型', 0, 50),
('v_b_ywtype', N'业务类型', 1, 60),
('v_b_ysfs', N'运输方式', 1, 70),
('v_b_port', N'港口', 1, 80),
('v_b_money', N'币种', 1, 90),
-- 2.系统
('v_b_cargo_damage_status', N'货损状态', 1, 100),
('v_b_bulkforkliftpersonname', N'散货铲车人员', 1, 110),
('v_b_bulktype', N'散货类型', 1, 120),
('v_b_bulkpersonname', N'散货理货人员', 1, 130),
('v_b_bulkstevedorepersonname', N'散货装卸人员', 1, 140),
('v_b_charging_method', N'收费方式', 1, 150),
('v_b_unloading_method', N'卸货方式', 1, 160),
('v_b_sys_b_lessfull', N'装箱', 1, 170),
('v_b_sys_edittype', N'字段编辑选择', 0, 180),
('v_b_vessel', N'船名船次', 1, 190),
('v_b_freightpayment', N'运费条款', 1, 200),
('v_b_con_type', N'箱型管理', 1, 210),
('v_b_jsfs', N'结算方式', 0, 220),
('v_b_city', N'城市', 0, 230),
('v_b_ivtype', N'发票类型', 1, 240),
('v_b_sys_sex', N'性别', 0, 250),
('v_b_sys_copies', N'提单份数', 0, 260),
('v_b_cztype', N'称重方式', 1, 270),
('v_b_sys_level', N'级别', 0, 280),
('v_b_sys_operator', N'条件设置操作符', 0, 290),
('v_b_blstate', N'提单方式', 0, 300),
('v_b_sys_state', N'审核状态', 0, 310),
('v_b_sys_feesf', N'费用收付', 0, 320),
('v_bc_priceList_type', N'价目表类型', 0, 330),
('v_b_sys_yesno', N'是否', 0, 340),
('v_b_sys_pricelisttype', N'合作伙伴类型', 0, 350),
('v_b_ystype', N'付款类型', 1, 360),
('v_b_billtype', N'账单类型', 1, 370),
('v_b_bgtype', N'报关方式', 1, 380),
('v_b_httype', N'合同类型', 0, 390),
('v_b_transway', N'运输条款', 1, 400),
('v_b_from', N'客户来源', 1, 410),
('v_b_grade', N'客户级别', 1, 420),
('v_b_sys_hdtype', N'回单类型', 1, 430),
('v_b_package', N'包装单位', 1, 440),
('v_b_progress', N'进度情况', 1, 450),
('v_b_zxstate', N'执行状态', 0, 460),
-- 3.仓库
('v_b_depot', N'仓库', 1, 470),
('v_b_depotouttype', N'出库类型', 1, 480),
('v_b_depotintype', N'入库类型', 1, 490),
-- 5.物流
('v_car_daily_feetype', N'费用报销-费用类型', 1, 500),
('v_car_jiayou_jsfs', N'计算方式', 1, 510),
('v_car_jiayou_type', N'加油类型', 1, 520),
('v_car_jiayou_youliao', N'燃油种类', 1, 530),
('v_b_cdtype', N'派车类型', 1, 540),
('v_b_shfs', N'派送方式', 1, 550),
('v_b_thfs', N'提货方式', 1, 560),
('v_b_wangdian', N'网点', 1, 570),
('v_b_ywfrom', N'业务来源', 1, 580),
('v_b_ywtype_tc', N'业务类型', 1, 590),
-- 6.铁运
('v_b_servicetype', N'服务内容', 1, 600),
('v_b_contype', N'箱属', 1, 610),
('v_b_ywtype_ht', N'业务类型', 1, 620),
-- 7.空运
('v_b_dcterm', N'订舱条款', 1, 630),
('v_b_ywtype_ky', N'业务类型', 1, 640);
insert into dbo.s_module (b_id, b_parent_id, b_depth, b_path, b_name, b_i18n, b_module_type,
b_view_table, b_save_table, b_key_field, b_canuse, b_xh)
select t.code, g.id, 3, '/base/base_otherdata/' + g.id + '/' + t.code + '/', m.name, 'module.' + t.code, 'data',
t.code, t.code, 'b_id', m.canuse, m.xh
from @mods m
cross apply (select stuff(m.id, 1, 2, '') as code) t
cross apply (select case
when m.xh < 100 then 'od_common'
when m.xh < 470 then 'od_system'
when m.xh < 500 then 'od_depot'
when m.xh < 600 then 'od_logistics'
when m.xh < 630 then 'od_rail'
else 'od_air' end as id) g;
GO
/* ----------------------------------------------------------------------------
5. 字段定义:从各模块 b_save_table 的列生成(审计字段也保留)
b_name 先占位,随后由 FieldNameSync 从旧库 s_columnLib 同步中文名
---------------------------------------------------------------------------- */
insert into dbo.s_field (b_module_id, b_field, b_name, b_i18n, b_type, b_canuse, b_xh)
select sm.b_id,
c.name,
c.name,
null,
case
when ty.name in ('bigint', 'int', 'decimal', 'numeric') then 'number'
when ty.name = 'tinyint' then 'checkbox'
when ty.name in ('datetime2', 'date', 'datetime') then 'datetime'
else 'input'
end,
1,
row_number() over (partition by sm.b_id order by c.column_id) * 10
from dbo.s_module sm
join sys.columns c on c.object_id = object_id('dbo.' + sm.b_save_table)
join sys.types ty on ty.user_type_id = c.user_type_id
where sm.b_path like '/base/base_otherdata/%'
and sm.b_module_type = 'data';
GO
/* ----------------------------------------------------------------------------
6. 字典模块直接查表(b_view_table = 表名),不建 v_ 直通视图;
单表无需叠加 join / 计算列时,不加视图,与旧库一致。
---------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------------
7. 通用字段中文名:旧库 s_columnLib 没有这些新增字段的记录,FieldNameSync
同步不到,这里统一补上(只填占位,不覆盖已同步的名称)
---------------------------------------------------------------------------- */
update dbo.s_field
set b_name = case b_field
when 'b_id' then N'系统编号'
when 'b_i18n' then N'多语言键'
when 'b_canuse' then N'是否启用'
when 'b_xh' then N'显示顺序'
when 'b_created_by' then N'创建人'
when 'b_created_at' then N'创建时间'
when 'b_updated_by' then N'更新人'
when 'b_updated_at' then N'更新时间'
when 'b_edicode' then N'EDI编码'
when 'b_name' then N'名称'
when 'b_name_e' then N'英文名'
when 'b_bz' then N'备注'
when 'b_money_id' then N'币种'
when 'b_country' then N'国家'
when 'b_country_name_c' then N'国家(中文)'
when 'b_country_name_e' then N'国家(英文)'
when 'b_voy' then N'船次'
when 'b_type' then N'类型'
when 'b_linkcon' then N'关联箱型'
when 'b_dw_id' then N'关联单位字段'
when 'b_dw_name' then N'关联单位视图'
when 'b_hl' then N'汇率'
when 'b_symbol' then N'货币符号'
when 'b_isconvert' then N'参与折算'
when 'b_tz' then N'标志位'
else b_name
end
where b_name = b_field
and b_module_id in (select b_id from dbo.s_module where b_path like '/base/base_otherdata/%');
GO