1. 程式人生 > >金蝶EAS8.2,二次開發單據關聯費用預算,新預算介面

金蝶EAS8.2,二次開發單據關聯費用預算,新預算介面

EAS8.2版本中,可以通過後臺插入資料的方式實現二次開發單據關聯費用預算。

二次開發單據關聯費用預算之後,相應的預算扣減、返還、查詢等操作可以通過呼叫新預算介面來實現,以下程式碼僅供參考。

文末附加了如何通過插入資料的方式實現二次開發單據參與費用預算,資料庫指令碼Sql語句供參考。

package com.kingdee.eas.custom.cnodc.util;

import java.math.BigDecimal;
import java.util.List;
import com.kingdee.bos.BOSException;
import com.kingdee.bos.Context;
import com.kingdee.bos.dao.IObjectValue;
import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
import com.kingdee.bos.metadata.entity.SelectorItemCollection;
import com.kingdee.bos.metadata.entity.SelectorItemInfo;
import com.kingdee.bos.util.BOSUuid;
import com.kingdee.eas.common.EASBizException;
import com.kingdee.eas.custom.cnodc.OversPayFactory;
import com.kingdee.eas.custom.cnodc.OversPayInfo;
import com.kingdee.eas.ma.budget.BgCtrlResultCollection;
import com.kingdee.eas.ma.budget.BudgetCtrlFacadeFactory;
import com.kingdee.eas.ma.control.BgControlFacadeFactory;
import com.kingdee.eas.ma.nbudget.BgControlCaller;
import com.kingdee.eas.ma.nbudget.face.IBalance;
import com.kingdee.eas.ma.nbudget.face.IBudgetBalance;
import com.kingdee.eas.ma.nbudget.face.IControlResult;

/**
 * 預算控制(新預算)工具類
 * @author 郭旭
 *
 */
public class BgUtil extends BgControlCaller{
	
	/**
	 * 獲取工具例項
	 * 用於呼叫標準產品提供的相關預算操作
	 */
	public static BgUtil getInstance(){
		BgUtil instance = new BgUtil();
		return instance;
	}
	
	/**
	 * 預算餘額查詢,用於前端
	 */
	public static BigDecimal getBalance(IObjectValue model) throws EASBizException, BOSException{
	 
		BigDecimal balance = BigDecimal.ZERO;
		IBudgetBalance service = BgUtil.getInstance().queryBalance(model); //預算餘額查詢
                List<IBalance> data = service.getBalance();
                if(!data.isEmpty()){
        	    IBalance bal = data.get(0);
                    balance = bal.getBalance();
                }
        
		return balance;
		
	}
	
	/**
	 * 預算餘額查詢,用於後臺
	 */
	public static BigDecimal getBalance(Context ctx, IObjectValue model) throws EASBizException, BOSException{
	 
		BigDecimal balance = BigDecimal.ZERO;
		IBudgetBalance service = BgUtil.getInstance().queryBalance(ctx, model); //預算餘額查詢
                List<IBalance> data = service.getBalance();
                if(!data.isEmpty()){
        	    IBalance bal = data.get(0);
                    balance = bal.getBalance();
                }
        
		return balance;
		
	}
	
	/**
	 * 預算扣減,用於前端
	 */
	public static boolean deductBg(String billId) throws EASBizException, BOSException{
		
		boolean flag = false;
		IControlResult rs = BgUtil.getInstance().requestBudget(BOSUuid.read(billId));
                int result = rs.getResult();
                if(result == 1){
        	    flag = true;
                }
        
		return flag;
		
	}
	
	/**
	 * 預算扣減,用於後臺
	 */
	public static boolean deductBg(Context ctx, String billId) throws EASBizException, BOSException{
		
		boolean flag = false;
		IControlResult rs = BgUtil.getInstance().requestBudget(ctx, BOSUuid.read(billId));
                int result = rs.getResult();
                if(result == 1){
        	    flag = true;
                }
        
		return flag;
		
	}
	
	/**
	 * 預算返還,用於前端
	 */
	public static boolean returnBg(String billId) throws EASBizException, BOSException{
		
		boolean flag = false;
                IControlResult rs = BgUtil.getInstance().returnBudget(BOSUuid.read(billId));
                if(rs.getResult() == 1){
        	    flag = true;
                }
        
		return flag;
		
	}
	
	/**
	 * 預算返還,用於後臺
	 */
	public static boolean returnBg(Context ctx, String billId) throws EASBizException, BOSException{
		
		boolean flag = false;
                IControlResult rs = BgUtil.getInstance().returnBudget(ctx, BOSUuid.read(billId));
                if(rs.getResult() == 1){
        	    flag = true;
                }
        
		return flag;
		
	}
	
	/**
	 * 查詢預算,用於前端
	 * 重寫標準產品對應方法
	 */
	@Override
	public IBudgetBalance queryBalance(IObjectValue model) throws BOSException, EASBizException {
		
		if (model == null) return null;
		IBudgetBalance balance = null;
		// if (checkControl()) { //直接走新預算介面
		if (true) {
			com.kingdee.eas.ma.control.face.IBudgetBalance _balance = BgControlFacadeFactory.getRemoteInstance().queryBalance(model);
			balance = transBudgetBalance(_balance);
		} else {
			BgCtrlResultCollection colls = BudgetCtrlFacadeFactory.getRemoteInstance().getBudget(model);
			balance = transBudgetBalance(colls);
		}
		
		return balance;
		
	}
	
	/**
	 * 查詢預算,用於後臺
	 * 重寫標準產品對應方法
	 */
	@Override
	public IBudgetBalance queryBalance(Context ctx, IObjectValue model) throws BOSException, EASBizException {
		
		if ((ctx == null) || (model == null)) return null;
		IBudgetBalance balance = null;
		// if (checkControl(ctx)) { //直接走新預算介面
		if (true) {
			com.kingdee.eas.ma.control.face.IBudgetBalance _balance = BgControlFacadeFactory.getLocalInstance(ctx).queryBalance(model);
			balance = transBudgetBalance(_balance);
		} else {
			BgCtrlResultCollection colls = BudgetCtrlFacadeFactory.getLocalInstance(ctx).getBudget(model);
			balance = transBudgetBalance(colls);
		}
		
		return balance;
		
	}
	
	/**
	 * 預算扣減,用於前端
	 * 解決二次開發單據無法進行預算扣減的問題
	 */
	@Override
	public IControlResult requestBudget(BOSUuid billId) throws BOSException, EASBizException {
		
		if (billId == null) return null;
		IControlResult result = null;
		com.kingdee.eas.ma.control.face.IControlResult _result = null;
		// if (checkControl()) { //直接走新預算介面
		if (true) {
			
			// 海外工資單需要特殊邏輯分支
			if(billId.getType().toString().equals("E98E8C79")){
				
				SelectorItemCollection selectors = new SelectorItemCollection();
		                selectors.add(new SelectorItemInfo("*"));
		                selectors.add(new SelectorItemInfo("costCenter.id")); //成本中心
		                selectors.add(new SelectorItemInfo("costCenter.number"));
		                selectors.add(new SelectorItemInfo("feeType.id")); //費用型別
		                selectors.add(new SelectorItemInfo("feeType.number"));
		                selectors.add(new SelectorItemInfo("currency.id")); //幣別
		                selectors.add(new SelectorItemInfo("currency.number"));
		                OversPayInfo billModel = OversPayFactory.getRemoteInstance().getOversPayInfo(new ObjectUuidPK(billId), selectors);
				_result = BgControlFacadeFactory.getRemoteInstance().requestBudget(billModel);
				
			} else {
				_result = BgControlFacadeFactory.getRemoteInstance().requestBudget(billId);
			}
			
			result = transResult(_result);
			
		} else {
			result = requestOldBudget(billId);
		}
		
		return result;
		
	}
	
	/**
	 * 預算扣減,用於後臺
	 * 解決二次開發單據無法進行預算扣減的問題
	 */
	@Override
	public IControlResult requestBudget(Context ctx, BOSUuid billId) throws BOSException, EASBizException {
		
		if ((ctx == null) || (billId == null)) return null;

		IControlResult result = null;
		com.kingdee.eas.ma.control.face.IControlResult _result = null;
		// if (checkControl(ctx)) { //直接走新預算介面
		if (true) {
			
			// 海外工資單需要特殊邏輯分支
			if(billId.getType().toString().equals("E98E8C79")){
				
				SelectorItemCollection selectors = new SelectorItemCollection();
		                selectors.add(new SelectorItemInfo("*"));
		                selectors.add(new SelectorItemInfo("costCenter.id")); //成本中心
		                selectors.add(new SelectorItemInfo("costCenter.number"));
		                selectors.add(new SelectorItemInfo("feeType.id")); //費用型別
		                selectors.add(new SelectorItemInfo("feeType.number"));
		                selectors.add(new SelectorItemInfo("currency.id")); //幣別
		                selectors.add(new SelectorItemInfo("currency.number"));
		                OversPayInfo billModel = OversPayFactory.getLocalInstance(ctx).getOversPayInfo(new ObjectUuidPK(billId), selectors);
				_result = BgControlFacadeFactory.getLocalInstance(ctx).requestBudget(billModel);
				
			} else {
				_result = BgControlFacadeFactory.getLocalInstance(ctx).requestBudget(billId);
			}
			
			result = transResult(ctx, _result);
		} else {
			result = requestOldBudget(ctx, billId);
		}
		
		return result;
		
	}
	
	/**
	 * 預算返還,用於前端
	 * 重寫標準產品對應方法
	 */
	@Override
	public IControlResult returnBudget(BOSUuid billId) throws BOSException, EASBizException {
		
		if (billId == null) return null;
		IControlResult result = null;
		// if (checkControl()) {
		if (true) {
			com.kingdee.eas.ma.control.face.IControlResult _result = BgControlFacadeFactory.getRemoteInstance().returnBudget(billId);
			result = transResult(_result);
		} else {
			result = returnOldBudget(billId);
		}
		
		return result;
		
	}
	
	/**
	 * 預算返還,用於後臺
	 * 重寫標準產品對應方法
	 */
	@Override
	public IControlResult returnBudget(Context ctx, BOSUuid billId) throws BOSException, EASBizException {
		
		if ((ctx == null) || (billId == null)) return null;
		IControlResult result = null;
		// if (checkControl(ctx)) {
		if (true) {
			com.kingdee.eas.ma.control.face.IControlResult _result = BgControlFacadeFactory.getLocalInstance(ctx).returnBudget(billId);
			result = transResult(ctx, _result);
		} else {
			result = returnOldBudget(ctx, billId);
		}
		
		return result;
		
	}
	
}

通過插入資料的方式關聯費用預算,指令碼如下:

--業務型別欄位說明
業務組織,1
業務專案及組合,2
幣別,3
業務日期,4
預算扣減項,5
適用條件,6

--生成INSERT語句,需執行伺服器端指令碼
geninsert select * from T_MBG_BgControlData where fid = 'GG+f9Tbj/Ue9whbR3fTpiIoa948='

--刪除海外工資單相關的註冊資訊
--delete from T_MBG_BgControlData where FBIZUNIT = 'com.kingdee.eas.custom.cnodc.app.OversPay';
--備份資料表
select * into T_MBG_BgControlData_bak from T_MBG_BgControlData
select * from T_MBG_BgControlData_bak

--查詢海外工資單相關的註冊資訊
select * from T_MBG_BgControlData where FBIZUNIT = 'com.kingdee.eas.custom.cnodc.app.OversPay';

--業務組織
insert into t_mbg_bgcontroldata(FID, FCREATORID, FCREATETIME, FLASTUPDATEUSERID, FLASTUPDATETIME, FCONTROLUNITID, 
FBIZSYSTEM, FBIZSYSTEMALIAS_L1, FBIZSYSTEMALIAS_L2, FBIZSYSTEMALIAS_L3, FBIZUNIT, 
FBIZUNITALIAS_L1, FBIZUNITALIAS_L2, FBIZUNITALIAS_L3, FBIZ, 
FBIZALIAS_L1, FBIZALIAS_L2, FBIZALIAS_L3, FBIZTYPE, FISDEFAULT, FISSYSTEMDEFAULT)
values 
(NEWBOSID('8A1AF78F'), null, null, null, null, null, 
'com.kingdee.eas.cp.bc', null, '費用管理', '費用管理', 'com.kingdee.eas.custom.cnodc.app.OversPay', 
null, '海外工資單', '海外工資單', 'costCenter.number', 
null, '成本中心.編碼', '成本中心.編碼', 1, 0, 1);

--業務專案及組合
insert into t_mbg_bgcontroldata(FID, FCREATORID, FCREATETIME, FLASTUPDATEUSERID, FLASTUPDATETIME, FCONTROLUNITID, 
FBIZSYSTEM, FBIZSYSTEMALIAS_L1, FBIZSYSTEMALIAS_L2, FBIZSYSTEMALIAS_L3, FBIZUNIT, 
FBIZUNITALIAS_L1, FBIZUNITALIAS_L2, FBIZUNITALIAS_L3, FBIZ, 
FBIZALIAS_L1, FBIZALIAS_L2, FBIZALIAS_L3, FBIZTYPE, FISDEFAULT, FISSYSTEMDEFAULT)
values 
(NEWBOSID('8A1AF78F'), null, null, null, null, null, 
'com.kingdee.eas.cp.bc', null, '費用管理', '費用管理', 'com.kingdee.eas.custom.cnodc.app.OversPay', 
null, '海外工資單', '海外工資單', 'feeType.number', 
null, '費用類別.編碼', '費用類別.編碼', 2, 0, 1);

--幣別
insert into t_mbg_bgcontroldata(FID, FCREATORID, FCREATETIME, FLASTUPDATEUSERID, FLASTUPDATETIME, FCONTROLUNITID, 
FBIZSYSTEM, FBIZSYSTEMALIAS_L1, FBIZSYSTEMALIAS_L2, FBIZSYSTEMALIAS_L3, FBIZUNIT, 
FBIZUNITALIAS_L1, FBIZUNITALIAS_L2, FBIZUNITALIAS_L3, FBIZ, 
FBIZALIAS_L1, FBIZALIAS_L2, FBIZALIAS_L3, FBIZTYPE, FISDEFAULT, FISSYSTEMDEFAULT)
values 
(NEWBOSID('8A1AF78F'), null, null, null, null, null, 
'com.kingdee.eas.cp.bc', null, '費用管理', '費用管理', 'com.kingdee.eas.custom.cnodc.app.OversPay', 
null, '海外工資單', '海外工資單', 'currency.number', 
null, '幣別.編碼', '幣別.編碼', 3, 0, 1);

--業務日期
insert into t_mbg_bgcontroldata(FID, FCREATORID, FCREATETIME, FLASTUPDATEUSERID, FLASTUPDATETIME, FCONTROLUNITID, 
FBIZSYSTEM, FBIZSYSTEMALIAS_L1, FBIZSYSTEMALIAS_L2, FBIZSYSTEMALIAS_L3, FBIZUNIT, 
FBIZUNITALIAS_L1, FBIZUNITALIAS_L2, FBIZUNITALIAS_L3, FBIZ, 
FBIZALIAS_L1, FBIZALIAS_L2, FBIZALIAS_L3, FBIZTYPE, FISDEFAULT, FISSYSTEMDEFAULT)
values 
(NEWBOSID('8A1AF78F'), null, null, null, null, null, 
'com.kingdee.eas.cp.bc', null, '費用管理', '費用管理', 'com.kingdee.eas.custom.cnodc.app.OversPay', 
null, '海外工資單', '海外工資單', 'bizDate', 
null, '業務日期', '業務日期', 4, 1, 1);

--預算扣減項
insert into t_mbg_bgcontroldata(FID, FCREATORID, FCREATETIME, FLASTUPDATEUSERID, FLASTUPDATETIME, FCONTROLUNITID, 
FBIZSYSTEM, FBIZSYSTEMALIAS_L1, FBIZSYSTEMALIAS_L2, FBIZSYSTEMALIAS_L3, FBIZUNIT, 
FBIZUNITALIAS_L1, FBIZUNITALIAS_L2, FBIZUNITALIAS_L3, FBIZ, 
FBIZALIAS_L1, FBIZALIAS_L2, FBIZALIAS_L3, FBIZTYPE, FISDEFAULT, FISSYSTEMDEFAULT)
values 
(NEWBOSID('8A1AF78F'), null, null, null, null, null, 
'com.kingdee.eas.cp.bc', null, '費用管理', '費用管理', 'com.kingdee.eas.custom.cnodc.app.OversPay', 
null, '海外工資單', '海外工資單', 'accountSumUSD', 
null, '實發合計USD', '實發合計USD', 5, 0, 1);

--適用條件
insert into t_mbg_bgcontroldata(FID, FCREATORID, FCREATETIME, FLASTUPDATEUSERID, FLASTUPDATETIME, FCONTROLUNITID, 
FBIZSYSTEM, FBIZSYSTEMALIAS_L1, FBIZSYSTEMALIAS_L2, FBIZSYSTEMALIAS_L3, FBIZUNIT, 
FBIZUNITALIAS_L1, FBIZUNITALIAS_L2, FBIZUNITALIAS_L3, FBIZ, 
FBIZALIAS_L1, FBIZALIAS_L2, FBIZALIAS_L3, FBIZTYPE, FISDEFAULT, FISSYSTEMDEFAULT)
values 
(NEWBOSID('8A1AF78F'), null, null, null, null, null, 
'com.kingdee.eas.cp.bc', null, '費用管理', '費用管理', 'com.kingdee.eas.custom.cnodc.app.OversPay', 
null, '海外工資單', '海外工資單', 'costCenter.number', 
null, '成本中心.編碼', '成本中心.編碼', 6, 0, 1);

--呼叫預算介面分析
select FBiz from T_MBG_BgControlData 
where FBizUnit = 'com.kingdee.eas.custom.cnodc.app.OversPay' and FBizType = 4 and FIsDefault = 1 order by FBiz
select * from T_MBG_BgControlData 
where FBizUnit = 'com.kingdee.eas.custom.cnodc.app.OversPay' and FBizType = 4 and FIsDefault = 1 order by FBiz
update T_MBG_BgControlData set FIsDefault = 1 where FBizUnit = 'com.kingdee.eas.custom.cnodc.app.OversPay' and FBizType = 4