培训day08(修改保存和删除回写)
1.修改保存
UpdateSaveWriteBackRule.java
public class UpdateSaveWriteBackRule implements ICompareRule<AggYhlypxhtfkdVO>{
@Override
public void process(AggYhlypxhtfkdVO[] afterAggvos, AggYhlypxhtfkdVO[] beforeAggvos) {
// TODO 自动生成的方法存根
for (int i = 0; i < beforeAggvos.length; i++) {
try {
updateWriteBackBefore(beforeAggvos[i]);
updateWriteBackAfter(afterAggvos[i]);
} catch (BusinessException e) {
// TODO: handle exception
ExceptionUtils.wrappBusinessException("放款单修改保存后写回合同" + e.getMessage());
}
}
}
//修改前
private void updateWriteBackBefore(AggYhlypxhtfkdVO beforeAggvo) throws BusinessException{
//通过合同号获取主表主键
String pk_dkht = NullValueUtils.getNullStringValue(beforeAggvo.getParentVO().getHth());
//判断合同主表主键是否为空
if(!pk_dkht.equals("")){
//获取放款单表体
YhlypxhtfkBVO[] bvos = (YhlypxhtfkBVO[])beforeAggvo.getChildren(YhlypxhtfkBVO.class);
//如果放款单表体有数据
if(bvos != null && bvos.length > 0){
//获取放款单子表来源单据主表主键
//创建HashMap集合对象并指定泛型为String
Map<String, UFDouble> map = new HashMap<String, UFDouble>();
//循环遍历放款单子表
for (int i = 0; i < bvos.length; i++) {
//key存来源单据子表主键 ,value存数量
map.put(bvos[i].getCsrcbid(), bvos[i].getNnum());
}
//创建billQuery查询合同对象
BillQuery<AggYhlypxdkhtVO> billQuery = new BillQuery<AggYhlypxdkhtVO> (AggYhlypxdkhtVO.class);
//根据放款单来源单据主表主键查询合同Aggvo
AggYhlypxdkhtVO[] aggvos = billQuery.query(new String[] { pk_dkht });
//克隆aggvo
AggYhlypxdkhtVO clonevo = (AggYhlypxdkhtVO) aggvos[0].clone();
//获取合同子表
YhlypxdkhtBVO[] itemvos = (YhlypxdkhtBVO[]) clonevo.getChildren(YhlypxdkhtBVO .class);
//循环遍历合同子表
for (int i = 0; i < itemvos.length; i++) {
//判断Map集合对象中是否包含指定的键名
if(map.containsKey(itemvos[i].getPk_dkht_b())){
//给合同子表所有行的合同累计数量字段赋值 itemvos[i].getDef1():获取合同累计放款单数量的值 map.get(itemvos[i].getPk_dkht_b()):获取合同子表主键所映射的值
itemvos[i].setDef1(NullValueUtils.getNullStringValue(NullValueUtils.getNullUFdoubleValue(itemvos[i].getDef1()).sub(map.get(itemvos[i].getPk_dkht_b()))));
//将合同子表所有行的VOStatus的状态赋值为更新态
itemvos[i].setStatus(VOStatus.UPDATED);
}
}
//调用合同修改接口
getService().update(new AggYhlypxdkhtVO[]{clonevo}, aggvos);
}
}
}
//修改后
private void updateWriteBackAfter(AggYhlypxhtfkdVO afterAggvo) throws BusinessException{
//通过合同号获取主表主键
String pk_dkht = NullValueUtils.getNullStringValue(afterAggvo.getParentVO().getHth());
//判断合同主表主键是否为空
if(!pk_dkht.equals("")){
//获取放款单表体
YhlypxhtfkBVO[] bvos = (YhlypxhtfkBVO[])afterAggvo.getChildren(YhlypxhtfkBVO.class);
//如果放款单表体有数据
if(bvos != null && bvos.length > 0){
//创建HashMap集合对象并指定泛型为String
Map<String, UFDouble> map = new HashMap<String, UFDouble>();
//循环遍历放款单子表
for (int i = 0; i < bvos.length; i++) {
//key存来源单据子表主键 ,value存数量
map.put(bvos[i].getCsrcbid(), bvos[i].getNnum());
}
//创建billQuery查询合同对象
BillQuery<AggYhlypxdkhtVO> billQuery = new BillQuery<AggYhlypxdkhtVO> (AggYhlypxdkhtVO.class);
//根据放款单来源单据主表主键查询合同Aggvo
AggYhlypxdkhtVO[] aggvos = billQuery.query(new String[] { pk_dkht });
//克隆aggvo
AggYhlypxdkhtVO clonevo = (AggYhlypxdkhtVO) aggvos[0].clone();
//获取合同子表
YhlypxdkhtBVO[] itemvos = (YhlypxdkhtBVO[]) clonevo.getChildren(YhlypxdkhtBVO .class);
//循环遍历合同子表
for (int i = 0; i < itemvos.length; i++) {
//判断Map集合对象中是否包含指定的键名
if(map.containsKey(itemvos[i].getPk_dkht_b())){
//给合同子表所有行的合同累计数量字段赋值 itemvos[i].getDef1():获取合同累计放款单数量的值 map.get(itemvos[i].getPk_dkht_b()):获取合同子表主键所映射的值
itemvos[i].setDef1(NullValueUtils.getNullStringValue(NullValueUtils.getNullUFdoubleValue(itemvos[i].getDef1()).add(map.get(itemvos[i].getPk_dkht_b()))));
//将合同子表所有行的VOStatus的状态赋值为更新态
itemvos[i].setStatus(VOStatus.UPDATED);
}
}
//调用合同修改接口
getService().update(new AggYhlypxdkhtVO[]{clonevo}, aggvos);
}
}
}
//要修改哪个单子调哪个单子的接口
private IYhlypxdkhtMaintain service;
private IYhlypxdkhtMaintain getService(){
if (service == null) {
service = NCLocator.getInstance().lookup(IYhlypxdkhtMaintain.class);
}
return service;
}
}
2.修改修改引用规则(AceYhlypxfkdUpdateBP.java)
在修改前规则中加上processer.addBeforeRule(new UpdateSaveWriteBackRule());
3.删除回写
DeleteSaveWriteBackRule.java
public class DeleteSaveWriteBackRule implements IRule<AggYhlypxhtfkdVO>{
@Override
public void process(AggYhlypxhtfkdVO[] aggvos) {
// TODO 自动生成的方法存根
for (int i = 0; i < aggvos.length; i++) {
try {
deleteWrite(aggvos[i]);
} catch (BusinessException e) {
// TODO: handle exception
ExceptionUtils.wrappBusinessException("删除回写出错:" + e.getMessage());
}
}
}
private void deleteWrite(AggYhlypxhtfkdVO aggvo) throws BusinessException{
//通过合同号获取主表主键
String pk_dkht = NullValueUtils.getNullStringValue(aggvo.getParentVO().getHth());
//判断合同主表主键是否为空
if(!pk_dkht.equals("")){
//获取放款单表体
YhlypxhtfkBVO[] bvos = (YhlypxhtfkBVO[])aggvo.getChildren(YhlypxhtfkBVO.class);
//如果放款单表体有数据
if(bvos != null && bvos.length > 0){
//创建HashMap集合对象并指定泛型为String
Map<String, UFDouble> map = new HashMap<String, UFDouble>();
//循环遍历放款单子表
for (int i = 0; i < bvos.length; i++) {
//key存来源单据子表主键 ,value存数量
map.put(bvos[i].getCsrcbid(), bvos[i].getNnum());
}
//创建billQuery查询合同对象
BillQuery<AggYhlypxdkhtVO> billQuery = new BillQuery<AggYhlypxdkhtVO> (AggYhlypxdkhtVO.class);
//根据放款单来源单据主表主键查询合同Aggvo
AggYhlypxdkhtVO[] aggvos = billQuery.query(new String[] { pk_dkht });
//克隆aggvo
AggYhlypxdkhtVO clonevo = (AggYhlypxdkhtVO) aggvos[0].clone();
//获取合同子表
YhlypxdkhtBVO[] itemvos = (YhlypxdkhtBVO[]) clonevo.getChildren(YhlypxdkhtBVO .class);
//循环遍历合同子表
for (int i = 0; i < itemvos.length; i++) {
//判断Map集合对象中是否包含指定的键名
if(map.containsKey(itemvos[i].getPk_dkht_b())){
//给合同子表所有行的合同累计数量字段赋值 itemvos[i].getDef1():获取合同累计放款单数量的值 map.get(itemvos[i].getPk_dkht_b()):获取合同子表主键所映射的值
itemvos[i].setDef1(NullValueUtils.getNullStringValue(NullValueUtils.getNullUFdoubleValue(itemvos[i].getDef1()).sub(map.get(itemvos[i].getPk_dkht_b()))));
//将合同子表所有行的VOStatus的状态赋值为更新态
itemvos[i].setStatus(VOStatus.UPDATED);
}
}
//调用合同修改接口
getService().update(new AggYhlypxdkhtVO[]{clonevo}, aggvos);
}
}
}
//要修改哪个单子调哪个单子的接口
private IYhlypxdkhtMaintain service;
private IYhlypxdkhtMaintain getService(){
if (service == null) {
service = NCLocator.getInstance().lookup(IYhlypxdkhtMaintain.class);
}
return service;
}
}
4.修改删除引用规则(AceYhlypxfkdDeleteBP.java)
在修改后规则中加上processer.addBeforeRule(new DeleteSaveWriteBackRule());