* @date:2009-3-13
* @see nc.bs.hp.hp020101.CostCardDAO#ISOne(nc.vo.pub.AggregatedValueObject) * @author:ZJH
* @TODO:成本卡在保存时判断是否存在相同产品的主键 * @param vo * @throws Exception */
public boolean ISOne(AggregatedValueObject vo) throws BusinessException { }
HpCostcardVO vo1 = (HpCostcardVO) vo.getParentVO().clone(); boolean stype = true;
if (vo1.getPk_costcard() != null) {// 修改时
if (ISCostCardstatus(vo1.getPk_invmandoc(), vo1.getPk_costcard() }
.toString(), vo1.getPk_corp())) {
stype = false;
} else {// 添加时 }
return stype;
if (ISCostCardstatusAdd(vo1.getPk_invmandoc(), vo1.getPk_corp())) { }
vo1.setCoperatorid(\);
vo1.setCoperatedate(new UFDate()); vo1.setClastmodifytime(new UFDateTime()); stype = false;
/**
* @date:2009-3-5
* @see nc.bs.trade.business.IBDBusiCheck#dealAfter(int, * nc.vo.pub.AggregatedValueObject, java.lang.Object) * @author:LG * @TODO:释放已加锁主键 * @param intBdAction * @param billVo * @param userObj * @throws Exception */
public void dealAfter(AggregatedValueObject billVo) throws Exception {
// TODO Auto-generated method stub
HpCostcardVO item = (HpCostcardVO) billVo.getParentVO(); lockPKs = new String[1];
lockPKs[0] = item.getPk_invmandoc(); PKLock.getInstance().releaseBatchLock(lockPKs,
InvocationInfoProxy.getInstance().getUserCode(), InvocationInfoProxy.getInstance().getUserDataSource());
}
7.2子表字段加锁
package nc.bs.hp.hp020301; import nc.bs.dao.BaseDAO;
import nc.bs.framework.common.InvocationInfoProxy;
import nc.bs.trade.business.IBDBusiCheck; import nc.bs.uap.lock.PKLock;
import nc.jdbc.framework.processor.ColumnProcessor; import nc.vo.hp.hp020301.CostGatherVO; import nc.vo.hp.pub.Toolkit;
import nc.vo.pub.AggregatedValueObject; import nc.vo.pub.BusinessException; import nc.vo.trade.pub.IBDACTION;
public class CostGatherBackCheck implements IBDBusiCheck {
private String[] lockPKs = null; /**
* @date:2009-3-5
* @see nc.bs.trade.business.IBDBusiCheck#check(int, * nc.vo.pub.AggregatedValueObject, java.lang.Object) * @author:LG
* @TODO:费用归集在保存时先对来源单据的明细主键加锁,再检查数据库中是否存在相同来源单据
的明细,避免并行时不会发生相同费用归集两次
* @param intBdAction * @param vo * @param userObj * @throws Exception */
public void check(int intBdAction, AggregatedValueObject vo, Object userObj)
throws Exception {
// TODO Auto-generated method stub
if (intBdAction == IBDACTION.SAVE
&& !Toolkit.isEmpty(vo.getChildrenVO())) {
CostGatherVO[] items = (CostGatherVO[]) vo.getChildrenVO(); lockPKs = new String[items.length]; for (int i = 0; i < items.length; i++)
数。\
重新取数。\ }
}
/** lockPKs[i] = items[i].getPk_billsourcedetail();
InvocationInfoProxy.getInstance().getUserCode(),
InvocationInfoProxy.getInstance().getUserDataSource()))
throw new BusinessException(\本次费用归集的部分数据已被他人归集,请重新取
if (this.checkCostGather()) { PKLock.getInstance().releaseBatchLock( lockPKs,
InvocationInfoProxy.getInstance().getUserCode(), InvocationInfoProxy.getInstance()
.getUserDataSource());
throw new BusinessException(\本次费用归集的部分数据已被他人归集,请
}
if (!PKLock.getInstance().acquireBatchLock(lockPKs,
else {
}
* @date:2009-3-5 * @author:LG * @TODO: * @return * @throws Exception */
private boolean checkCostGather() throws Exception { }
String sSql = \
+ Toolkit.getWherePartByKeys(lockPKs) + \
BaseDAO dao = new BaseDAO(); int num = Integer.parseInt(dao
.executeQuery(sSql, new ColumnProcessor()).toString());
return num > 0;
/**
* @date:2009-3-5
* @see nc.bs.trade.business.IBDBusiCheck#dealAfter(int, * nc.vo.pub.AggregatedValueObject, java.lang.Object) * @author:LG * @TODO:释放已加锁主键 * @param intBdAction * @param billVo * @param userObj * @throws Exception */