NCV61会计平台技术红皮书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
会计平台-技术红皮书
创建人:郭宝华
1概述
目的
本文档基于,主要描述会计平台对外提供的服务、会计平台与其他相关系统之间的交互。
以指导相关业务系统通过会计平台和其他业务系统进行业务实体转换。
读者
相关系统分析、设计、开发
2产品/模块设计说明
设计原则与前提
对原会计平台进行抽象,提炼成统一的业务对象转换平台框架,支持业务单据与财务凭证的转换,业务单据与责任凭证的转换。
会计平台设计前提:
●适应多组织变化、支持集团应用
●支持业务单据与多目标对象的转换,且可配置。
即根据需要可配置业务
单据生成总账凭证、责任会计凭证或行业的成本单据等(制造成本单据,金融行业成本单据等)
●支持推式和拉式对象转换
●支持来源对象汇总和目标对象汇总
●支持转换规则、汇总规则、取数规则、关联关系的扩展,支持行业插件名词解释
3总体架构设计
总体架构图
会计平台整体框架
4 核心模型设计
主要业务模型
4.1.1推式不汇总立即生成模型(系统默认模式)(财务业务一体化,业务确认财务立即有反映的场景下建议使用)
注:蓝色为主流程,紫色为有接口或服务注入的地方
该流程涉及会计平台1个服务,3个接口注入,详细是说明见
4.1.2推式不汇总条件生成模式(财务业务关联不紧密,不要求业务确认财务立即有反映的场景建议使用)
处理
该流程涉及0个服务,3个接口。
4.1.3 推式,汇总来源单据模式(来源单据数据量大的时候建议使用)
该流程涉及1个服务,4个接口。
核心服务
4.2.1 消息发送服务(接收发送到会计平台的消息)
package interface IFipMessageService {
public FipMsgResultVO sendMessage(FipMessageVO fipmessagevo) throws BusinessException;
public FipMsgResultVO[] sendMessages(FipMessageVO[] fipmessagevo) throws BusinessException;
}
package class FipMessageVO extends ValueObject {
public final static int MESSAGETYPE_ADD = 0;// 增加
public final static int MESSAGETYPE_DEL = 1;// 删除
public final static int MESSAGETYPE_OFFSET = 3;// 红冲(60不建议使用)
private int messagetype = 0;// 消息类型包括增加删除
private static final long serialVersionUID = 945821L;
private AggregatedValueObject billVO = null;
private FipRelationInfoVO messageinfo = null;
}
package class FipRelationInfoVO extends ValueObject {
private static final long serialVersionUID = -L;
private String pk_group = null;// 集团
private String pk_org = null;// 组织
private String pk_system = null;// 系统类型
private String pk_billtype = null; // 单据类型或交易类型PK
private String relationID = null; // 关联号,和单据之间的唯一关联,通过该字段唯一对应一个传入的聚合VO
// 注意:一个聚合VO不一定只对应一个单据VO,这个是业务系统控制的,所以这里不是单据主键,而是一个分组号,当关联号和单据一一对应的时候,可以使用PK
private String pk_operator = null; // 操作员PK,指的是发送会计平台的那个人,不是单据的制单人
private UFDate busidate = null; // 业务日期,业务生效的日期,不一定是单据日期
private String defdoc1 = null; // 自定义关联档案1 关联档案型的数据,比如交易类型,业务类别,收发类别等。
注意:档案型的自定义项必须为全局或集团级的档案类型,不支持组织级的档案类型
private String defdoc2 = null; // 自定义关联档案2
private String defdoc3 = null; // 自定义关联档案3
private String freedef1 = null; // 自定义项1 说明性的文字,包括金额,摘要,单据编码等
private String freedef2 = null; // 自定义项2
private String freedef3 = null; // 自定义项3
private String freedef4 = null; // 自定义项4
private String freedef5 = null; // 自定义项5
}
4.2.2 关联关系查询服务(根据消息信息查询关联关系)
/**
*
*/
package interface IFipRelationQueryService {
/**
* 根据来源单据信息查目标单据。
*/
public FipRelationInfoVO[] queryDesBill(FipRelationInfoVO vo) throws BusinessException;
/**
* 根据目标单据信息查来源单据。
*/
public FipRelationInfoVO[] querySrcBill(FipRelationInfoVO vo) throws BusinessException;
/**
* 根据来源单据信息查关联关系
*/
public FipRelationVO[] queryRelationsBySrc(FipRelationInfoVO vo) throws BusinessException;
/**
* 根据目标单据信息查关联关系
public FipRelationVO[] queryRelationsByDes(FipRelationInfoVO vo) throws BusinessException;
}
4.2.3 关联单据查询服务(根据信息信息查相关单据)
/**
*
*/
package interface IFipBillQueryService {
/**
* 根据关联号等消息查单据(根据系统自动匹配来源或目的)
*/
public FipExtendAggVO[] queryBill(FipRelationInfoVO[] vo) throws BusinessException;
/**
* 根据来源关联信息查来源单据
*/
public FipExtendAggVO[] querySrcBill(FipRelationInfoVO[] vo) throws BusinessException;
* 根据目标关联信息查目标单据
*/
public FipExtendAggVO[] queryDesBill(FipRelationInfoVO[] vo) throws BusinessException;
}
与来源系统相关的接口(需要来源系统实现)
4.3.1 单据查询接口(根据信息查相关联的单据,主要用于重算、条件生成)/**
*
*/
package * 实现重算功能的来源系统提供的单据查询服务,通过业务关联号取业务单据。
*
* 该接口为会计平台提出,其他系统实现的一个取数服务,使用者为会计平台或其他通过会计平台取相关联的单据的目标系统
*/
public interface IBillReflectorService {
/**
* 通过业务关联号获得单据实体,为重算和拉式生成提供单据查询服务
*
* 一般情况下,只使用FipMsgInfoVO里的pk_billtype和relationID字段即可以找到对应数据,特殊情况下,允许来源系统在消息里放置自定义项,这些自定义项会计平台只传递和显示,不使用。
*
* 例如,按期间分表存储数据的时候,可以把freedef1作为期间发送会计平台,会计平台只负责传递和显示,不做修改和业务上使用。
*/
FipExtendAggVO[] queryBillByRelations(FipRelationInfoVO[] relationvos) throws BusinessException;
}
4.3.2 单据汇总接口(主要用于汇总来源单据模式)
/**
*
*/
package * 汇总来源单据服务,该服务由会计平台定义,相关系统实现,主要目的是为了减少会计平台上单据的数量
*/
public interface IBillSumService {
/**
* 汇总来源单据方法,该方法由会计平台定义,其他相关系统实现
*
* 主要功能:对于相同单据类型的一组单据,通过单据关联号根据分组字段在来源方进行汇总,生成一个或多个汇总后的单据
*
* 分组字段包括:入账设置中使用的影响因素,转换模板中使用的单据字段,单据模板中引用对照表的部分公式里使用的影响因素
*
*/
public FipMessageVO[] querySumBill(FipRelationInfoVO[] relationvos, String[] groupfields) throws BusinessException;
/**
* 汇总来源单据方法,该方法由会计平台定义,其他相关系统实现
*
* 主要功能:对于相同单据类型的一组单据,通过单据关联号根据分组字段在来源方进行汇总,生成一个或多个汇总后的单据
*
* 关联号将使用relationid in(子查询)的方式传递,relationIDinSQL传递的就是子查询的SQL
*
* 分组字段包括:入账设置中使用的影响因素,转换模板中使用的单据字段,单据模板中引用对照表的部分公式里使用的影响因素
*/
public FipMessageVO[] querySumBillBySQL(FipRelationInfoVO
relationvos, String[] groupfields, String relationIDinSQL) throws BusinessException;
}
4.3.3 拉式取数接口(主要用于拉式生成,暂时不支持)
/**
*
*/
package * 拉式生成的接口服务,该服务由会计平台定义,其他实现拉式生成方式的系统来实现
*/
public interface IBillDrawService {
/**
* 拉式取数接口,传入的是单据查询条件,该条件是由单据系统提供的自定义查询生成的,平台只做传递,不做修改
*/
public FipBillDrawRSVO[] drawBill(Object con) throws BusinessException;
}
与目标系统相关的接口(需要目标系统实现)
4.4.1 单据处理接口(保存、删除、查询等)
/**
*
*/
package * 目标单据服务,该服务由会计平台定义,目标系统实现,主要目的是为了统一会计平台对不同目的系统的调用
*/
public interface IDesBillService {
/**
* 目标系统保存单据方法
*/
public FipSaveResultVO saveBill(Object vo) throws BusinessException;
/**
* 删除目标系统单据的方法
*/
public void deleteBill(FipRelationInfoVO vo) throws BusinessException;
/**
* 是否可以反向处理单据,比如已经保存的是否可以删除,已经审核的是否可以反审核并删除
*
* 当该方法返回为true的时候,会计平台直接调用deleteBill应该可以删除目标系统的相应单据
*/
public boolean isRollbackable(FipRelationInfoVO vo) throws BusinessException;
/**
* 目标单据查询方法
*
*/
public FipExtendAggVO[] queryBillByRelations(FipRelationInfoVO[] vos) throws BusinessException;
}
第三方使用的接口
4.5.1 消息监听接口(可以在消息处理中注入自己的处理)
/**
*
*/
package * 外部系统对会计平台消息的监听。
*
* 如果某些系统对其他业务系统发送会计平台的消息感兴趣,则可以注册该监听器到会计平台
*
* <p>
* TODO 接口/类功能说明,使用说明(接口是否为服务组件,服务使用者,类是否线程安全等)。
* </p>
*
* 修改记录:<br>
* <li>修改人:修改日期:修改内容:</li> <br>
* <br>
*
* @see
* @author gbh
* @version
* @since 创建时间:2010-3-17 下午03:08:09
*/
public interface IFipMessageHook {
/**
* 该方法在消息发送到会计平台并且会计平台未做后继处理时被调用,该
方法和业务系统发送消息处与同一事物
*
* 如果只是使用消息里的信息,不对消息进行修改,则返回值请置为null,如果想对消息中的信息进行改写,则把修改后的结果返回
* <p>
* 修改记录:
* </p>
*
* @param vo
* @return
* @throws BusinessException
* @see
* @since
*/
public FipMessageVO beforeDispose(FipMessageVO vo) throws BusinessException;
/**
* 该方法在会计平台处理完相关信息,并准备返回业务系统之前被调用
*
* 注:消息处理完成指可以返回业务系统的状态,而不是消息处理完毕的状态,所以在这里监听可能无法获得下面这些数据:
*
* 汇总生成的结果,定时处理的结果,异步(不影响业务流程)处理的结果
*
* 因为会计平台的相关处理已经完成,所以监听系统只能使用消息的信息,而不能进行改写,故不设置返回值
*
* <p>
* 修改记录:
* </p>
*
* @param vo
* @return
* @throws BusinessException
* @see
* @since
*/
public void afterDisPose(FipMessageVO vo) throws BusinessException;
}
4.5.2 目标单据处理监听接口(可以在会计平台保存/删除目标单据的时候注入自己的处理)
/**
*
*/
package * <p>
* TODO 接口/类功能说明,使用说明(接口是否为服务组件,服务使用者,类是否线程安全等)。
* </p>
*
* 修改记录:<br>
* <li>修改人:修改日期:修改内容:</li> <br>
* <br>
*
* @see
* @author gbh
* @version
* @since 创建时间:2010-3-17 下午03:45:00
*/
public interface IFipOperateBillHook {
/**
* 在的saveBill方法前被调用方法说明:
* 修改记录:
* </p>
*
* @throws BusinessException
* @see
* @since
*/
public void beforeSave(Object vo) throws BusinessException;
/**
* 在的saveBill方法后并且保存关联关系后被调用
*
* 为了在该方法里可以访问来源单据和目标单据之间的关联关系,所以该方法应该在保存关联关系后被调用
*
* 方法说明:
* <p>
* 修改记录:
* </p>
*
* @throws BusinessException
* @since
*/
public void afterSave(FipSaveResultVO vo) throws BusinessException;
/**
* 在的deleteBill前被调用
*
* 方法说明:
* <p>
* 修改记录:
* </p>
*
* @throws BusinessException
* @see
* @since
*/
public void beforeDelete(FipRelationInfoVO infovo) throws BusinessException;
/**
* 在的deleteBill后被调用
*
* 方法说明:
* <p>
* 修改记录:
* </p>
*
* @throws BusinessException
* @see
* @since
*/
public void afterDelete(FipRelationInfoVO infovo) throws BusinessException;
}
来源单据UI
4.6.1 单据展示
4.6.2 自定义查询条件
目标单据UI
4.7.1 单据展示
4.7.2 合并条件展示
5 来源系统的快速实现
实现联查与重算的接口参考在fip_billregister表中对需要发送会计平台的单据类型或交易类型进行注册
需要注册的字段包括:
Billreflectclass IbillReflectorService接口的实现类
pk_billtype 需要发送会计平台的单据类型或交易类型的编码modulecode 模块号,例如gl,ar
可以参考pk_billtype=’D0’的记录
注意:如果FipRelationInfoVO的defdoc1有值,则fip_billregister的defdoc1应该是该值对应的档案实体的ID
组装消息FipRelationInfoVO,该VO包含业务实体的概要信息,可以帮助用户快速定位单据而不需要联查,内容如下
public class FipRelationInfoVO extends SuperVO {
private static final long serialVersionUID = -L;
private String pk_group = null;// 集团(必输项)
private String pk_org = null;// 组织(必输项)
private String pk_system = null;// 系统类型(必输项)
private String pk_billtype = null; // 单据类型或交易类型(必输项)
private String relationID = null; // 关联号(必输项),和单据之间的唯一关联,通过该字段唯一对应一个传入的聚合VO
// 注意:一个聚合VO不一定只对应一个单据VO,这个是业务系统控制的,所以这里不是单据主键,而是一个分组号,当关联号和单据一一对应的时候,可以使用PK
private String pk_operator = null; // 生效人(必输项),指的是发送会计平台使单据生效的那个人,不是单据的制单人
private UFDate busidate = null; // 业务日期(必输项),业务生效的日期,不一定是单据日期
private String defdoc1 = null; // 业务分类关联档案型的数据,比如交易类型,业务类别,收发类别等。
注意:必须为全局或集团级的档案类型,不支持组织级的档案类型
private String defdoc2 = null; // 自定义关联档案2
private String defdoc3 = null; // 自定义关联档案3
private String freedef1 = null; // 单据号
private String freedef2 = null; // 备注/说明
private String freedef3 = null; // 金额(需格式化)
private String freedef4 = null; // 自定义项4
private String freedef5 = null; // 自定义项5
}
调用[] ([] fipmessagevo) throws 发送消息到会计平台
6 目的系统的快速实现
实现联查与重算的接口实现目标单据的服务在fip_billregister表中进行注册需要注册的字段包括:
Billreflectclass IbillReflectorService接口的实现类
pk_billtype单据类型或交易类型的编码
modulecode 模块号,例如gl,ar
class_entity_id 分类定义目标档案实体ID,例如科目,要素
org_entity_id 目标单据主组织档案实体ID,例如财务核算账簿,责任账簿,成本中心
可以参考pk_billtype=’C0’的记录
在fip_entityattcfg中注册需要在模板上展示的字段
7附录。