20260922172938
This commit is contained in:
1 parent
583984c24f
commit
c8dad8d4a6
46 files changed
+3366
-1246
No files matched your search
@@ -30,6 +30,9 @@ import java.util.Set;
|
||||
* 不读模块关系、不跑模块 SQL 规则。普通模块列表不允许传表名。</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p>另外,{@code saveobjt} 的删除行可以带 {@code dependent_deletes} 声明,把引用这些行的
|
||||
* 依赖行一并删除(见 {@link #deleteDependents}):依赖关系由调用方声明,服务端不按表名猜。
|
||||
*
|
||||
* <p>计划、检查、删除在同一事务中完成(设计 §5.3):任一步骤失败整批回滚。
|
||||
*/
|
||||
@Service
|
||||
@@ -178,6 +181,110 @@ public class DataDeleteService {
|
||||
return deleted;
|
||||
}
|
||||
|
||||
/**
|
||||
* 依赖行删除:本表被删的行被别的表引用时,连引用行一起删(《FMS删除策略重构设计》§6.2)。
|
||||
*
|
||||
* <p>例如删除权限点({@code s_power})要连引用它的用户授权行({@code s_user_power})
|
||||
* 一起删:授权行只记录“拥有”,没有外键约束,权限点没了、授权行留着就是幽灵授权 ——
|
||||
* 权限判定会读到它,授权界面也无从解释。这类关系不登记在 {@code s_relation} 里
|
||||
* (那是有模块归属的业务关系),也不由服务端按表名反查:调用方在请求里声明依赖表、
|
||||
* 键列和取值列,这里按声明执行。表名只出现在请求里,服务端不认识具体业务表。
|
||||
*
|
||||
* <p>声明格式 {@code {table, key_field, source_field}}:对本表本次要删的每一行,
|
||||
* 用取值列的值得出要删的键值,再删依赖表里键列等于该值的行。取值用本表这一行的列值
|
||||
* 条件查出(与物理删除的 WHERE 同口径),所以调用方不需要先查一遍再拼删除行。
|
||||
*
|
||||
* @param parentTable 本表(正在删除的表)的元数据
|
||||
* @param parentRows 本次要删除的行,列值即删除条件
|
||||
* @param dependents 依赖声明列表
|
||||
* @return 实际删除的依赖行数
|
||||
*/
|
||||
public int deleteDependents(
|
||||
Connection connection,
|
||||
DbUtils.TableMetadata parentTable,
|
||||
List<Map<String, Object>> parentRows,
|
||||
List<Map<String, Object>> dependents
|
||||
) throws SQLException {
|
||||
int total = 0;
|
||||
for (Map<String, Object> dependent : dependents) {
|
||||
String table = text(dependent.get("table"));
|
||||
String keyField = text(dependent.get("key_field"));
|
||||
String sourceField = text(dependent.get("source_field"));
|
||||
// 声明不完整时直接拒绝:静默跳过等于把该清的依赖行留下,成了没人解释得了的孤儿行
|
||||
if (table == null || keyField == null || sourceField == null) {
|
||||
throw new BusinessException(
|
||||
"依赖删除声明不完整,需要 table / key_field / source_field");
|
||||
}
|
||||
|
||||
DbUtils.TableMetadata dependentTable = dbUtils.loadTableMetadata(connection, table);
|
||||
DbUtils.ColumnMetadata keyColumn = requireKeyColumn(dependentTable, keyField);
|
||||
DbUtils.ColumnMetadata sourceColumn = dbUtils.getColumn(parentTable, sourceField);
|
||||
if (sourceColumn == null) {
|
||||
throw new BusinessException("依赖删除的取值列不存在: "
|
||||
+ parentTable.requestedName() + "." + sourceField);
|
||||
}
|
||||
|
||||
List<Object> values = querySourceValues(
|
||||
connection, parentTable, parentRows, sourceColumn);
|
||||
if (values.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
int deleted = deleteRecords(connection, dependentTable, keyColumn, values);
|
||||
total += deleted;
|
||||
writeDeleteLog(null, parentTable.requestedName(), table,
|
||||
keyColumn.name(), values.size(), deleted);
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
/**
|
||||
* 取出本表待删行在取值列上的值(去重)。
|
||||
*
|
||||
* <p>匹配条件与物理删除同口径:行内有本表可写列的列值做 AND;一行里没有任何本表列时
|
||||
* 拒绝执行,和 {@code DbUtils.delete} 一样不允许从这条路径形成无条件匹配。
|
||||
*/
|
||||
private List<Object> querySourceValues(
|
||||
Connection connection,
|
||||
DbUtils.TableMetadata table,
|
||||
List<Map<String, Object>> rows,
|
||||
DbUtils.ColumnMetadata sourceColumn
|
||||
) throws SQLException {
|
||||
Set<Object> values = new LinkedHashSet<>();
|
||||
for (Map<String, Object> row : rows) {
|
||||
List<String> conditions = new ArrayList<>();
|
||||
for (Map.Entry<String, Object> entry : row.entrySet()) {
|
||||
DbUtils.ColumnMetadata column = columnOf(table, entry.getKey());
|
||||
if (column == null || !column.writable()) {
|
||||
continue;
|
||||
}
|
||||
conditions.add(dbUtils.quoteQualifiedIdentifier(column.name())
|
||||
+ " = " + literal(entry.getValue(), column));
|
||||
}
|
||||
if (conditions.isEmpty()) {
|
||||
throw new BusinessException("删除条件不能为空: " + table.requestedName());
|
||||
}
|
||||
|
||||
String sql = "select distinct " + dbUtils.quoteQualifiedIdentifier(sourceColumn.name())
|
||||
+ " from " + table.quotedName()
|
||||
+ " where " + String.join(" and ", conditions);
|
||||
for (Map<String, Object> found : dbUtils.loadDataBySql(connection, sql)) {
|
||||
Object value = found.get(sourceColumn.name());
|
||||
if (value != null) {
|
||||
values.add(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
return new ArrayList<>(values);
|
||||
}
|
||||
|
||||
/** 按列名取元数据(大小写不敏感);不是本表列时返回 null,与物理删除忽略未知列同口径 */
|
||||
private DbUtils.ColumnMetadata columnOf(DbUtils.TableMetadata table, String fieldName) {
|
||||
if (fieldName == null) {
|
||||
return null;
|
||||
}
|
||||
return table.columnsByName().get(fieldName.trim().toLowerCase(Locale.ROOT));
|
||||
}
|
||||
|
||||
// ── target=module:计划 → 检查 → 执行 ──────────────────────────────────
|
||||
|
||||
private Map<String, Integer> executeModuleTarget(
|
||||
|
||||
@@ -25,6 +25,13 @@ import java.util.StringJoiner;
|
||||
@Service
|
||||
public class DataSaveService {
|
||||
|
||||
/**
|
||||
* 依赖行删除声明(请求可选):本表本次要删的行被别的表引用时,连引用行一起删。
|
||||
* 声明为 {@code [{table, key_field, source_field}]},由删除服务按声明执行
|
||||
* (《FMS删除策略重构设计》§6.2)。表名只出现在请求里,服务端不按表名猜关系。
|
||||
*/
|
||||
private static final String DEPENDENT_DELETES = "dependent_deletes";
|
||||
|
||||
@Resource
|
||||
private DataSource dataSource;
|
||||
|
||||
@@ -430,6 +437,15 @@ public class DataSaveService {
|
||||
"update",
|
||||
rows(request, "updates")
|
||||
);
|
||||
// 依赖行随本表删除:请求显式声明依赖表(如删权限点连引用它的授权行一起删),
|
||||
// 由删除服务按声明查出引用行的键值再删(设计《删除策略》§6.2)。声明通用 ——
|
||||
// 服务端不认识具体表名,依赖关系由调用方声明,不做“按表名猜关系”的特殊处理。
|
||||
// 依赖行先于父行删除(设计 §5.3),所以放在物理删除之前;本表没有删除行时
|
||||
// 没有依赖可清,直接跳过。与本次删除同事务,任一步失败整体回滚。
|
||||
List<Map<String, Object>> dependentDeletes = rows(request, DEPENDENT_DELETES);
|
||||
if (!deleteRows.isEmpty() && !dependentDeletes.isEmpty()) {
|
||||
executeDependentDeletes(connection, table, deleteRows, dependentDeletes);
|
||||
}
|
||||
if (deleteTarget != null && !deleteTarget.isBlank() && !deleteRows.isEmpty()) {
|
||||
executeDeletes(connection, request, tableName, keyField, deleteTarget, deleteRows);
|
||||
} else {
|
||||
@@ -450,6 +466,25 @@ public class DataSaveService {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行请求声明的依赖行删除(设计《删除策略》§6.2)。
|
||||
*
|
||||
* <p>具体匹配与删除走删除服务:那里有物理删除执行器、主键类型校验和删除日志,
|
||||
* 与其它删除路径同一套实现,不在这里再写一份。
|
||||
*/
|
||||
private void executeDependentDeletes(
|
||||
Connection connection,
|
||||
DbUtils.TableMetadata table,
|
||||
List<Map<String, Object>> deleteRows,
|
||||
List<Map<String, Object>> dependentDeletes
|
||||
) {
|
||||
try {
|
||||
dataDeleteService.deleteDependents(connection, table, deleteRows, dependentDeletes);
|
||||
} catch (SQLException exception) {
|
||||
throw new SaveObjectException(table.requestedName(), "delete", -1, exception);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过删除服务执行 saveobjt 的删除行(设计 §6.2)。
|
||||
*
|
||||
|
||||
@@ -29,7 +29,9 @@ import java.util.regex.Pattern;
|
||||
* 三层,与《FMS新系统核心表结构设计》第 14 节一一对应:
|
||||
* 1. 动作权限(14.1 / 14.2):s_power(action.{模块}.{动作})+ s_user_power,白名单语义;
|
||||
* 2. 字段权限(14.3):s_user_field_power 的 b_view / b_export,无记录按模块默认(可看可导出);
|
||||
* 3. 数据范围(14.4):s_user_data_power,按操作精确匹配优先、多条规则 OR、整体再与其它条件 AND。
|
||||
* 3. 数据范围(14.4):s_user_data_power,按操作精确匹配优先、多条规则 OR、整体再与其它条件 AND;
|
||||
* 按范围判的规则所用的字段取自模块配置 s_module.b_scope_field(记录归属人字段),
|
||||
* self 直接比该字段,dept / dept_tree 由当前用户反查部门后再比。
|
||||
*/
|
||||
@Service
|
||||
public class SqlPermissionService {
|
||||
@@ -107,7 +109,7 @@ public class SqlPermissionService {
|
||||
* 无生效规则返回 null,表示该模块无数据范围限制。
|
||||
*/
|
||||
public String buildDataScopeCondition(String moduleId, String userId, String operation) {
|
||||
String sql = "SELECT [b_operation], [b_scope_type], [b_scope_field], [b_condition_sql] "
|
||||
String sql = "SELECT [b_operation], [b_scope_type], [b_condition_sql] "
|
||||
+ "FROM [s_user_data_power] "
|
||||
+ "WHERE [b_user_id] = ? AND [b_module_id] = ? AND [b_canuse] = 1 "
|
||||
+ "AND ([b_operation] = ? OR [b_operation] = '*') "
|
||||
@@ -128,20 +130,29 @@ public class SqlPermissionService {
|
||||
List<Map<String, Object>> effective = exact.isEmpty() ? wildcard : exact;
|
||||
|
||||
String deptId = null;
|
||||
// 判断字段只来自模块配置(s_module.b_scope_field,记录归属人字段):同一个模块的
|
||||
// 所有用户必须用同一字段判范围,所以授权行上的同名列不参与判定。按需读一次,
|
||||
// 只有按范围判的规则(self / dept / dept_tree)才需要它
|
||||
String moduleScopeField = null;
|
||||
List<String> fragments = new ArrayList<>();
|
||||
for (Map<String, Object> row : effective) {
|
||||
String scopeType = text(row.get("b_scope_type")).toLowerCase(Locale.ROOT);
|
||||
String scopeField = text(row.get("b_scope_field"));
|
||||
switch (scopeType) {
|
||||
case "all", "" -> {
|
||||
// 全部数据:不追加条件
|
||||
}
|
||||
case "self" -> {
|
||||
String field = requireScopeField(scopeField);
|
||||
if (moduleScopeField == null) {
|
||||
moduleScopeField = loadModuleScopeField(connection, moduleId);
|
||||
}
|
||||
String field = requireScopeField(moduleScopeField);
|
||||
fragments.add(quote(field) + " = " + dbUtils.toSqlStringLiteral(userId));
|
||||
}
|
||||
case "dept", "dept_tree" -> {
|
||||
String field = requireScopeField(scopeField);
|
||||
if (moduleScopeField == null) {
|
||||
moduleScopeField = loadModuleScopeField(connection, moduleId);
|
||||
}
|
||||
String field = requireScopeField(moduleScopeField);
|
||||
if (deptId == null) {
|
||||
deptId = loadDeptId(connection, userId);
|
||||
}
|
||||
@@ -197,6 +208,20 @@ public class SqlPermissionService {
|
||||
return rows.isEmpty() ? null : text(rows.get(0).get("b_dept_id"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 模块的数据范围字段(s_module.b_scope_field,记录归属人字段如 b_inputuser_id)。
|
||||
* 配在模块上而不是授权行上:同一个模块的所有用户必须用同一字段判范围。
|
||||
* 未配置时返回空串,由 requireScopeField 明确报错,不静默放行。
|
||||
*/
|
||||
private String loadModuleScopeField(Connection connection, String moduleId) throws SQLException {
|
||||
List<Map<String, Object>> rows = query(
|
||||
connection,
|
||||
"SELECT [b_scope_field] FROM [s_module] WHERE [b_id] = ?",
|
||||
moduleId
|
||||
);
|
||||
return rows.isEmpty() ? "" : text(rows.get(0).get("b_scope_field"));
|
||||
}
|
||||
|
||||
private String loadDeptPath(Connection connection, String deptId) throws SQLException {
|
||||
List<Map<String, Object>> rows = query(
|
||||
connection,
|
||||
|
||||
@@ -1,837 +1 @@
|
||||
=== 新库 FMS:表结构 ===
|
||||
|
||||
--- b_cargo_damage_status ---
|
||||
(表不存在)
|
||||
|
||||
--- b_bulkforkliftpersonname ---
|
||||
(表不存在)
|
||||
|
||||
--- b_bulktype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_bulkpersonname ---
|
||||
(表不存在)
|
||||
|
||||
--- b_bulkstevedorepersonname ---
|
||||
(表不存在)
|
||||
|
||||
--- b_charging_method ---
|
||||
(表不存在)
|
||||
|
||||
--- b_unloading_method ---
|
||||
(表不存在)
|
||||
|
||||
--- b_sys_b_lessfull ---
|
||||
(表不存在)
|
||||
|
||||
--- b_sys_edittype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_vessel ---
|
||||
(表不存在)
|
||||
|
||||
--- b_freightpayment ---
|
||||
(表不存在)
|
||||
|
||||
--- b_con_type ---
|
||||
(表不存在)
|
||||
|
||||
--- b_jsfs ---
|
||||
(表不存在)
|
||||
|
||||
--- b_city ---
|
||||
(表不存在)
|
||||
|
||||
--- b_ivtype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_sys_sex ---
|
||||
(表不存在)
|
||||
|
||||
--- b_sys_copies ---
|
||||
(表不存在)
|
||||
|
||||
--- b_cztype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_sys_level ---
|
||||
(表不存在)
|
||||
|
||||
--- b_sys_operator ---
|
||||
(表不存在)
|
||||
|
||||
--- b_blstate ---
|
||||
(表不存在)
|
||||
|
||||
--- b_sys_state ---
|
||||
(表不存在)
|
||||
|
||||
--- b_sys_feesf ---
|
||||
(表不存在)
|
||||
|
||||
--- bc_priceList_type ---
|
||||
(表不存在)
|
||||
|
||||
--- b_sys_yesno ---
|
||||
(表不存在)
|
||||
|
||||
--- b_sys_pricelisttype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_ystype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_billtype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_bgtype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_httype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_transway ---
|
||||
(表不存在)
|
||||
|
||||
--- b_sys_hdtype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_package ---
|
||||
(表不存在)
|
||||
|
||||
--- b_progress ---
|
||||
(表不存在)
|
||||
|
||||
--- b_zxstate ---
|
||||
(表不存在)
|
||||
|
||||
--- b_depot ---
|
||||
(表不存在)
|
||||
|
||||
--- b_depotouttype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_depotintype ---
|
||||
(表不存在)
|
||||
|
||||
--- car_daily_feetype ---
|
||||
(表不存在)
|
||||
|
||||
--- car_jiayou_jsfs ---
|
||||
(表不存在)
|
||||
|
||||
--- car_jiayou_type ---
|
||||
(表不存在)
|
||||
|
||||
--- b_cdtype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_shfs ---
|
||||
(表不存在)
|
||||
|
||||
--- car_jiayou_youliao ---
|
||||
(表不存在)
|
||||
|
||||
--- b_thfs ---
|
||||
(表不存在)
|
||||
|
||||
--- b_wangdian ---
|
||||
(表不存在)
|
||||
|
||||
--- b_ywfrom ---
|
||||
(表不存在)
|
||||
|
||||
--- b_ywtype_tc ---
|
||||
(表不存在)
|
||||
|
||||
--- b_servicetype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_contype ---
|
||||
(表不存在)
|
||||
|
||||
--- b_ywtype_ht ---
|
||||
(表不存在)
|
||||
|
||||
--- b_dcterm ---
|
||||
(表不存在)
|
||||
|
||||
--- b_ywtype_ky ---
|
||||
(表不存在)
|
||||
|
||||
=== 旧库 G3HY2025:表结构 ===
|
||||
|
||||
--- b_cargo_damage_status ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- b_bulkforkliftpersonname ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- b_bulktype ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- b_bulkpersonname ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- b_bulkstevedorepersonname ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- b_charging_method ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- b_unloading_method ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- b_sys_b_lessfull ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
|
||||
--- b_sys_edittype ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 200 null
|
||||
|
||||
--- b_vessel ---
|
||||
b_id varchar 50 not null
|
||||
b_vessel_name varchar 100 null
|
||||
b_edicode varchar 50 null
|
||||
b_voy varchar 100 null
|
||||
b_bz varchar 200 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_freightpayment ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_con_type ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_edicode varchar 50 null
|
||||
b_bz varchar 200 null
|
||||
b_type varchar 50 null
|
||||
b_linkcon varchar 50 null
|
||||
b_default varchar 1 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_jsfs ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_city ---
|
||||
b_id varchar 50 not null
|
||||
b_name_c varchar 50 null
|
||||
b_name_e varchar 50 null
|
||||
b_country_name_e varchar 50 null
|
||||
b_country_name_c varchar 50 null
|
||||
b_bz varchar 500 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_ivtype ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_sys_sex ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 200 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_sys_copies ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 200 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_cztype ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 200 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_sys_level ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 200 null
|
||||
|
||||
--- b_sys_operator ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 200 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_blstate ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_sys_state ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_sys_feesf ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
|
||||
--- bc_priceList_type ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
|
||||
--- b_sys_yesno ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
|
||||
--- b_sys_pricelisttype ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_dw_id varchar 50 null
|
||||
b_dw_name varchar 50 null
|
||||
|
||||
--- b_ystype ---
|
||||
b_id varchar 50 null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 200 null
|
||||
|
||||
--- b_billtype ---
|
||||
b_id varchar 50 null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- b_bgtype ---
|
||||
b_id varchar 50 null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- b_httype ---
|
||||
b_id varchar 50 null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_transway ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 100 null
|
||||
b_edicode varchar 50 null
|
||||
b_bz varchar 100 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_sys_hdtype ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 200 null
|
||||
|
||||
--- b_package ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_edicode varchar 50 null
|
||||
b_bz varchar 100 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_progress ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 500 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_zxstate ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 200 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_depot ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 200 null
|
||||
|
||||
--- b_depotouttype ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
|
||||
--- b_depotintype ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
|
||||
--- car_daily_feetype ---
|
||||
b_id varchar 50 null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- car_jiayou_jsfs ---
|
||||
b_id varchar 50 null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- car_jiayou_type ---
|
||||
b_id varchar 50 null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- b_cdtype ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
|
||||
--- b_shfs ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
|
||||
--- car_jiayou_youliao ---
|
||||
b_id varchar 50 null
|
||||
b_name varchar 50 null
|
||||
|
||||
--- b_thfs ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
|
||||
--- b_wangdian ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
|
||||
--- b_ywfrom ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
|
||||
--- b_ywtype_tc ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_bz varchar 50 null
|
||||
|
||||
--- b_servicetype ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_contype ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_ywtype_ht ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_dcterm ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
--- b_ywtype_ky ---
|
||||
b_id varchar 50 not null
|
||||
b_name varchar 50 null
|
||||
b_inputuser_id varchar 50 null
|
||||
b_inputdatetime datetime 8 null
|
||||
b_updateuser_id varchar 50 null
|
||||
b_updatedatetime datetime 8 null
|
||||
|
||||
=== 旧库 G3HY2025:数据样例(每表前 3 行) ===
|
||||
|
||||
--- b_cargo_damage_status ---
|
||||
b_id b_name
|
||||
001 完好
|
||||
002 轻微破损
|
||||
(2 行)
|
||||
|
||||
--- b_bulkforkliftpersonname ---
|
||||
b_id b_name
|
||||
001 小张
|
||||
(1 行)
|
||||
|
||||
--- b_bulktype ---
|
||||
b_id b_name
|
||||
001 散货
|
||||
(1 行)
|
||||
|
||||
--- b_bulkpersonname ---
|
||||
b_id b_name
|
||||
001 张三
|
||||
002 李四
|
||||
(2 行)
|
||||
|
||||
--- b_bulkstevedorepersonname ---
|
||||
b_id b_name
|
||||
001 小王
|
||||
(1 行)
|
||||
|
||||
--- b_charging_method ---
|
||||
b_id b_name
|
||||
001 按件收费
|
||||
002 按托收费
|
||||
(2 行)
|
||||
|
||||
--- b_unloading_method ---
|
||||
b_id b_name
|
||||
001 吊车卸货
|
||||
002 铲车卸货
|
||||
(2 行)
|
||||
|
||||
--- b_sys_b_lessfull ---
|
||||
b_id b_name b_bz
|
||||
001 整箱 (null)
|
||||
002 拼箱 (null)
|
||||
(2 行)
|
||||
|
||||
--- b_sys_edittype ---
|
||||
b_id b_name b_bz
|
||||
001 selectid (null)
|
||||
002 selectname (null)
|
||||
003 date (null)
|
||||
(3 行)
|
||||
|
||||
--- b_vessel ---
|
||||
b_id b_vessel_name b_edicode b_voy b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 YM FOUNTAIN V.85W (null) N012 (null) (null) (null) (null) (null)
|
||||
002 YM FOUNTAIN V.75W (null) N45 (null) (null) (null) (null) (null)
|
||||
003 COSCO BOSTON (null) 202N (null) (null) (null) (null)
|
||||
(3 行)
|
||||
|
||||
--- b_freightpayment ---
|
||||
b_id b_name b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 FREIGHT PREPAID (null) (null) (null) (null)
|
||||
002 FREIGHT COLLECT (null) (null) (null) (null)
|
||||
003 Shipping LOYal (null) (null) (null) (null)
|
||||
(3 行)
|
||||
|
||||
--- b_con_type ---
|
||||
b_id b_name b_edicode b_bz b_type b_linkcon b_default b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 40GP 大箱 40GP 1 (null) (null) g3soft 2026-07-14 11:09:20.0
|
||||
002 20GP 小箱 20GP 1 (null) (null) g3soft 2026-07-14 11:09:21.0
|
||||
003 45HQ 大箱 45HQ 1 (null) (null) g3soft 2026-07-14 11:09:22.0
|
||||
(3 行)
|
||||
|
||||
--- b_jsfs ---
|
||||
b_id b_name b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 汇票 (null) (null) (null) (null)
|
||||
002 转账 (null) (null) (null) (null)
|
||||
(2 行)
|
||||
|
||||
--- b_city ---
|
||||
b_id b_name_c b_name_e b_country_name_e b_country_name_c b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
CNNGB 宁波 NINGBO (null) (null) (null) (null) (null) (null)
|
||||
CS001 阿拉木图 阿拉木图 (null) (null) (null) (null) (null) (null) (null)
|
||||
CS002 阿腾科里 阿腾科里 (null) (null) (null) (null) (null) (null) (null)
|
||||
(3 行)
|
||||
|
||||
--- b_ivtype ---
|
||||
b_id b_name b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 增值税专票 (null) (null) (null) (null) (null)
|
||||
002 增值税普票 (null) (null) (null) (null) (null)
|
||||
(2 行)
|
||||
|
||||
--- b_sys_sex ---
|
||||
b_id b_name b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 男 (null) (null) (null) (null) (null)
|
||||
002 女 (null) (null) (null) (null) (null)
|
||||
(2 行)
|
||||
|
||||
--- b_sys_copies ---
|
||||
b_id b_name b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 ZERO (null) (null) (null) (null) (null)
|
||||
002 ONE (null) (null) (null) (null) (null)
|
||||
003 TWO (null) (null) (null) (null) (null)
|
||||
(3 行)
|
||||
|
||||
--- b_cztype ---
|
||||
b_id b_name b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 过磅称重法M1 (null) (null) (null) (null) (null)
|
||||
002 累计相加称重法M2 (null) (null) (null) (null) (null)
|
||||
(2 行)
|
||||
|
||||
--- b_sys_level ---
|
||||
b_id b_name b_bz
|
||||
001 1 (null)
|
||||
002 2 (null)
|
||||
003 3 (null)
|
||||
(3 行)
|
||||
|
||||
--- b_sys_operator ---
|
||||
b_id b_name b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 等于 (null) (null) (null) (null) (null)
|
||||
002 不等于 (null) (null) (null) (null) (null)
|
||||
003 为空 (null) (null) (null) (null) (null)
|
||||
(3 行)
|
||||
|
||||
--- b_blstate ---
|
||||
b_id b_name b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 电放 (null) (null) (null) (null)
|
||||
002 正本 (null) (null) (null) (null)
|
||||
(2 行)
|
||||
|
||||
--- b_sys_state ---
|
||||
b_id b_name b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 草拟 (null) (null) (null) (null) (null)
|
||||
002 送审 (null) (null) (null) (null) (null)
|
||||
003 审核通过 (null) (null) (null) (null) (null)
|
||||
(3 行)
|
||||
|
||||
--- b_sys_feesf ---
|
||||
b_id b_name b_bz
|
||||
001 应收 (null)
|
||||
002 应付 (null)
|
||||
(2 行)
|
||||
|
||||
--- bc_priceList_type ---
|
||||
b_id b_name b_bz
|
||||
001 客户价目 (null)
|
||||
002 供应商 (null)
|
||||
(2 行)
|
||||
|
||||
--- b_sys_yesno ---
|
||||
b_id b_name b_bz
|
||||
001 是 (null)
|
||||
002 否 (null)
|
||||
(2 行)
|
||||
|
||||
--- b_sys_pricelisttype ---
|
||||
b_id b_name b_dw_id b_dw_name
|
||||
001 委托单位 b_customer_id v_customer_company
|
||||
002 订舱单位 b_dcdw_id v_dc_company
|
||||
003 报关行 b_bgcompany_id v_bg_company
|
||||
(3 行)
|
||||
|
||||
--- b_ystype ---
|
||||
b_id b_name b_bz
|
||||
001 应收款 (null)
|
||||
002 应付款 (null)
|
||||
003 预收款 (null)
|
||||
(3 行)
|
||||
|
||||
--- b_billtype ---
|
||||
b_id b_name
|
||||
001 实际账单
|
||||
002 虚拟账单
|
||||
(2 行)
|
||||
|
||||
--- b_bgtype ---
|
||||
b_id b_name
|
||||
001 一般贸易
|
||||
002 市场采购
|
||||
(2 行)
|
||||
|
||||
--- b_httype ---
|
||||
b_id b_name b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 客户合同 (null) (null) (null) (null) (null)
|
||||
002 供应商合同 (null) (null) (null) (null) (null)
|
||||
(2 行)
|
||||
|
||||
--- b_transway ---
|
||||
b_id b_name b_edicode b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 CY-CY (null) (null) (null) (null) (null) (null)
|
||||
002 DOOR-DOOR (null) (null) (null) (null) (null) (null)
|
||||
003 CFS-CFS (null) (null) (null) (null) (null) (null)
|
||||
(3 行)
|
||||
|
||||
--- b_sys_hdtype ---
|
||||
b_id b_name b_bz
|
||||
001 纸质 (null)
|
||||
002 电子 (null)
|
||||
(2 行)
|
||||
|
||||
--- b_package ---
|
||||
b_id b_name b_edicode b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
BAGS BAGS (null) (null) (null) (null) (null) (null)
|
||||
BALES BALES (null) (null) (null) (null) (null) (null)
|
||||
CASES CASES (null) (null) (null) (null) (null) (null)
|
||||
(3 行)
|
||||
|
||||
--- b_progress ---
|
||||
b_id b_name b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 Active (null) (null) (null) (null)
|
||||
002 Confirmed (null) (null) (null) (null)
|
||||
003 Completed (null) (null) (null) (null)
|
||||
(3 行)
|
||||
|
||||
--- b_zxstate ---
|
||||
b_id b_name b_bz b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 待处理 (null) (null) (null) (null)
|
||||
002 处理中 (null) (null) (null) (null)
|
||||
003 已处理 (null) (null) (null) (null)
|
||||
(3 行)
|
||||
|
||||
--- b_depot ---
|
||||
b_id b_name b_bz
|
||||
001 杭州
|
||||
002 宁波
|
||||
(2 行)
|
||||
|
||||
--- b_depotouttype ---
|
||||
b_id b_name b_bz
|
||||
001 领用出库
|
||||
(1 行)
|
||||
|
||||
--- b_depotintype ---
|
||||
b_id b_name b_bz
|
||||
001 采购入库
|
||||
(1 行)
|
||||
|
||||
--- car_daily_feetype ---
|
||||
b_id b_name
|
||||
001 过路费
|
||||
(1 行)
|
||||
|
||||
--- car_jiayou_jsfs ---
|
||||
b_id b_name
|
||||
001 计算金额
|
||||
002 计算升数
|
||||
003 计算单价
|
||||
(3 行)
|
||||
|
||||
--- car_jiayou_type ---
|
||||
b_id b_name
|
||||
001 现金加油
|
||||
002 油卡加油
|
||||
(2 行)
|
||||
|
||||
--- b_cdtype ---
|
||||
b_id b_name b_bz
|
||||
001 外用司机 (null)
|
||||
002 自有车 (null)
|
||||
(2 行)
|
||||
|
||||
--- b_shfs ---
|
||||
b_id b_name b_bz
|
||||
001 自提 (null)
|
||||
002 送货上门 (null)
|
||||
(2 行)
|
||||
|
||||
--- car_jiayou_youliao ---
|
||||
b_id b_name
|
||||
001 柴油
|
||||
002 尿素
|
||||
(2 行)
|
||||
|
||||
--- b_thfs ---
|
||||
b_id b_name b_bz
|
||||
001 客户送货 (null)
|
||||
002 上门提货 (null)
|
||||
(2 行)
|
||||
|
||||
--- b_wangdian ---
|
||||
b_id b_name b_bz
|
||||
001 宁波
|
||||
002 西安
|
||||
003 乌鲁木齐
|
||||
(3 行)
|
||||
|
||||
--- b_ywfrom ---
|
||||
b_id b_name b_bz
|
||||
001 非系统 (null)
|
||||
002 同行 (null)
|
||||
(2 行)
|
||||
|
||||
--- b_ywtype_tc ---
|
||||
b_id b_name b_bz
|
||||
001 零担 (null)
|
||||
002 整车 (null)
|
||||
003 专车 (null)
|
||||
(3 行)
|
||||
|
||||
--- b_servicetype ---
|
||||
b_id b_name b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
1 全程散货 g3soft 2026-08-17 13:57:47.0(null) (null)
|
||||
2 全程买箱 g3soft 2026-08-17 13:59:27.0(null) (null)
|
||||
3 全程车皮 g3soft 2026-08-17 14:00:04.0(null) (null)
|
||||
(3 行)
|
||||
|
||||
--- b_contype ---
|
||||
b_id b_name b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
1 租箱 g3soft 2026-08-17 14:05:51.0(null) (null)
|
||||
2 买箱 g3soft 2026-08-17 14:06:07.0(null) (null)
|
||||
3 铁路箱 g3soft 2026-08-17 14:06:20.0(null) (null)
|
||||
(3 行)
|
||||
|
||||
--- b_ywtype_ht ---
|
||||
b_id b_name b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
(0 行)
|
||||
|
||||
--- b_dcterm ---
|
||||
b_id b_name b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 条款1 g3soft 2026-08-31 15:48:02.0(null) (null)
|
||||
(1 行)
|
||||
|
||||
--- b_ywtype_ky ---
|
||||
b_id b_name b_inputuser_id b_inputdatetime b_updateuser_id b_updatedatetime
|
||||
001 进口 g3soft 2026-08-31 15:46:48.0(null) (null)
|
||||
(1 行)
|
||||
|
||||
Reference in new issue
Block a user