package CASche.caschedule; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import CASche.CADB; import CASche.CASPrivatePara; import CASche.CASchePara; import CASche.common.CaConstants; import CASche.common.SchedultException; import CASche.help.LoggerHelper; /** * �ϲ�ָ����ƶ���out�� * @author new * */ public class MergeMoveToOut extends MoveCommandToOut { private String query_card_sql=null; private PreparedStatement ps_card=null; private Merge merge; public MergeMoveToOut(CADB db, CASPrivatePara cas_para, CASchePara cas_sche,Merge merge) { super(db, cas_para, cas_sche); this.merge=merge; this.query_card_sql="select * from "+cas_sche.getSrcTable() +" where card_id=? and cas_id=? and cmd_type in " + "('"+CaConstants.AddProduct+"','"+CaConstants.CancelProduct+"') order by transnum"; } /** * ��ѯһ��card��Ӧ������δ���Ӽ���Ȩ * @param ps_card * @param card_id * @param cas_id * @return * @throws SQLException */ private List<JCmdDay> queryCard(PreparedStatement ps_card,String card_id,String cas_id) throws SQLException{ ResultSet rs=null; try{ List<JCmdDay> list=new ArrayList<JCmdDay>(); ps_card.setString(1, card_id); ps_card.setString(2, cas_id); rs=ps_card.executeQuery(); while(rs.next()){ JCaCommand ca=new JCaCommand(); ca.setTransnum(rs.getLong(1)); ca.setJob_id(rs.getLong(2)); ca.setCas_id(rs.getString(3)); ca.setCas_type(rs.getString(4)); ca.setUser_id(rs.getString(5)); ca.setCust_id(rs.getString(6)); ca.setDone_code(rs.getLong(7)); ca.setCmd_type(rs.getString(8)); ca.setStb_id(rs.getString(9)); ca.setCard_id(rs.getString(10)); ca.setPrg_name(rs.getString(11)); ca.setBoss_res_id(rs.getString(12)); ca.setControl_id(rs.getString(13)); ca.setAuth_begin_date(rs.getString("auth_begin_date")); ca.setAuth_end_date(rs.getString("auth_end_date")); ca.setArea_id(rs.getString("area_id")); ca.setIs_sent(rs.getString("is_sent")); ca.setRecord_date(rs.getTimestamp("Record_date")); ca.setDetail_params(rs.getString("Detail_params")); ca.setPriority(rs.getInt("Priority")); ca.setResult_flag(rs.getString("Result_flag")); ca.setError_info(rs.getString("Error_info")); ca.setSend_date(rs.getTimestamp("Send_date")); JCmdDay day=new JCmdDay(); day.setCacmd(ca); list.add(day); } return list; }catch(SQLException e){ throw e; }finally{ if(rs!=null){ try{rs.close();}catch(Exception e){} rs=null; } } } /** * ָ��ϲ����� */ @Override public List<JCaCommand> queryMoveCaCmd(List<JCmdDay> daylist,PreparedStatement ps_min, String cas_id, int min_index,List<JCaCommand> osdlist) throws SQLException,SchedultException { List<JCaCommand> minlist= super.queryMoveCaCmd(daylist,ps_min, cas_id, min_index,osdlist); if(min_index==this.cas_sche.getOrder_notsupport()-1){ //������ָ��ϲ����� if(LoggerHelper.isDebugEnabled(this.getClass())&&minlist.size()>0) LoggerHelper.debug(this.getClass(),this.cas_para.getName()+ ":ORDER"+this.cas_sche.getOrder_notsupport() +" �����ر��Ż���ֱ�ӵ���"+minlist.size()+"��ָ��"); return minlist; } List<JCaCommand> list=new ArrayList<JCaCommand>(); for(JCaCommand ca:minlist){ if(CaConstants.AddProduct.equals(ca.getCmd_type()) ||CaConstants.CancelProduct.equals(ca.getCmd_type())){ //�Ӽ���Ȩ����� //ȡͬһ�����ܿ�������δ����ļӼ���Ȩָ�� List<JCmdDay> cardcmdlist=this.queryCard(ps_card, ca.getCard_id(), ca.getCas_id()); if(cardcmdlist.size()<=0){ LoggerHelper.error(this.getClass(),this.cas_para.getName()+"ָ���Ż��ϲ�:"+ca.getTransnum()+"�����ܿ�:"+ca.getCard_id()+"�Ҳ�����¼"); ca.setResult_flag("����"); ca.setError_info("���ܿ�:"+ca.getCard_id()); ca.setSend_date(new Timestamp(System.currentTimeMillis())); return list; } if(cardcmdlist.size()==1){ //ʹ��card_idȡ���ǵ���ָ���ʹ���Ż� list.add(ca); }else{ if(!CASPrivatePara.MODE_NOTSUPPORT.equals(this.cas_para.getAddMode())){ //ca֧�ֶ�ָ��� List<JCaCommand> mergelist=this.merge.mergeMultiCotrolId(cardcmdlist); list.addAll(mergelist); if(LoggerHelper.isDebugEnabled(this.getClass())){ LoggerHelper.debug(this.getClass(),this.cas_para.getName()+ "���ܿ�:"+ca.getCard_id()+"��������Ż��ϲ�"+cardcmdlist.size()+"��ָ�"+mergelist.size()+"��" + "["+(mergelist.size()>0?mergelist.get(0).getTransnum()+",":"")+ (mergelist.size()>1?mergelist.get(1).getTransnum()+",":"")+ (mergelist.size()>2?mergelist.get(2).getTransnum()+",":"")+ (mergelist.size()>3?mergelist.get(3).getTransnum()+",..":"")+"]"); } }else{ //ca��֧�ֶ�ָ��ϲ�����ͬ���ܿ�����ͬ�����ֵ�ָ��ϲ� List<JCaCommand> mergelist=this.merge.mergeSameCotrolId(cardcmdlist); list.addAll(mergelist); if(LoggerHelper.isDebugEnabled(this.getClass())) LoggerHelper.debug(this.getClass(), this.cas_para.getName()+"���ܿ�:"+ca.getCard_id()+"��ͬ�������Ż��ϲ�"+cardcmdlist.size()+"��ָ�"+mergelist.size()+"��" +"["+(mergelist.size()>0?mergelist.get(0).getTransnum()+",":"")+ (mergelist.size()>1?mergelist.get(1).getTransnum()+",":"")+ (mergelist.size()>2?mergelist.get(2).getTransnum()+",":"")+ (mergelist.size()>3?mergelist.get(3).getTransnum()+",..":"")+"]");; } daylist.clear(); daylist.addAll(cardcmdlist); } }else{ //������Ȩ���� list.add(ca); } } return list; } @Override protected void closeStatement() { super.closeStatement(); if(ps_card!=null){ try{ps_card.close();}catch(Exception e){} ps_card=null; } } @Override protected void createStatement() { super.createStatement(); if(ps_card==null){ ps_card=this.db.prepareStatement(this.query_card_sql); } } }