apzl_leasing/src_base/com/amarsoft/app/base/trans/TransactionHelper.java
2018-06-03 22:26:41 +08:00

268 lines
11 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.amarsoft.app.base.trans;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.amarsoft.app.base.trans.common.checker.TransactionChecker;
import com.amarsoft.app.base.util.BUSINESSOBJECT_CONSTANTS;
import com.amarsoft.app.base.businessobject.BusinessObject;
import com.amarsoft.app.base.businessobject.BusinessObjectManager;
import com.amarsoft.app.base.config.impl.TransactionConfig;
import com.amarsoft.app.base.exception.ALSException;
import com.amarsoft.app.base.util.DateHelper;
import com.amarsoft.are.lang.DateX;
import com.amarsoft.are.lang.StringX;
/**
* 核算交易公用方法
*/
public class TransactionHelper {
public static final String transaction_create_check="createCheck"; //交易创建检查
public static final String transaction_create="create"; //交易创建
public static final String transaction_load="load";//交易数据加载
public static final String transaction_execute_check="executeCheck";//交易执行数据检查
public static final String transaction_execute="execute";//交易业务逻辑执行
public static final String transaction_delete="delete";//交易删除
public static final String transaction_invoking="invoking";//接口调用
/**
* 根据交易流水号加载交易信息
* @param transactionSerialNo
* @param bomanager
* @return
* @throws Exception
*/
public static BusinessObject loadTransaction(String transactionSerialNo, BusinessObjectManager bomanager) throws Exception {
BusinessObject transaction = bomanager.loadBusinessObject(BUSINESSOBJECT_CONSTANTS.transaction, "SerialNo",transactionSerialNo);
return TransactionHelper.loadTransaction(transaction, bomanager);
}
/**
* 根据交易对象加载交易信息
* @param transaction
* @param bomanager
* @return 加载了各种关联对象的交易对象
* @throws Exception
*/
public static BusinessObject loadTransaction(BusinessObject transaction, BusinessObjectManager bomanager) throws Exception {
int i=TransactionHelper.run(transaction, bomanager, TransactionHelper.transaction_load);
if(i==1) return transaction;
else throw new ALSException("ED2005",transaction.getString("TRANSCODE"));
}
/**
* 根据传入参数创建一个交易
*
* @param transactionCode 交易代码
* @param documentObject 单据对象
* @param relativeObject 关联对象
* @param userID 用户编号
* @param orgID 机构编号
* @param transactionDate 交易日期
* @param bomanager 对象管理器
* @return
* @throws Exception
*/
public static BusinessObject createTransaction(String transactionCode, BusinessObject documentObject,
BusinessObject relativeObject, String userID,String orgID, String transactionDate,
BusinessObjectManager bomanager) throws Exception {
BusinessObject transactionConfig = TransactionConfig.getTransactionConfig(transactionCode);
BusinessObject transaction = BusinessObject.createBusinessObject(BUSINESSOBJECT_CONSTANTS.transaction);
transaction.generateKey();
transaction.setAttributeValue("TransCode", transactionCode);
transaction.setAttributeValue("TransName", transactionConfig.getString("TransactionName"));
transaction.setAttributeValue("OccurDate", DateHelper.getBusinessDate());
if (!StringX.isEmpty(transactionDate)) {
transaction.setAttributeValue("TransDate", transactionDate);
} else {
transaction.setAttributeValue("TransDate", DateHelper.getBusinessDate());
}
transaction.setAttributeValue("InputUserID", userID);
transaction.setAttributeValue("InputOrgID", orgID);
transaction.setAttributeValue("InputTime",DateX.format(new Date(), DateHelper.AMR_NOMAL_DATETIME_FORMAT));
if (relativeObject != null) {
transaction.setAttributeValue("RelativeObjectType", relativeObject.getBizClassName());
transaction.setAttributeValue("RelativeObjectNo", relativeObject.getKeyString());
transaction.appendBusinessObject(relativeObject.getBizClassName(),relativeObject);
}
// 创建交易单据
String documentType = transactionConfig.getString("DocumentType");
if (StringX.isEmpty(documentType)) {
documentObject = null;// 交易不需要单据,如计提等交易
}
else {// 如果需要单据
if (documentObject == null) {
documentObject = BusinessObject.createBusinessObject(documentType);
documentObject.generateKey();
transaction.setAttributeValue("DocumentType", documentType);
transaction.setAttributeValue("DocumentNo", documentObject.getKeyString());
bomanager.updateBusinessObject(documentObject);
}
else {
transaction.setAttributeValue("DocumentType", documentObject.getBizClassName());
transaction.setAttributeValue("DocumentNo", documentObject.getKeyString());
}
transaction.appendBusinessObject(documentType, documentObject);
}
bomanager.updateBusinessObject(transaction);
//执行交易内部创建逻辑
int r = TransactionHelper.run(transaction, bomanager, TransactionHelper.transaction_create);
if(r == 1) return transaction;
else throw new ALSException("ED2006",transaction.getString("TRANSCODE"));//创建交易异常
}
/**
* 交易流程提交前或交易执行前检查
*
* 如需前端展示请根据返回结果Map获取提示信息和强制控制信息
* 1、提示校验信息 List<Message> warningMessage = map.get("Warning");
* 2、强制校验信息 List<Message> errorMessage = map.get("Error");
* 使用者可根据以上两项信息进行前端展示,便于客户了解提示或错误信息。
* @param transaction
* @param bomanager
* @return
* @throws Exception
*/
public static Map<String,List<String>> executeCheckTransaction(BusinessObject transaction,BusinessObjectManager bomanager) throws Exception{
Map<String,List<String>> hs = new HashMap<String,List<String>>();
List<String> warningMessage = new ArrayList<String>();
List<String> errorMessage= new ArrayList<String>();
hs.put("Warning", warningMessage);
hs.put("Error", errorMessage);
String transactionCode=transaction.getString("TransCode");
BusinessObject transactionConfig = TransactionConfig.getTransactionConfig(transactionCode);
List<BusinessObject> tplist=transactionConfig.getBusinessObjectsByAttributes(TransactionConfig.JBO_NAME_PROCEDURE_CONFIG, "type",TransactionHelper.transaction_execute_check);
int j = 1;
for(BusinessObject tpConfig:tplist) {
TransactionChecker tp = (TransactionChecker)TransactionProcedure.create(transaction, tpConfig, bomanager);
j=tp.run();
if (j != 1) {
throw new ALSException("ED2012",transactionCode);//交易检查异常
}
warningMessage.addAll(tp.getWarningMessage());
errorMessage.addAll(tp.getErrorMessage());
}
return hs;
}
/**
* 根据交易流水号删除交易及其相关信息
* @param transactionSerialNo
* @param bomanager
* @throws Exception
*/
public static void deleteTransaction(String transactionSerialNo,BusinessObjectManager bomanager) throws Exception{
BusinessObject transaction = bomanager.keyLoadBusinessObject(BUSINESSOBJECT_CONSTANTS.transaction, transactionSerialNo);
if(transaction == null) throw new ALSException("ED2009",transactionSerialNo);
bomanager.deleteBusinessObject(transaction);
String documentType = transaction.getString("DocumentType");
String documentNo = transaction.getString("DocumentNo");
if(!StringX.isEmpty(documentType) && !StringX.isEmpty(documentNo) && !BUSINESSOBJECT_CONSTANTS.transaction.equals(documentType))
{
BusinessObject documentObject = bomanager.keyLoadBusinessObject(documentType, documentNo);
if(documentObject == null) throw new ALSException("ED2010",documentType, documentNo);
bomanager.deleteBusinessObject(documentObject);
}
int r = TransactionHelper.run(transaction, bomanager, TransactionHelper.transaction_delete);
if(r != 1) throw new ALSException("ED2011",transaction.getString("TRANSCODE"));
}
/**
* 交易内部业务数据处理执行
* @param transaction
* @param bomanager
* @return
* @throws Exception
*/
public static BusinessObject executeTransaction(BusinessObject transaction, BusinessObjectManager bomanager) throws Exception{
int r = TransactionHelper.run(transaction, bomanager, TransactionHelper.transaction_execute);
if(r == 1) return transaction;
else throw new ALSException("ED2007",transaction.getString("TRANSCODE"));
}
/**
* 外部系统接口调用执行
* @param transaction
* @param bomanager
* @return
* @throws Exception
*/
public static BusinessObject invokingTransaction(BusinessObject transaction, BusinessObjectManager bomanager) throws Exception{
int r = TransactionHelper.run(transaction, bomanager, TransactionHelper.transaction_invoking);
if(r == 1) return transaction;
else throw new ALSException("ED2007",transaction.getString("TRANSCODE"));
}
/**
* 根据指定类型执行交易信息
* @param transaction
* @param bomanager
* @param type
* @return
* @throws Exception
*/
private static int run(BusinessObject transaction, BusinessObjectManager bomanager,String type)
throws Exception {
String transactionCode=transaction.getString("TransCode");
BusinessObject transactionConfig = TransactionConfig.getTransactionConfig(transactionCode);
List<BusinessObject> tplist=transactionConfig.getBusinessObjectsByAttributes(TransactionConfig.JBO_NAME_PROCEDURE_CONFIG, "type",type);
int j = 1;
for(BusinessObject tpConfig:tplist) {
TransactionProcedure tp = TransactionProcedure.create(transaction, tpConfig, bomanager);
j=tp.run();
if (j != 1) {
return j;
}
}
return j;
}
/**
* 交易创建检查
*
* 如需前端展示请根据返回结果Map获取提示信息和强制控制信息
* 1、提示校验信息 List<Message> warningMessage = map.get("Warning");
* 2、强制校验信息 List<Message> errorMessage = map.get("Error");
* 使用者可根据以上两项信息进行前端展示,便于客户了解提示或错误信息。
* @param transaction
* @param bomanager
* @return
* @throws Exception
*/
public static Map<String,List<String>> createCheckTransaction(String transactionCode,BusinessObject relativeObject,BusinessObject documentObject,BusinessObjectManager bomanager) throws Exception{
Map<String,List<String>> hs = new HashMap<String,List<String>>();
List<String> warningMessage = new ArrayList<String>();
List<String> errorMessage= new ArrayList<String>();
hs.put("Warning", warningMessage);
hs.put("Error", errorMessage);
BusinessObject transactionConfig = TransactionConfig.getTransactionConfig(transactionCode);
List<BusinessObject> tplist=transactionConfig.getBusinessObjectsByAttributes(TransactionConfig.JBO_NAME_PROCEDURE_CONFIG, "type",TransactionHelper.transaction_create_check);
int j = 1;
for(BusinessObject tpConfig:tplist) {
TransactionChecker tp = (TransactionChecker)TransactionProcedure.create(transactionCode, tpConfig, bomanager);
tp.setRelativeObject(relativeObject);
tp.setdocumentObject(documentObject);
j=tp.run();
if (j != 1) {
throw new ALSException("ED2012",transactionCode);//交易检查异常
}
warningMessage.addAll(tp.getWarningMessage());
errorMessage.addAll(tp.getErrorMessage());
}
return hs;
}
}