nc65审批后回写(单据刷新)

nc65审批后回写(单据刷新)

1. 需求

审批通过后将之前截止会计期间为空的单据,截止会计期间设置为当前单据的开始会计期间。

2. 功能实现

  1. 审批后规则
    ApproveWriteBackRule.java
package nc.bs.jych.glfpzd.ace.bp.rule;

import java.util.List;

import nc.bs.dao.BaseDAO;
import nc.bs.framework.common.NCLocator;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.itf.jych.IGlfpzdMaintain;
import nc.jdbc.framework.processor.ColumnListProcessor;
import nc.vo.jych.glfpzd.AggGlfpzdVO;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.pubapp.pattern.pub.SqlBuilder;

public class ApproveWriteBackRule implements IRule<AggGlfpzdVO>{

	@Override
	public void process(AggGlfpzdVO[] aggvos) {
		for (int i = 0; i < aggvos.length; i++) {
			try {
				//审批通过后将之前截止会计期间为空的单据,截止会计期间设置为当前单据的开始会计期间
				approveAfterWrite(aggvos[i]);
			} catch (BusinessException e) {
				ExceptionUtils.wrappBusinessException(e.getMessage());
			}

		}
	}

	//审批通过后将之前截止会计期间为空的单据,截止会计期间设置为当前单据的开始会计期间
	private void approveAfterWrite(AggGlfpzdVO aggvo) throws BusinessException{
		SqlBuilder sqlBuilder = new SqlBuilder();
		sqlBuilder.append(" select h.pk_glfpzd ");
		sqlBuilder.append("   from jych_glfpzd h ");
		sqlBuilder.append("   inner join bd_accperiodmonth mon on h.kskjqj = mon.pk_accperiodmonth ");
		sqlBuilder.append("  where nvl(h.dr, 0) = 0 ");
		sqlBuilder.append("    and nvl(h.jzkjqj,'~') = '~' ");
		sqlBuilder.append("    and billstatus = 1 ");
		sqlBuilder.append("    and mon.yearmth < (select yearmth from bd_accperiodmonth where pk_accperiodmonth = '"+aggvo.getParentVO().getKskjqj()+"') ");
		List<String> pklist = (List<String>) getDao().executeQuery(sqlBuilder.toString(), new ColumnListProcessor());
		if(pklist != null && pklist.size() > 0){
			SqlBuilder sb = new SqlBuilder();
			sb.append(" update jych_glfpzd ");
			sb.append("   set jzkjqj = '"+aggvo.getParentVO().getKskjqj()+"' ");
			sb.append("  where nvl(dr, 0) = 0 ");
			sb.append("    and nvl(jzkjqj,'~') = '~' ");
			sb.append("    and pk_glfpzd", pklist.toArray(new String[0]));
			getDao().executeUpdate(sb.toString());
		}
	}

	private BaseDAO dao;
	private BaseDAO getDao(){
		if(dao == null){
			dao = new BaseDAO();
		}
		return dao;
	}
	
	//要修改哪个单子调哪个单子的接口
	private IGlfpzdMaintain service;
	private IGlfpzdMaintain getService(){
		if (service == null) {
			service = NCLocator.getInstance().lookup(IGlfpzdMaintain.class);
		}
		return service;
	}
}

  1. 重写审批按钮(审批后执行刷新操作)
    ApproveScriptAction.java
package nc.ui.jych.glfpzd.ace.action;

import java.awt.event.ActionEvent;
import java.util.List;

import nc.bs.framework.common.NCLocator;
import nc.itf.jych.IGlfpzdMaintain;
import nc.vo.jych.glfpzd.AggGlfpzdVO;

public class ApproveScriptAction extends nc.ui.pubapp.uif2app.actions.pflow.ApproveScriptAction{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@SuppressWarnings("unchecked")
	@Override
	public void doAction(ActionEvent e) throws Exception {

		super.doAction(e);
		
		List<AggGlfpzdVO> list = model.getData();
		AggGlfpzdVO[] aggvos = getService().queryGlfpzd(list);
		// 将数据显示到界面
		if(aggvos != null && aggvos.length > 0){
			this.getModel().initModel(aggvos);
		}else{
			this.getModel().initModel(null);
		}
	}
	
	private IGlfpzdMaintain service;
	
	private IGlfpzdMaintain getService(){
		if(service == null){
			service = NCLocator.getInstance().lookup(IGlfpzdMaintain.class);
		}
		return service;
	}
}

  1. 单据刷新方法(刷新多行)
    GlfpzdMaintainImpl.java
package nc.impl.jych;

import java.util.ArrayList;
import java.util.List;

import nc.bs.dao.BaseDAO;
import nc.impl.pub.ace.AceGlfpzdPubServiceImpl;
import nc.impl.pubapp.pattern.data.bill.BillQuery;
import nc.itf.jych.IGlfpzdMaintain;
import nc.ui.querytemplate.querytree.IQueryScheme;
import nc.vo.jych.glfpzd.AggGlfpzdVO;
import nc.vo.pub.BusinessException;


public class GlfpzdMaintainImpl extends AceGlfpzdPubServiceImpl
		implements IGlfpzdMaintain {

	@Override
	public void delete(AggGlfpzdVO[] clientFullVOs,
			AggGlfpzdVO[] originBills) throws BusinessException {
		super.pubdeleteBills(clientFullVOs, originBills);
	}

	@Override
	public AggGlfpzdVO[] insert(AggGlfpzdVO[] clientFullVOs,
			AggGlfpzdVO[] originBills) throws BusinessException {
		return super.pubinsertBills(clientFullVOs, originBills);
	}

	@Override
	public AggGlfpzdVO[] update(AggGlfpzdVO[] clientFullVOs,
			AggGlfpzdVO[] originBills) throws BusinessException {
		return super.pubupdateBills(clientFullVOs, originBills);
	}

	@Override
	public AggGlfpzdVO[] query(IQueryScheme queryScheme)
			throws BusinessException {
		return super.pubquerybills(queryScheme);
	}

	@Override
	public AggGlfpzdVO[] save(AggGlfpzdVO[] clientFullVOs,
			AggGlfpzdVO[] originBills) throws BusinessException {
		return super.pubsendapprovebills(clientFullVOs, originBills);
	}

	@Override
	public AggGlfpzdVO[] unsave(AggGlfpzdVO[] clientFullVOs,
			AggGlfpzdVO[] originBills) throws BusinessException {
		return super.pubunsendapprovebills(clientFullVOs, originBills);
	}

	@Override
	public AggGlfpzdVO[] approve(AggGlfpzdVO[] clientFullVOs,
			AggGlfpzdVO[] originBills) throws BusinessException {
		return super.pubapprovebills(clientFullVOs, originBills);
	}

	@Override
	public AggGlfpzdVO[] unapprove(AggGlfpzdVO[] clientFullVOs,
			AggGlfpzdVO[] originBills) throws BusinessException {
		return super.pubunapprovebills(clientFullVOs, originBills);
	}

	@Override
	public AggGlfpzdVO[] queryGlfpzd(List<AggGlfpzdVO> list)
			throws Exception {
		// TODO 自动生成的方法存根
		List<String> pklist  = new ArrayList<>();
		for(AggGlfpzdVO aggvo : list){
			pklist.add(aggvo.getParentVO().getPk_glfpzd());
		}
		BillQuery<AggGlfpzdVO> billQuery = new BillQuery< AggGlfpzdVO>( AggGlfpzdVO.class);
		AggGlfpzdVO[] aggvos = billQuery.query(pklist.toArray(new String[0]));
		return aggvos;
	}

	private BaseDAO dao;
	private BaseDAO getDao(){
		if(dao == null){
			dao = new BaseDAO();
		}
		return dao;
	}
}

3. 总结

审批后回写完后需要调用刷新功能前台才能显示,刷新的本质实质上就是从前台获取到要刷新数据的主键,拿主键去后台查询该主键对应的aggvo,将查询到的aggvo重新初始化在界面上,单据刷新有两种刷新办法如下:

  1. 方法一:(一次刷新一张单据的时候使用)
package nc.ui.jych.clsbcbys.ace.action;

import java.awt.event.ActionEvent;

import nc.bs.framework.common.NCLocator;
import nc.itf.pubapp.pub.smart.IBillQueryService;
import nc.md.persist.framework.IMDPersistenceQueryService;
import nc.md.persist.framework.MDPersistenceService;
import nc.ui.ml.NCLangRes;
import nc.vo.pub.AggregatedValueObject;
import nc.vo.pub.BusinessException;
import nc.vo.pub.SuperVO;
import nc.vo.pubapp.pattern.model.entity.bill.AbstractBill;

public class SaveAction extends nc.ui.pubapp.uif2app.actions.pflow.SaveScriptAction{

	private static final long serialVersionUID = 1L;
	
	public SaveAction() {
		// TODO 自动生成的构造函数存根
		setCode("saveAction");
		setBtnName("保存");
	}
	@Override
	public void doAction(ActionEvent e) throws Exception {
		// TODO 自动生成的方法存根
		super.doAction(e);
		doRefresh();
	}
	private void doRefresh() throws Exception {
		// TODO 自动生成的方法存根
		Object obj = model.getSelectedData();
		if (obj != null)
			if (obj instanceof SuperVO) {
				SuperVO oldVO = (SuperVO) obj;
				SuperVO newVO = (SuperVO) getMDQueryService()
						.queryBillOfVOByPK(oldVO.getClass(),
								oldVO.getPrimaryKey(), false);
				if (newVO == null)
					throw new BusinessException(NCLangRes.getInstance()
							.getStrByID("uif2", "RefreshSingleAction-000000"));
				model.directlyUpdate(newVO);
			} else if (obj instanceof AbstractBill) {
				AbstractBill oldVO = (AbstractBill) obj;
				String pk = oldVO.getParentVO().getPrimaryKey();
				IBillQueryService billQuery = (IBillQueryService) NCLocator
						.getInstance()
						.lookup(nc.itf.pubapp.pub.smart.IBillQueryService.class);
				AggregatedValueObject newVO = billQuery.querySingleBillByPk(
						oldVO.getClass(), pk);
				if (newVO == null)
					throw new BusinessException(NCLangRes.getInstance()
							.getStrByID("uif2", "RefreshSingleAction-000000"));
				model.directlyUpdate(newVO);
			} else {
			}
	}
	private IMDPersistenceQueryService getMDQueryService() {
		return MDPersistenceService.lookupPersistenceQueryService();
	}

}

  1. 方法二:(一次刷新多张单据的时候使用)
    也就是该例子中用到的方法
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

和安韩Pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值