/**
* 功能说明:归档合同:保存修改的数据和合同状态为:合同已归档,同时产生批号进入计划阶段
* @param requestevent
* @return
* @throws CoreBusinessProcessException
* ResponseEvent
* 修改人:
* 修改日期:
*/
public ResponseEvent GdHt(RequestEvent requestevent)
throws CoreBusinessProcessException {
HashMap hashMap = (HashMap) requestevent.getObject();
THtHtForm htform = (THtHtForm) hashMap.get("HTFORM");
THtHtkzb kzCus = htform.getKzCus();
THtHtxxbVO htxxbvo = htform.getHtxxbvo();
THtHtxxb htxxb = new THtHtxxb();
htxxb = (THtHtxxb)this.ihibernatedao.findByPk(htxxb.getClass().getName(), htxxbvo.getHtDm());
htxxb.setBz(htxxbvo.getBz());
htxxb.setYf(htxxbvo.getYf());
htxxb.setYsFs(htxxbvo.getYsFs());
htxxb.setDd(htxxbvo.getDd());
htxxb.setZlBz(htxxbvo.getZlBz());
htxxb.setBzYq(htxxbvo.getBzYq());
htxxb.setWyZr(htxxbvo.getWyZr());
htxxb.setTdTk(htxxbvo.getTdTk());
//htxxb.setDz(htxxbvo.getDz());
this.ihibernatedao.update(htxxb);
/更新合同明细信息///
List htmxList = htform.getHtmxxxvoes();
Set htmxSet = htxxb.getTHtHtmxxxes();
Iterator it = htmxSet.iterator();
int i = 0;
while(it.hasNext()){
THtHtmxxx tmphtmx = (THtHtmxxx)it.next();
THtHtmxxxVO tmphtmxvo = (THtHtmxxxVO)htmxList.get(i++);
//更新明细信息
tmphtmx.setSl(tmphtmxvo.getSl());//数量
tmphtmx.setDj(tmphtmxvo.getDj());//单价
tmphtmx.setZj(tmphtmxvo.getZj());//总价
//更新交货期信息
// tmphtmxvo.getj
//删除此明细的交货期
Connection conn = this.idao.getJdbsConn();
SequenceNumCreator.sctx = this.sctx;
//jdbc删除
String delSql = "delete from T_HT_HTJHQ where HTMXXX_DM='"+tmphtmx.getHtmxxxDm()+"'";
this.idao.execute(delSql);
Set jhqSet = new HashSet() ;----新创建一个字表记录的集合jhqSet
for(int j=0; j<4; j++){
THtHtjhqVO htjhqvo = tmphtmxvo.getJhqvo(j);
if(!StringUtil.commonCovert(htjhqvo.getStrJhq()).equals("")){
THtHtjhq jhq = new THtHtjhq();
// 交货期代码
String htjhqdm = (String) SequenceNumCreator
.getSequenceNum("T_KH_LINKMAN_SEQUENCE", conn);
jhq.setJhxxDm(htjhqdm);
jhq.setHtmxxxDm(tmphtmx.getHtmxxxDm());// 设置参照主键
jhq.setSl(htjhqvo.getSl());
jhq.setJhq(DataTypeUtil.stringToDate(htjhqvo
.getStrJhq()));
jhq.setPc(htjhqvo.getPc());
jhqSet.add(jhq);
}
}
tmphtmx.setTHtHtjhqs(jhqSet);-----将子表集合添加到主表的集合属性中
this.ihibernatedao.update(tmphtmx);//更新明细 ----更新主表和子表数据
原理总结说明:hibernate会自动监测内存中字表数据的改变,当调用update方法时,hibernate根据主键将内存中的数据与数据库中的记录比对,如果数据库中没有的主键则插入新纪录,如果有相同主键则更新记录。---
注:大体是这个过程,但具体的原理还要参考hibernate的专业书籍。!!!!!!!
}
//更新客户信息
THtHtkzb tmpkz = new THtHtkzb();
tmpkz = (THtHtkzb)this.ihibernatedao.findByPk(tmpkz.getClass().getName(), htxxb.getHtDm());
try {
UtilBuilder.BuilderBean(tmpkz, kzCus);
tmpkz.setHtDm(htxxb.getHtDm());
} catch (BusinessProcessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.ihibernatedao.update(tmpkz);//更新客户信息
Long nowhtzt = htform.getNowhtzt();
hashMap.put("HTZT",nowhtzt.toString());
return this.HtQueryByStatus(requestevent);
}