GL table说明

gl_code_combinations:科目组合

字段名

含义

备注

code_combination_id

主键,科目编码ID,自动编号

  

segment1

分行代码

  

setgment2

是受益部门

  

segment3

科目代码

  

segment4

产品

  

segment5

渠道

  

segment6

来源

  

segment7

备用

没用

summary_flag

是否组合、汇总?

Y/N

Enabled_flag

是否有效

Y/N

   

   

gl_je_batches:总帐批

字段名

含义

备注

Je_batch_id

批ID,系统自动生成

  

NAME

批名

  

STATUS

过帐状态

U(未过帐),S(选定已过帐,但不一定过帐成功),P(已过帐)

Status_verified

  

  

Actual_flag

余额类型

A-实际;B-预算;E-保留款

Default_effective_date

有效日期

  

code_combination_id

科目编码ID

gl_code_combinations表的外键

Default_period_name

会计期

  

description

说明

  

Running_total_dr

借项

  

Running_total_cr

贷项

  

Packet_id

  

  

Posting_run_id

  

  

Request_id

  

  

Org_id

  

  

PERIOD_SET_NAME

会计期帐套名称

  

  

  

  

   

   

gl_je_headers:凭证头

字段名

含义

备注

Je_header_id

主键,凭证头ID,系统自动编

  

Ledger_id

帐套ID,gl_ledgers表外键

  

Je_category

类别,1表示手工凭证

gl_je_categories_v外键

Je_source

来源

JE_SOURCE

JE_CATEGORY

  

1

2

  

1

3

  

1

4

  

1

5

  

1

6

  

21

22

  

Assets

Addition

  

Assets

Adjustment

  

Assets

Depreciation

  

Assets

Reclass

  

Assets

Retirement

  

Assets

Transfer

  

AutoCopy

1

  

Budget Journal

Budget

  

Budget Journal

IGIGBNYC

  

Closing Journal

Income Statement Close

  

Manual

1

  

Payables

Payments

付款

Payables

Purchase Invoices

采购发票

Recurring

1

  

Revaluation

Revaluation

  

Period_name

会计期

  

NAME

日记帐名称

  

CURRENCY_CODE

币种

  

STATUS

折换类型

  

Default_effective_date

生效日期

  

Je_batch_id

批ID,gl_je_batches的外键

  

description

描述

  

Running_total_dr

借项

  

Running_total_cr

贷项

  

  

  

  

   

gl_je_lines:凭证行

字段名

含义

备注

Je_header_id

凭证头ID

gl_je_headers外键

Je_line_num

凭证行编号

与Je_header_id构成联合主键

Ledger_id

帐套ID

gl_ledgers表外键

Code_combination_id

编码ID,

gl_code_combinations表的外键

Period_name

会计期

  

Effective_date

发生日期

  

status

过帐状态

U(未过帐),S(选定已过帐,但不一定过帐成功),P(已过帐)

Entered_dr

借项

  

Entered_cr

贷项

  

description

描述

  

  

  

  

   

   

gl_balances:科目余额

字段名

含义

备注

ledger

帐套ID

gl_ledgers表外键

Code_combination_id

科目ID

  

Currency_code

币种

  

Period_name

会计期间

  

Budget_version_id

  

  

Period_type

  

  

Period_year

预算年度

  

Period_num

预算月度

  

Period_net_dr

本期发生的借 

  

Period_net_cr

本期发生的贷 

  

 Quarter_to_date_dr

本期初的本季度借

 

 Quarter_to_date_cr

本期初的本季度贷

  

 Project_to_date_dr

本期初的项目至今借

 

 Project_to_date_cr

本期初的项目至今贷

 

 Begin_blance_dr

本期初的年度至今借

 

 Begin_blance_cr

本期初的年度至今贷 

 

   

   

gl_je_categories:凭证分类

gl_je_sources:凭证来源

   

cux_kmye_values:科目余额表,维度确定余额就确定,自己整的(程序:cux_report_main_pkg)

LEDGER_ID

帐套ID

PERIOD_NAME

会计期

DATA_DATE

会计日期

REPORT_TYPE

会计期类型,自己定的,1为日报,2为月报,3为季报,4为年报

BEGIN_BALANCE_DR

起始余额,根据会计期类型来定

PERIOD_DR

发生余额

END_BALANCE_DR

最终余额

segment6

数据来源,10为财务,20为核心

   

   

   

select * from gl_summary_templates --科目汇总模板

select * from gl_account_hierarchies --科目汇总模板层次

   

会计科目:FND_FLEX_VALUE_SETS 、FND_FLEX_VALUES_TL、FND_FLEX_VALUES

   

   

---------------------------

AND c.segment1 IN( SELECT DISTINCT ffvc.flex_value --取得父机构下面的所有子机构

FROM fnd_flex_value_children_v ffvc,

fnd_flex_value_sets ffvs

WHERE (ffvc.parent_flex_value = p_segment1 --父机构

OR ffvc.flex_value = p_segment1)

AND ffvc.flex_value_set_id = ffvs.flex_value_set_id

AND ffvs.flex_value_set_name = 'BOCD_COA_COMPANY')

---------------------------

cux_func_public_all.get_je_source_name

获取来源名

   

   

   

----------------- 请求相关

FND_CONCURRENT_PROGRAMS_TL

请求定义主表

FND_CONC_REQ_SUMMARY_V

请求执行情况表

   

   

-------------- 根据不同责任获取不同帐套

where gjh.ledger_id=case when fnd_profile.value('RESP_NAME') like '0001%' then 2044 else 2021 end

<think> 根据用户提供的代码片段,我们注意到在`getInfos`方法中使用了`res_customer_company`表的关联查询。用户现在提供了`Res_customer_companyEntity`类的定义,但问题中没有给出具体的类定义代码。因此,我们需要基于常见的场景进行推断。 ### 问题分析 在之前的代码中,我们使用MyBatis-Plus的关联查询(通过`mybatis-plus-join`)来连接`res_customer_company`表。可能存在的问题包括: 1. **关联查询结果映射异常**:当`res_customer_company`表没有对应数据时,由于左连接,`Res_customer_companyEntity`集合应为空,但实际返回了非空集合(包含一个id有值的对象)。 2. **实体类映射问题**:`Res_customer_companyEntity`的字段映射配置可能不正确,特别是主键映射。 ### 解决方案 #### 1. 检查实体类的主键和字段映射 确保`Res_customer_companyEntity`类正确使用了MyBatis-Plus的注解: ```java public class Res_customer_companyEntity { @TableId(value = "id", type = IdType.AUTO) // 明确指定主键字段映射 private Long id; @TableField("customer_id") // 如果数据库字段是customer_id,而属性是customerId,则需要配置 private Long customerId; // 其他字段... } ``` 如果数据库字段与实体属性采用驼峰和下划线自动转换,请确保配置正确(在application.yml中): ```yaml mybatis-plus: configuration: map-underscore-to-camel-case: true ``` #### 2. 检查关联查询 在之前的关联查询中,我们使用: ```java .selectCollection(Res_customer_companyEntity.class, Res_partnerEntity::getRes_customer_company) .leftJoin(Res_customer_companyEntity.class,"res_customer_company",Res_customer_companyEntity::getCustomerId,Res_partnerEntity::getId) ``` 这里需要确保: - `Res_partnerEntity`中的`res_customer_company`属性是一个集合类型(如`List<Res_customer_companyEntity>`)。 - 关联条件正确:`Res_customer_companyEntity::getCustomerId`对应数据库中的`customer_id`字段,并且与`Res_partnerEntity::getId`关联。 #### 3. 处理无数据时的空集合 如果左连接没有匹配的记录,MyBatis-Plus应该返回一个空集合(而不是包含一个id为null或0的对象)。如果出现非空集合,可能是以下原因: - **实体类构造问题**:检查`Res_customer_companyEntity`是否有无参构造函数,并且集合初始化正确。 - **结果映射冲突**:由于多表查询字段名重复,导致数据被错误映射。解决方法:在关联查询中避免使用`selectAll`,而是显式指定每个字段并使用别名。 ### 修改建议 修改查询,显式指定字段并避免字段名冲突: ```java MPJLambdaWrapper<Res_partnerEntity> wrapper = JoinWrappers .lambda("res_partner", Res_partnerEntity.class) .select(Res_partnerEntity::getId, Res_partnerEntity::getName, ...) // 显式选择主表字段 .selectCollection(Res_customer_companyEntity.class, Res_partnerEntity::getRes_customer_company) .leftJoin(Res_customer_companyEntity.class, Res_customer_companyEntity::getCustomerId, Res_partnerEntity::getId) // ... 其他关联 .eq(Res_partnerEntity::getId, id) .eq(Res_contacts_relationEntity::getDepartmentCode, currentDeptId); ``` ### 处理无数据返回空集合 如果上述修改后问题依旧,我们可以通过自定义结果处理器来过滤掉无效数据。但更推荐检查框架版本和配置。 ### 验证步骤 1. 打印实际执行的SQL,检查左连接部分是否返回了非预期的行。 2. 在数据库客户端中运行该SQL,观察`res_customer_company`表关联部分的结果。 ### 相关问题 §§相关问题§§ 1. MyBatis-Plus中如何正确配置一对多关联查询? 2. 如何解决MyBatis-Plus多表查询中的字段名冲突? 3. 在Spring Boot中如何打印MyBatis-Plus执行的SQL语句? 4. MyBatis-Plus的Lambda关联查询在使用集合属性时有什么注意事项? ### 引用说明 [^1]: 用户提供的代码片段中,通过`addAssertPath`方法添加资源包,但该引用与当前问题关联性不大,此处仅供参考。 </think> ### Java 中 `Res_customer_companyEntity` 类定义与关联查询优化指南 #### 一、典型类定义结构分析(基于常见场景推断) ```java public class Res_customer_companyEntity { // 主键映射 - 需显式声明 @TableId(value = "company_id", type = IdType.AUTO) private Long id; // 关联字段 - 必须与数据库外键一致 @TableField("customer_id") private Long customerId; // 业务字段 private String companyName; private String taxNumber; // 必须有无参构造器 public Res_customer_companyEntity() {} } ``` #### 二、关联查询关键问题诊断 在您的 `getInfos` 方法中,`res_customer_company` 表关联存在两个核心问题: 1. **字段映射冲突** 当关联表无数据时仍返回带 ID 的对象,是因为: ```mermaid graph LR A[SELECT *] --> B[字段名重复] B --> C[res_customer_company.id 覆盖主表字段] C --> D[返回虚假ID数据] ``` 2. **集合映射失效** `getRes_customer_company()` 返回异常对象,通常因为: - 缺少 `@TableField(exist = false)` 注解 - 未正确定义集合类型 #### 三、优化方案与完整实现 ##### 1. 修正实体类映射 ```java public class Res_partnerEntity { // 主表字段 private String id; // 关联集合必须声明exist=false @TableField(exist = false) private List<Res_customer_companyEntity> res_customer_company; } ``` ##### 2. 重构关联查询(解决字段冲突) ```java {6-7,17} MPJLambdaWrapper<Res_partnerEntity> wrapper = JoinWrappers .lambda("res_partner", Res_partnerEntity.class) // 显式指定字段替代selectAll .selectAs(Res_partnerEntity::getId, "main_id") .selectAs(Res_partnerEntity::getName, "main_name") // 关联表使用精确字段映射 .selectCollection(Res_customer_companyEntity.class, wrapper -> wrapper .select(Res_customer_companyEntity::getCompanyName) .select(Res_customer_companyEntity::getTaxNumber) ) .leftJoin(Res_customer_companyEntity.class, Res_customer_companyEntity::getCustomerId, Res_partnerEntity::getId ) // ...其他关联 .eq(Res_partnerEntity::getId, id); ``` ##### 3. 添加空结果处理器 ```java public Res_partnerEntity getInfos(String id) { Res_partnerEntity entity = this.selectJoinOne(Res_partnerEntity.class, wrapper); // 手动处理空集合 if(entity.getRes_customer_company() != null) { entity.getRes_customer_company().removeIf(item -> item.getId() == null && item.getCompanyName() == null ); } return entity; } ``` #### 四、验证方案 1. **SQL 日志验证** ```bash # application.yml 配置 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ``` 2. **单元测试用例** ```java @Test void testEmptyCompany() { // 模拟无关联数据场景 when(companyMapper.selectList(any())).thenReturn(Collections.emptyList()); Res_partnerEntity result = service.getInfos("test123"); assertTrue(result.getRes_customer_company().isEmpty()); } ``` #### 五、核心配置检查清单 | 配置项 | 要求 | 检查位置 | |--------------------------------|----------------------|----------------------------| | `map-underscore-to-camel-case` | 必须为 true | application.yml | | `@TableId` 注解 | 明确指定 value 属性 | Res_customer_companyEntity | | 集合属性声明 | `@TableField(exist=false)` | Res_partnerEntity | ### 常见错误解决方案表 | 现象 | 原因 | 解决方案 | |------------------------------|---------------------|----------------------------| | 返回带 ID 的空对象 | 字段名冲突 | 使用 `selectAs()` 显式别名 | | 集合包含 null 元素 | 左连接默认行为 | 添加 `removeIf()` 后处理 | | 关联字段映射失败 | 驼峰命名未转换 | 开启 `map-underscore-to-camel-case` | | 主键被覆盖 | 未指定 `@TableId` | 明确注解主键字段 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值