def getTransStateCur(BJEDTE,BSPSQN,stat_dict): AfaLoggerFunc.tradeDebug(">>>进入getTransStateCur") #==========获取spbsta当前状态信息及编号===================================== spbsta_where_dict = {} spbsta_where_dict["BJEDTE"] = BJEDTE spbsta_where_dict["BSPSQN"] = BSPSQN spbsta_dict = rccpsDBTrcc_spbsta.selectu(spbsta_where_dict) if spbsta_dict == None: AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) AfaLoggerFunc.tradeFatal("获取交易[" + BJEDTE + "][" + BSPSQN + "]当前状态异常") return AfaFlowControl.ExitThisFlow( 'S999', '获取交易当前状态异常' ) elif len(spbsta_dict) <= 0: AfaLoggerFunc.tradeFatal("当前状态登记簿中无此交易[" + BJEDTE + "][" + BSPSQN + "]状态") return AfaFlowControl.ExitThisFlow( 'S999', '当前状态登记簿中无此交易状态' ) return False #===========获取sstlog对应状态及信息======================================== sstlog_where_dict = {} sstlog_where_dict["BJEDTE"] = spbsta_dict["BJEDTE"] sstlog_where_dict["BSPSQN"] = spbsta_dict["BSPSQN"] sstlog_where_dict["BCURSQ"] = str(spbsta_dict["BCURSQ"]) sstlog_dict = rccpsDBTrcc_sstlog.selectu(sstlog_where_dict) if sstlog_dict == None: AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) AfaLoggerFunc.tradeFatal("获取交易[" + BJEDTE + "][" + BSPSQN + "]当前状态详细信息异常") return AfaFlowControl.ExitThisFlow( 'S999', '获取交易当前状态详细信息异常' ) if len(sstlog_dict) <= 0: AfaLoggerFunc.tradeFatal("流水状态登记簿中无此交易[" + BJEDTE + "][" + BSPSQN + "]当前状态详细信息") return AfaFlowControl.ExitThisFlow( 'S999', '流水状态登记簿中无此交易当前状态详细信息' ) if not rccpsMap0000Dsstlog2Dstat_dict.map(sstlog_dict,stat_dict): AfaLoggerFunc.tradeFatal("将查询出的交易[" + BJEDTE + "][" + BSPSQN + "]业务状态详细信息赋值到输出字典异常") return AfaFlowControl.ExitThisFlow( 'S999', '将查询出的业务状态详细信息赋值到输出字典异常' ) AfaLoggerFunc.tradeDebug(">>>结束getTransStateCur") return True
def SubModuleDoFst(): AfaLoggerFunc.tradeInfo( '***农信银系统: 往账.本地类操作交易[RCC004_1163]进入***' ) #=====判断是否存在自动冲正报文==== AfaLoggerFunc.tradeDebug('>>>判断是否存在自动冲正报文') atcbka_where={'ORMFN':TradeContext.MSGFLGNO} atcbka_dict = rccpsDBTrcc_atcbka.selectu(atcbka_where) if( len(atcbka_dict) > 0 ): #=====冲销业务存在自动冲正报文,更新表数据为冲销失败,回复冲销失败报文==== AfaLoggerFunc.tradeDebug('>>>已存在自动冲正报文,抛弃报文') return AfaFlowControl.ExitThisFlow('S999','存在自动冲正报文,抛弃报文') else: AfaLoggerFunc.tradeDebug('>>>未查找到针对补正报文的自动冲正报文,流程继续') #=====判断原补正交易是否存在==== AfaLoggerFunc.tradeDebug('>>>判断是否存在原补正报文') wtrbka_where={'MSGFLGNO':TradeContext.ORMFN} wtrbka_dict = rccpsDBTrcc_wtrbka.selectu(wtrbka_where) wtrbka_temp_dict = wtrbka_dict if len(wtrbka_dict) <= 0: AfaLoggerFunc.tradeDebug('>>>未找到原补正报文,抛弃报文,不做任何处理') return AfaFlowControl.ExitThisFlow('S999','未找到原补正报文,抛弃报文,不做任何处理') else: AfaLoggerFunc.tradeDebug('>>>找到原补正报文,继续流程处理') #=====查找原业务==== AfaLoggerFunc.tradeDebug('>>>查询原业务') wtrbka_where={'BJEDTE':wtrbka_dict['NOTE1'],'BSPSQN':wtrbka_dict['NOTE2']} wtrbka_dict = rccpsDBTrcc_wtrbka.selectu(wtrbka_where) if len(wtrbka_dict) <= 0: AfaLoggerFunc.tradeDebug('>>>未找到原业务,抛弃报文,不做任何处理') return AfaFlowControl.ExitThisFlow('S999','未找到原业务,抛弃报文,不做任何处理') else: AfaLoggerFunc.tradeDebug('>>>找到原业务,继续流程处理') #=====查找原业务状态==== AfaLoggerFunc.tradeDebug('>>>查找原业务状态') spb_where = {'BJEDTE':wtrbka_dict['BJEDTE'],'BSPSQN':wtrbka_dict['BSPSQN']} spb_dict = rccpsDBTrcc_spbsta.selectu(spb_where) if len(spb_dict) <= 0: AfaLoggerFunc.tradeDebug('>>>查找原业务状态失败,抛弃报文,不做任何处理') return AfaFlowControl.ExitThisFlow('S999','查找原业务状态失败,抛弃报文,不做任何处理') else: AfaLoggerFunc.tradeDebug('>>>查找原业务状态成功,继续流程处理') #=====判断原业务状态是否允许进行补正账务补录==== if spb_dict['BCSTAT'] != PL_BCSTAT_CANC and spb_dict['BDWFLG'] != PL_BDWFLG_SUCC: AfaLoggerFunc.tradeDebug('>>>原业务状态['+str(spbsta_dict['BCSTAT'])+'不允许补正,抛弃报文,不做任何处理') return AfaFlowControl.ExitThisFlow('S999','原业务不允许补正,抛弃报文,不做任何处理') else: AfaLoggerFunc.tradeDebug('>>>原业务进入补正账务流程处理') #=================若应答报文回复拒绝,则设置状态为拒绝,停止处理============= if TradeContext.PRCCO != 'RCCI0000': AfaLoggerFunc.tradeInfo(">>>对方返回拒绝应答") #=============设置业务状态为拒绝处理中================================= if not rccpsState.newTransState(wtrbka_temp_dict['BJEDTE'],wtrbka_temp_dict['BSPSQN'],PL_BCSTAT_MFERFE,PL_BDWFLG_SUCC): return AfaFlowControl.ExitThisFlow('S999',"设置业务状态为拒绝处理中异常") if not AfaDBFunc.CommitSql( ): AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) return AfaFlowControl.ExitThisFlow("S999","Commit异常") return AfaFlowControl.ExitThisFlow("S999","对方拒绝,停止处理") else: AfaLoggerFunc.tradeInfo(">>>对方返回成功应答") #=====记账接口8813I1赋值操作==== TradeContext.HostCode = '8813' TradeContext.BESBNO = wtrbka_dict['BESBNO'] #机构号 TradeContext.BETELR = wtrbka_dict['BETELR'] #柜员号 TradeContext.TERMID = wtrbka_dict['TERMID'] #终端号 TradeContext.BJEDTE = wtrbka_dict['BJEDTE'] #交易日期 TradeContext.BSPSQN = wtrbka_dict['BSPSQN'] #报单序号 #=====判断交易代码,进行账务补正==== if TradeContext.ORTRCCO in ('3000002','3000004'): #=====通存==== AfaLoggerFunc.tradeDebug('>>>通存业务补正') elif TradeContext.ORTRCCO in ('3000102','3000104'): #=====通兑==== AfaLoggerFunc.tradeDebug('>>>通兑业务补正') if( wtrbka_dict['CHRGTYP'] != '1'): TradeContext.RCCSMCD = PL_RCCSMCD_XJTDWZ #主机摘要代码 TradeContext.RBAC = '' #借方账户:付款人账户 TradeContext.RBNM = '现金' #借方户名 付款人户名 TradeContext.SBAC = TradeContext.BESBNO + PL_ACC_NXYDQSWZ #贷方账户:农信银待清算来账 TradeContext.SBAC = rccpsHostFunc.CrtAcc(TradeContext.SBAC, 25) TradeContext.ACNM = '农信银待清算来账' #贷方户名: TradeContext.CTFG = '7' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.PKFG = 'T' #通存通兑标识 TradeContext.CATR = '0' #现金 AfaLoggerFunc.tradeInfo( '借方账号:' + TradeContext.SBAC ) AfaLoggerFunc.tradeInfo( '贷方账号:' + TradeContext.RBAC ) else: #=====转账==== TradeContext.ACUR = '3' #记账次数 TradeContext.I3TRAM = str(TradeContext.CUSCHRG) #发生额 TradeContext.I2TRAM = str(TradeContext.OCCAMT) #发生额 TradeContext.OCCAMT = rccpsUtilTools.AddDot(TradeContext.OCCAMT,TradeContext.CUSCHRG) #发生额 #=========交易金额+手续费=================== TradeContext.RCCSMCD = PL_RCCSMCD_XJTDWZ #摘要代码 TradeContext.SBAC = TradeContext.BESBNO + PL_ACC_NXYDQSWZ #借方账号 TradeContext.SBAC = rccpsHostFunc.CrtAcc(TradeContext.SBAC,25) TradeContext.ACNM = '待解临时款项' #借方户名 TradeContext.RBAC = TradeContext.BESBNO + PL_ACC_NXYDJLS #贷方账号 TradeContext.RBAC = rccpsHostFunc.CrtAcc(TradeContext.RBAC,25) TradeContext.OTNM = '农信银来账' #贷方户名 TradeContext.CTFG = '9' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.PKFG = 'T' #通存通兑标识 AfaLoggerFunc.tradeInfo( '>>>交易金额+手续费:借方账号' + TradeContext.SBAC ) AfaLoggerFunc.tradeInfo( '>>>交易金额+手续费:贷方账号' + TradeContext.RBAC ) #=========交易金额============ TradeContext.I2SMCD = PL_RCCSMCD_XJTDWZ #摘要代码 TradeContext.I2RBAC = '' #借方账号 TradeContext.I2ACNM = TradeContext.PYRNAM #借方户名 TradeContext.I2SBAC = TradeContext.BESBNO + PL_ACC_NXYDJLS #贷方账号 TradeContext.I2SBAC = rccpsHostFunc.CrtAcc(TradeContext.I2SBAC,25) TradeContext.I2CTFG = '7' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.I2PKFG = 'T' #通存通兑标识 TradeContext.I2CATR = '0' #现金 AfaLoggerFunc.tradeInfo( '>>>交易金额:借方账号' + TradeContext.I2SBAC ) AfaLoggerFunc.tradeInfo( '>>>交易金额:贷方账号' + TradeContext.I2RBAC ) #=========结算手续费收入户=========== TradeContext.I3SMCD = PL_RCCSMCD_SXF #摘要代码 TradeContext.I3SBAC = TradeContext.BESBNO + PL_ACC_NXYDJLS #借方账号 TradeContext.I3ACNM = TradeContext.PYRNAM #借方户名 TradeContext.I3RBAC = TradeContext.BESBNO + PL_ACC_TCTDSXF #贷方账号 TradeContext.I3RBAC = rccpsHostFunc.CrtAcc(TradeContext.I3RBAC,25) TradeContext.I3SBAC = rccpsHostFunc.CrtAcc(TradeContext.I3SBAC,25) TradeContext.I3OTNM = '待解临时款项' #贷方户名 TradeContext.I3CTFG = '8' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.I3PKFG = 'T' #通存通兑标识 AfaLoggerFunc.tradeInfo( '>>>结算手续费收入户:借方账号' + TradeContext.I3SBAC ) AfaLoggerFunc.tradeInfo( '>>>结算手续费收入户:贷方账号' + TradeContext.I3RBAC ) elif TradeContext.ORTRCCO in ('3000003','3000005'): #=====本转异==== AfaLoggerFunc.tradeDebug('>>>本转异业务补正') elif TradeContext.ORTRCCO in ('3000103','3000105'): #=====异转本==== AfaLoggerFunc.tradeDebug('>>>异转本业务补正') #=====判断手续费收取方式==== if wtrbka_dict['CHRGTYP'] == '1': #=====转账==== TradeContext.ACUR = '3' #记账次数 TradeContext.I3TRAM = str(TradeContext.CUSCHRG) #发生额 手续费 TradeContext.I2TRAM = str(TradeContext.OCCAMT) #发生额 本金 TradeContext.OCCAMT = str(float(TradeContext.OCCAMT) + float(TradeContext.CUSCHRG)) #发生额 #=========交易金额+手续费=================== TradeContext.RCCSMCD = PL_RCCSMCD_YZBWZ #摘要代码 PL_RCCSMCD_YZBWZ 异转本 TradeContext.SBAC = TradeContext.BESBNO + PL_ACC_NXYDQSWZ #借方账号 TradeContext.SBAC = rccpsHostFunc.CrtAcc(TradeContext.SBAC,25) TradeContext.ACNM = '农信银往账' #借方户名 TradeContext.RBAC = TradeContext.BESBNO + PL_ACC_NXYDJLS #贷方账号 TradeContext.RBAC = rccpsHostFunc.CrtAcc(TradeContext.RBAC,25) TradeContext.OTNM = '应解汇款' #贷方户名 TradeContext.CTFG = '9' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.PKFG = 'T' #通存通兑标识 AfaLoggerFunc.tradeInfo( '>>>交易金额+手续费:借方账号' + TradeContext.SBAC ) AfaLoggerFunc.tradeInfo( '>>>交易金额+手续费:贷方账号' + TradeContext.RBAC ) #=========交易金额============ TradeContext.I2SMCD = PL_RCCSMCD_YZBWZ #摘要代码 TradeContext.I2SBAC = TradeContext.BESBNO + PL_ACC_NXYDJLS #借方账号 TradeContext.I2SBAC = rccpsHostFunc.CrtAcc(TradeContext.I2SBAC,25) TradeContext.I2ACNM = '应解汇款' #借方户名 TradeContext.I2RBAC = TradeContext.PYEACC #贷方账号 TradeContext.I2OTNM = TradeContext.PYENAM #贷方户名 TradeContext.I2CTFG = '7' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.I2PKFG = 'T' #通存通兑标识 AfaLoggerFunc.tradeInfo( '>>>交易金额:借方账号' + TradeContext.I2SBAC ) AfaLoggerFunc.tradeInfo( '>>>交易金额:贷方账号' + TradeContext.I2RBAC ) #=========结算手续费收入户=========== TradeContext.I3SMCD = PL_RCCSMCD_SXF #摘要代码 TradeContext.I3SBAC = TradeContext.BESBNO + PL_ACC_NXYDJLS #借方账号 TradeContext.I3SBAC = rccpsHostFunc.CrtAcc(TradeContext.I3SBAC,25) TradeContext.I3ACNM = '应解汇款' #借方户名 TradeContext.I3RBAC = TradeContext.BESBNO + PL_ACC_TCTDSXF #贷方账号 TradeContext.I3RBAC = rccpsHostFunc.CrtAcc(TradeContext.I3RBAC,25) TradeContext.I3OTNM = '结算手续费' #贷方户名 TradeContext.I3CTFG = '8' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.I3PKFG = 'T' #通存通兑标识 else: #=====不收费或者现金==== TradeContext.ACUR = '1' #记账次数 TradeContext.RCCSMCD = PL_RCCSMCD_YZBWZ #摘要代码 TradeContext.SBAC = TradeContext.BESBNO + PL_ACC_NXYDQSWZ #借方账号 TradeContext.SBAC = rccpsHostFunc.CrtAcc(TradeContext.SBAC,25) TradeContext.RBAC = TradeContext.PYEACC #贷方账号 TradeContext.OTNM = TradeContext.PYENAM #贷方户名 TradeContext.CTFG = '7' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.PKFG = 'T' #通存通兑标识 else: #=====原交易代码错,抛弃报文==== AfaLoggerFunc.tradeDebug('>>>原交易代码错,抛弃报文') return AfaFlowControl.ExitThisFlow('S999','原交易代码错,抛弃报文') #=====重新生成前置流水号==== if rccpsGetFunc.GetRBSQ(PL_BRSFLG_SND) == -1 : return AfaFlowControl.ExitThisFlow('S999','重新生成前置流水号失败,抛弃报文') #=====modify by pgt 12-8==== if wtrbka_temp_dict['DCFLG'] == PL_DCFLG_DEB: # if TradeContext.ORTRCCO in ('3000102','3000104','3000103','3000105'): #=====通兑、异转本==== if not rccpsState.newTransState(TradeContext.BJEDTE,TradeContext.BSPSQN,PL_BCSTAT_AUTOPAY,PL_BDWFLG_WAIT): AfaDBFunc.RollbackSql() return AfaFlowControl.ExitThisFlow('S999','新增自动扣款-处理中失败,抛弃报文') else: AfaDBFunc.CommitSql() #=====向主机发起记账==== rccpsHostFunc.CommHost( TradeContext.HostCode ) #=====判断主机返回==== sstlog_dict={} sstlog_dict['BJEDTE'] = TradeContext.BJEDTE sstlog_dict['BSPSQN'] = TradeContext.BSPSQN sstlog_dict['BCSTAT'] = PL_BCSTAT_AUTOPAY if TradeContext.errorCode == '0000': sstlog_dict['BDWFLG'] = PL_BDWFLG_SUCC sstlog_dict['RBSQ'] = TradeContext.RBSQ sstlog_dict['TLSQ'] = TradeContext.TLSQ sstlog_dict['TRDT'] = TradeContext.TRDT sstlog_dict['MGID'] = TradeContext.errorCode sstlog_dict['STRINFO']= '主机补正记账成功' AfaLoggerFunc.tradeInfo('>>>补正记账成功') else: sstlog_dict['BDWFLG'] = PL_BDWFLG_FAIL sstlog_dict['MGID'] = TradeContext.errorCode sstlog_dict['STRINFO']= TradeContext.errorMsg AfaLoggerFunc.tradeInfo('>>>补正记账失败') if not rccpsState.setTransState(sstlog_dict): AfaDBFunc.RollbackSql() return AfaFlowControl.ExitThisFlow('S999','修改自动扣款-成功中失败,抛弃报文') else: AfaDBFunc.CommitSql() else: #====通存、本转异==== AfaLoggerFunc.tradeDebug('>>>新增确认付款-处理中') if not rccpsState.newTransState(TradeContext.BJEDTE,TradeContext.BSPSQN,PL_BCSTAT_CONFACC,PL_BDWFLG_SUCC): AfaDBFunc.RollbackSql() return AfaFlowControl.ExitThisFlow('S999','新增确认付款-处理中失败,抛弃报文') else: AfaDBFunc.CommitSql() #=================为存款确认请求报文做准备================================= AfaLoggerFunc.tradeInfo(">>>开始为存款确认请求报文做准备") #=====================获取中心流水号==================================== if rccpsGetFunc.GetRccSerialno( ) == -1 : raise AfaFlowControl.flowException( ) TradeContext.MSGTYPCO = 'SET009' TradeContext.SNDSTLBIN = TradeContext.RCVMBRCO TradeContext.RCVSTLBIN = TradeContext.SNDMBRCO TradeContext.SNDBRHCO = TradeContext.BESBNO TradeContext.SNDCLKNO = TradeContext.BETELR TradeContext.ORMFN = TradeContext.ORMFN TradeContext.OPRTYPNO = '30' TradeContext.ROPRTPNO = '30' TradeContext.TRANTYP = '0' TradeContext.ORTRCCO = '3000505' TradeContext.ORTRCNO = TradeContext.TRCNO TradeContext.TRCCO = '3000503' TradeContext.TRCNO = TradeContext.SerialNo TradeContext.CURPIN = "" TradeContext.STRINFO = '收到补正应答,自动发送存款确认' AfaLoggerFunc.tradeInfo(">>>交易代码["+str(TradeContext.TRCCO)+"]") AfaLoggerFunc.tradeInfo(">>>结束为存款确认请求报文做准备") #=====更新原记录的存款确认字段==== #=====modify by pgt 12-8==== wtr_up_where = {'BJEDTE':wtrbka_temp_dict['BJEDTE'],'BSPSQN':wtrbka_temp_dict['BSPSQN']} # wtr_up_where = {'BJEDTE':TradeContext.BJEDTE,'BSPSQN':TradeContext.BSPSQN} wtr_end_dict = {} wtr_end_dict['COTRCDAT'] = TradeContext.TRCDAT wtr_end_dict['COTRCNO'] = TradeContext.TRCNO wtr_end_dict['TRCNO'] = TradeContext.ORTRCNO wtr_end_dict['COMSGFLGNO']= TradeContext.SNDBNKCO+TradeContext.TRCDAT+TradeContext.TRCNO wtr_end_dict['MSGFLGNO'] = TradeContext.MSGFLGNO rccpsDBTrcc_wtrbka.update(wtr_end_dict,wtr_up_where) AfaDBFunc.CommitSql() AfaAfeFunc.CommAfe() if TradeContext.errorCode == '0000': AfaLoggerFunc.tradeInfo('>>>发送成功') else: AfaLoggerFunc.tradeInfo('>>>发送失败') return True
def SubModuleDoFst(): AfaLoggerFunc.tradeInfo( '***农信银系统:往账.主机类操作(1.本地操作).往账发送[TRCC002_8506]进入***' ) #====begin 蔡永贵 20110215 增加==== #新票据号是16位,需要取后8位,版本号为02,同时要兼容老票据号8位,版本号为01 if len(TradeContext.BILNO) == 16: TradeContext.TMP_BILNO = TradeContext.BILNO[-8:] else: TradeContext.TMP_BILNO = TradeContext.BILNO #============end============ AfaLoggerFunc.tradeInfo('>>>RCVSTLBIN: '+TradeContext.RCVSTLBIN) AfaLoggerFunc.tradeInfo('>>>SNDSTLBIN: '+TradeContext.SNDSTLBIN) #=====判断是否为同一成员行内==== if TradeContext.RCVSTLBIN == TradeContext.SNDSTLBIN: return AfaFlowControl.ExitThisFlow('M999','同一成员行内禁止做此业务') ##===== 张恒 增加条件,如网银支付则不校验重复次数. 将手续费标志及金额字段赋值 20091109 ========## if (TradeContext.existVariable( "CHSHTP" ) and len(TradeContext.CHSHTP) != 0): #手续费收取方式 TradeContext.CHRGTYP = TradeContext.CHSHTP else: TradeContext.CHRGTYP = '2' #默认为不收 if (TradeContext.existVariable( "CUSCHRG" ) and len(TradeContext.CUSCHRG) != 0): #手续费金额 TradeContext.LOCCUSCHRG = TradeContext.CUSCHRG else : TradeContext.LOCCUSCHRG = '0.00' #默认为0.00 TradeContext.CUSCHRG = '0.00' #异地手续费清0 if str(TradeContext.OPRATTNO) != '12': #网银支付 ##=====END=====================================================================================## #=====检查数据库是否有相同交易==== sql = "BJEDTE = '" + TradeContext.BJEDTE + "'" #日期 sql = sql + " and BESBNO ='" + TradeContext.BESBNO + "'" #机构号 if (TradeContext.existVariable( "PYRACC" ) and len(TradeContext.PYRACC) != 0): #付款人账号 sql = sql + " and PYRACC ='" + TradeContext.PYRACC + "'" if (TradeContext.existVariable( "RCVBNKCO" ) and len(TradeContext.RCVBNKCO) != 0): #收款行行号 sql = sql + " and RCVBNKCO = '" + TradeContext.RCVBNKCO + "'" if (TradeContext.existVariable( "PYEACC" ) and len(TradeContext.PYEACC) != 0): #收款人账号 sql = sql + " and PYEACC ='" + TradeContext.PYEACC + "'" if (TradeContext.existVariable( "OCCAMT" ) and len(TradeContext.OCCAMT) != 0): #金额 sql = sql + " and OCCAMT =" + TradeContext.OCCAMT + "" if (TradeContext.existVariable( "OPRNO" ) and len(TradeContext.OPRNO) != 0): #业务种类 sql = sql + " and OPRNO ='" + TradeContext.OPRNO + "'" if (TradeContext.existVariable( "OPRATTNO" ) and len(TradeContext.OPRATTNO) != 0): #业务属性 sql = sql + " and OPRATTNO ='" + TradeContext.OPRATTNO + "'" if (TradeContext.existVariable( "BBSSRC" ) and len(TradeContext.BBSSRC) != 0): #资金来源 sql = sql + " and BBSSRC ='" + TradeContext.BBSSRC + "'" if (TradeContext.existVariable( "DASQ" ) and len(TradeContext.DASQ) != 0): #销账序号 sql = sql + " and DASQ ='" + TradeContext.DASQ + "'" if (TradeContext.existVariable( "BILTYP" ) and len(TradeContext.BILTYP) != 0): #票据种类 sql = sql + " and BILTYP = '" + TradeContext.BILTYP + "'" if (TradeContext.existVariable( "BILDAT" ) and len(TradeContext.BILDAT) != 0): #票据日期 sql = sql + " and BILDAT = '" + TradeContext.BILDAT + "'" if (TradeContext.existVariable( "BILNO" ) and len(TradeContext.BILNO) != 0): #票据号码 sql = sql + " and BILNO = '" + TradeContext.BILNO + "'" if (TradeContext.existVariable( "NOTE1" ) and len(TradeContext.NOTE1) != 0): #备注1 sql = sql + " and NOTE1 = '" + TradeContext.NOTE1 + "'" #=====调用函数进行多笔查询==== AfaLoggerFunc.tradeInfo( '>>>判断必要的字段是否重复,重复返回错误') record = rccpsDBTrcc_trcbka.selectm(1,10,sql,"") if record == None: return AfaFlowControl.ExitThisFlow('D000','数据库操作失败') if len(record) > 0: #====判断必要的字段是否重复,重复返回错误==== for next in range(0, len(record)): spbsta = {'BJEDTE':TradeContext.BJEDTE,'BSPSQN':record[next]['BSPSQN']} rep = rccpsDBTrcc_spbsta.selectu(spbsta) if rep == None: return AfaFlowControl.ExitThisFlow('D000', '数据库操作错误') elif len(rep) <= 0: return AfaFlowControl.ExitThisFlow('D001', '数据库查询相同业务错误') else: if rep['BDWFLG'] != PL_BDWFLG_FAIL: return AfaFlowControl.ExitThisFlow('S000', '相同业务已录入,不允许重复提交') AfaLoggerFunc.tradeInfo( '>>>开始处理此笔业务' ) #=====资金来源为1-个人结算户时,需要调用8811校验支付条件==== if TradeContext.BBSSRC == '1': TradeContext.HostCode = '8811' TradeContext.ACCNO = TradeContext.PYRACC #付款人账户 rccpsHostFunc.CommHost( '8811' ) if TradeContext.errorCode != '0000': return AfaFlowControl.ExitThisFlow('S999','查询凭证信息出错') else: if TradeContext.PAYTYP != TradeContext.HPAYTYP: return AfaFlowControl.ExitThisFlow('S999','支付条件错误') #=====开始调用密押服务器==== SEAL = ' ' SNDBANKCO = TradeContext.SNDBNKCO RCVBANKCO = TradeContext.RCVBNKCO SNDBANKCO = SNDBANKCO.rjust(12,'0') RCVBANKCO = RCVBANKCO.rjust(12,'0') AMOUNT = TradeContext.OCCAMT.split('.')[0] + TradeContext.OCCAMT.split('.')[1] AMOUNT = AMOUNT.rjust(15,'0') AfaLoggerFunc.tradeDebug('AMOUNT=' + str(AMOUNT) ) AfaLoggerFunc.tradeDebug('SNDBANKCO=' + str(SNDBANKCO) ) AfaLoggerFunc.tradeDebug('RCVBANKCO=' + str(RCVBANKCO) ) AfaLoggerFunc.tradeDebug('类型:' + str(PL_SEAL_ENC) ) AfaLoggerFunc.tradeDebug('业务类型:' + str(PL_TYPE_DZHD) ) AfaLoggerFunc.tradeDebug('日期' + TradeContext.TRCDAT ) AfaLoggerFunc.tradeDebug('流水' + TradeContext.SerialNo ) AfaLoggerFunc.tradeDebug('密押o[' + SEAL + ']') ret = miya.DraftEncrypt(PL_SEAL_ENC,PL_TYPE_DZHD,TradeContext.TRCDAT,TradeContext.SerialNo,AMOUNT,SNDBANKCO,RCVBANKCO,'',SEAL) AfaLoggerFunc.tradeDebug("ret[" + str(ret) + "]") AfaLoggerFunc.tradeDebug('密押[' + SEAL + ']') if ret != 0: return AfaFlowControl.ExitThisFlow('M9999','调用密押服务器失败') else: TradeContext.SEAL = SEAL AfaLoggerFunc.tradeDebug('密押new[' + TradeContext.SEAL + ']') #=====开始向字典赋值==== TradeContext.DCFLG = PL_DCFLG_CRE dict = {} if not rccpsMap8506CTradeContext2Ddict.map(dict): return AfaFlowControl.ExitThisFlow('M999', '字典赋值出错') #=====开始插入数据库==== if not rccpsDBFunc.insTransTrc(dict): #=====RollBack操作==== AfaDBFunc.RollbackSql() return AfaFlowControl.ExitThisFlow('D002', '插入数据库出错,RollBack成功') #=====commit操作==== if not AfaDBFunc.CommitSql(): #=====RollBack操作==== AfaDBFunc.RollbackSql() return AfaFlowControl.ExitThisFlow('D011', '数据库Commit失败') else: AfaLoggerFunc.tradeDebug('COMMIT成功') #====送往主机字段增加收款人名称字段 === if (TradeContext.existVariable( "PYRNAM" ) and len(TradeContext.PYRNAM) != 0): #付款人名称 TradeContext.ACNM = TradeContext.PYRNAM else: TradeContext.ACNM = '' if (TradeContext.existVariable( "PYENAM" ) and len(TradeContext.PYENAM) != 0): #收款人名称 TradeContext.OTNM = TradeContext.PYENAM else: TradeContext.OTNM = '' #汇兑往帐记帐字典赋值 input_dict = {} input_dict['CHRGTYP'] = TradeContext.CHRGTYP #手续费收取方式 input_dict['LOCCUSCHRG'] = TradeContext.LOCCUSCHRG #手续费金额 input_dict['PYRACC'] = TradeContext.PYRACC #付款人账号 input_dict['BBSSRC'] = TradeContext.BBSSRC #资金来源 input_dict['OCCAMT'] = TradeContext.OCCAMT #交易金额 input_dict['ACNM'] = TradeContext.ACNM #付款人名称 input_dict['OTNM'] = TradeContext.OTNM #收款人名称 input_dict['BESBNO'] = TradeContext.BESBNO #调用汇兑记账接口 rccpsEntries.HDWZJZ(input_dict) AfaLoggerFunc.tradeInfo( '***农信银系统:往账.主机类操作(1.本地操作).往账发送[TRCC002_8506]退出***' ) return True
def setTransState(stat_dict): AfaLoggerFunc.tradeInfo(">>>进入setTransState") AfaLoggerFunc.tradeDebug("stat_dict = " + str(stat_dict)) #==========检查表spbsta中是否存在此业务状态================================= spbsta_where_dict = {} if stat_dict.has_key("BJEDTE"): spbsta_where_dict["BJEDTE"] = stat_dict["BJEDTE"] if stat_dict.has_key("BSPSQN"): spbsta_where_dict["BSPSQN"] = stat_dict["BSPSQN"] spbsta_dict = rccpsDBTrcc_spbsta.selectu(spbsta_where_dict) if spbsta_dict == None: AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) AfaLoggerFunc.tradeFatal("获取交易[" + stat_dict['BJEDTE'] + "][" + stat_dict['BSPSQN'] + "]当前状态异常") return AfaFlowControl.ExitThisFlow( 'S999', '获取交易当前状态异常' ) elif len(spbsta_dict) <= 0: AfaLoggerFunc.tradeFatal("当前状态登记簿中无交易[" + stat_dict['BJEDTE'] + "][" + stat_dict['BSPSQN'] + "]状态信息") return AfaFlowControl.ExitThisFlow( 'S999', '当前状态登记簿中无此交易状态' ) #===========检查表sstlog中是否存在此业务状态================================ sstlog_where_dict = {} if spbsta_dict.has_key("BJEDTE"): sstlog_where_dict["BJEDTE"] = spbsta_dict["BJEDTE"] if spbsta_dict.has_key("BSPSQN"): sstlog_where_dict["BSPSQN"] = spbsta_dict["BSPSQN"] if spbsta_dict.has_key("BCURSQ"): sstlog_where_dict["BCURSQ"] = str(spbsta_dict["BCURSQ"]) sstlog_dict = rccpsDBTrcc_sstlog.selectu(sstlog_where_dict) if sstlog_dict == None: AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) AfaLoggerFunc.tradeFatal("获取交易[" + stat_dict['BJEDTE'] + "][" + stat_dict['BSPSQN'] + "]当前状态详细信息异常") return AfaFlowControl.ExitThisFlow( 'S999', '获取交易当前状态详细信息异常' ) elif len(sstlog_dict) == 0: AfaLoggerFunc.tradeFatal("流水状态登记簿中无交易[" + stat_dict['BJEDTE'] + "][" + stat_dict['BSPSQN'] + "]当前状态详细信息") return AfaFlowControl.ExitThisFlow( 'S999', '流水状态登记簿中无此交易当前状态详细信息' ) #============设置默认值===================================================== stat_dict["PRTCNT"] = 0 stat_dict["NOTE2"] = AfaUtilTools.GetSysDate() + AfaUtilTools.GetSysTime() #AfaLoggerFunc.tradeInfo(stat_dict["NOTE2"]) #============更新表sstlog=================================================== sstlog_update_dict = {} if not rccpsMap0000Dstat_dict2Dsstlog.map(stat_dict,sstlog_update_dict): return AfaFlowControl.ExitThisFlow( 'S999', '为交易当前状态详细信息赋值异常' ) sstlog_where_dict = {} if spbsta_dict.has_key("BJEDTE"): sstlog_where_dict["BJEDTE"] = spbsta_dict["BJEDTE"] if spbsta_dict.has_key("BSPSQN"): sstlog_where_dict["BSPSQN"] = spbsta_dict["BSPSQN"] if spbsta_dict.has_key("BCURSQ"): sstlog_where_dict["BCURSQ"] = str(spbsta_dict["BCURSQ"]) #AfaLoggerFunc.tradeInfo("update_dict = " + str(sstlog_update_dict)) #AfaLoggerFunc.tradeInfo("where_dict = " + str(sstlog_where_dict)) ret = rccpsDBTrcc_sstlog.update(sstlog_update_dict,sstlog_where_dict) if ret <= 0: AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) AfaLoggerFunc.tradeFatal("登记交易[" + stat_dict['BJEDTE'] + "][" + stat_dict['BSPSQN'] + "]") return AfaFlowControl.ExitThisFlow( 'S999', '登记交易当前状态详细信息异常' ) #============更新表spbsta=================================================== spbsta_update_dict = {} if not rccpsMap0000Dstat_dict2Dspbsta.map(stat_dict,spbsta_update_dict): return AfaFlowControl.ExitThisFlow( 'S999', '为交易当前状态赋值异常' ) spbsta_where_dict = {} if stat_dict.has_key("BJEDTE"): spbsta_where_dict["BJEDTE"] = stat_dict["BJEDTE"] if stat_dict.has_key("BSPSQN"): spbsta_where_dict["BSPSQN"] = stat_dict["BSPSQN"] ret = rccpsDBTrcc_spbsta.update(spbsta_update_dict,spbsta_where_dict) if (ret <= 0): AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) AfaLoggerFunc.tradeFatal("登记交易[" + stat_dict['BJEDTE'] + "][" + stat_dict['BSPSQN'] + "]当前状态异常") return AfaFlowControl.ExitThisFlow( 'S999', '登记交易当前状态异常' ) AfaLoggerFunc.tradeInfo(">>>结束setTransState") return True
def newTransState(BJEDTE,BSPSQN,BCSTAT,BDWFLG): AfaLoggerFunc.tradeInfo(">>>进入newTransState") stat_dict = {} stat_dict["BJEDTE"] = BJEDTE; stat_dict["BSPSQN"] = BSPSQN; stat_dict["BCSTAT"] = BCSTAT; stat_dict["BDWFLG"] = BDWFLG; #==========检查表spbsta中是否存在此业务状态================================= spbsta_where_dict = {} if stat_dict.has_key("BJEDTE"): spbsta_where_dict["BJEDTE"] = stat_dict["BJEDTE"] if stat_dict.has_key("BSPSQN"): spbsta_where_dict["BSPSQN"] = stat_dict["BSPSQN"] spbsta_dict = rccpsDBTrcc_spbsta.selectu(spbsta_where_dict) if spbsta_dict == None: AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) AfaLoggerFunc.tradeFatal("查询交易[" + BJEDTE + "][" + BSPSQN + "]当前状态异常") return AfaFlowControl.ExitThisFlow( 'S999', '查询交易当前状态异常' ) elif len(spbsta_dict) <= 0: AfaLoggerFunc.tradeInfo("当前状态登记簿中无此业务状态,需新增一条业务状态") MaxBCURSQ = 1 else: MaxBCURSQ = int(spbsta_dict["BCURSQ"]) + 1 #===========设置默认值====================================================== if TradeContext.existVariable('BESBNO'): #机构号 stat_dict["BESBNO"] = TradeContext.BESBNO if TradeContext.existVariable('BEACSB'): #账务机构号 stat_dict["BEACSB"] = TradeContext.BEACSB if TradeContext.existVariable('BETELR'): #柜员号 stat_dict["BETELR"] = TradeContext.BETELR if TradeContext.existVariable('BEAUUS'): #授权柜员号 stat_dict["BEAUUS"] = TradeContext.BEAUUS if TradeContext.existVariable('TERMID'): #终端号 stat_dict['TERMID'] = TradeContext.TERMID if TradeContext.existVariable('NOTE3'): #挂账原因 stat_dict['NOTE3'] = TradeContext.NOTE3 if TradeContext.existVariable('FEDT') and TradeContext.FEDT != '' and TradeContext.existVariable('HostCode') and TradeContext.HostCode != '8820': #前置日期 stat_dict['FEDT'] = TradeContext.FEDT else: stat_dict['FEDT'] = BJEDTE if TradeContext.existVariable('RBSQ') and TradeContext.RBSQ != '' and TradeContext.existVariable('HostCode') and TradeContext.HostCode != '8820': #前置流水号 stat_dict['RBSQ'] = TradeContext.RBSQ else: stat_dict['RBSQ'] = BSPSQN stat_dict["PRTCNT"] = 0 stat_dict["BJETIM"] = AfaUtilTools.GetSysDate() + AfaUtilTools.GetSysTime() #AfaLoggerFunc.tradeInfo(">>>>time:" + stat_dict["BJETIM"]) #===========在表sstlog中新增一条业务状态==================================== sstlog_insert_dict = {} stat_dict["BCURSQ"] = MaxBCURSQ if not rccpsMap0000Dstat_dict2Dsstlog.map(stat_dict,sstlog_insert_dict): AfaLoggerFunc.tradeFatal("为交易[" + BJEDTE + "][" + BSPSQN + "]当前状态详细信息赋值异常") return AfaFlowControl.ExitThisFlow( 'S999', '为交易当前状态详细信息赋值异常' ) ret = rccpsDBTrcc_sstlog.insert(sstlog_insert_dict) if ret <= 0: AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) AfaLoggerFunc.tradeFatal("登记交易[" + BJEDTE + "][" + BSPSQN + "]当前状态详细信息异常") return AfaFlowControl.ExitThisFlow( 'S999', '登记交易当前状态详细信息异常' ) if MaxBCURSQ == 1: #========表spbsta中新增一条业务状态===================================== spbsta_insert_dict = {} stat_dict["BCURSQ"] = MaxBCURSQ if not rccpsMap0000Dstat_dict2Dspbsta.map(stat_dict,spbsta_insert_dict): AfaLoggerFunc.tradeFatal("为交易[" + BJEDTE + "][" + BSPSQN + "]当前状态赋值异常") return AfaFlowControl.ExitThisFlow( 'S999', '为交易当前状态赋值异常' ) ret = rccpsDBTrcc_spbsta.insert(spbsta_insert_dict) if ret <= 0: AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) AfaLoggerFunc.tradeFatal("登记交易[" + BJEDTE + "][" + BSPSQN + "]当前状态异常") return AfaFlowControl.ExitThisFlow( 'S999', '登记交易当前状态异常' ) else: #========修改spbsta中对应业务状态======================================= spbsta_update_dict = {} stat_dict["BCURSQ"] = MaxBCURSQ if not rccpsMap0000Dstat_dict2Dspbsta.map(stat_dict,spbsta_update_dict): AfaLoggerFunc.tradeFatal("为交易[" + BJEDTE + "][" + BSPSQN + "]当前状态赋值异常") return AfaFlowControl.ExitThisFlow( 'S999', '为交易当前状态赋值异常' ) spbsta_where_dict = {} spbsta_where_dict["BJEDTE"] = stat_dict["BJEDTE"] spbsta_where_dict["BSPSQN"] = stat_dict["BSPSQN"] ret = rccpsDBTrcc_spbsta.update(spbsta_update_dict,spbsta_where_dict) if (ret <= 0): AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) AfaLoggerFunc.tradeFatal("登记交易[" + BJEDTE + "][" + BSPSQN + "]当前状态异常") return AfaFlowControl.ExitThisFlow( 'S999', '登记交易当前状态异常' ) AfaLoggerFunc.tradeInfo(">>>结束newTransState") return True
def SubModuleDoFst(): AfaLoggerFunc.tradeInfo( '***农信银系统:往账.本地类操作交易[TRC001_8535]进入***' ) #=====判断业务类型是否存在==== if not (TradeContext.existVariable( "TRCCO" ) and len(TradeContext.TRCCO) != 0): return AfaFlowControl.ExitThisFlow('S999','业务类型[TRCCO]不存在或为空') #=====取交易时间==== TradeContext.BJEDTE = AfaUtilTools.GetSysDate( ) #=====通过机构号查询机构名称==== ret = {} subbra = {'BESBNO':TradeContext.BESBNO} ret = rccpsDBTrcc_subbra.selectu(subbra) if ret == None: return AfaFlowControl.ExitThisFlow('S999','数据库操作失败') if len(ret) <= 0: if TradeContext.TRCCO not in ('14','15'): return AfaFlowControl.ExitThisFlow('S999','数据库中无机构号['+TradeContext.BESBNO+']') else: TradeContext.BESBNM = TradeContext.BESBNO else: TradeContext.BESBNM = ret['BESBNM'] #=====判断业务类型 01 汇兑往账==== if TradeContext.TRCCO == '01': AfaLoggerFunc.tradeInfo('>>>汇兑往账清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND BRSFLG = '" + PL_BRSFLG_SND + "'" sql = sql + " AND TRCCO IN ('2000001','2000002','2000003','2000009') " #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_trcbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "电子汇兑往帐清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 业务种类 报单序号 报单日期 发起行行号 接收行行号 金额 付款人账号 " filecontext = filecontext + "收款人账号 业务状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====通过报单序号和日期取状态==== bcstat = {} bcstat_dict = {'BJEDTE':records[i]['BJEDTE'],'BSPSQN':records[i]['BSPSQN']} bcstat = rccpsDBTrcc_spbsta.selectu(bcstat_dict) if bcstat == None: return AfaFlowControl.ExitThisFlow('S999','数据库操作失败') if len(bcstat) <= 0: return AfaFlowControl.ExitThisFlow('S999','通过报单序号取业务状态失败') #=====写文件==== filecontext=str(i+1).ljust(4) + records[i]['TRCCO'].ljust(10) + records[i]['BSPSQN'].ljust(13) \ + records[i]['BJEDTE'].ljust(9) + records[i]['SNDBNKCO'].ljust(11) \ + records[i]['RCVBNKCO'].ljust(11) + str(records[i]['OCCAMT']).ljust(11) \ + records[i]['PYRACC'].ljust(30) + records[i]['PYEACC'].ljust(34) \ + bcstat['BCSTAT'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #=====02 汇兑来帐==== elif TradeContext.TRCCO == '02': AfaLoggerFunc.tradeInfo('>>>汇兑来账清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND BRSFLG = '" + PL_BRSFLG_RCV + "'" sql = sql + " AND TRCCO IN ('2000001','2000002','2000003','2000009')" #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_trcbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "电子汇兑来帐清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 汇票类别 报单序号 出票日期 汇票号码 金额 申请人账号 " filecontext = filecontext + "收款人账号 业务状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====通过报单序号和日期取状态==== bcstat = {} bcstat_dict = {'BJEDTE':records[i]['BJEDTE'],'BSPSQN':records[i]['BSPSQN']} bcstat = rccpsDBTrcc_spbsta.selectu(bcstat_dict) if bcstat == None: return AfaFlowControl.ExitThisFlow('S999','数据库操作失败') if len(bcstat) <= 0: return AfaFlowControl.ExitThisFlow('S999','通过报单序号取业务状态失败') #=====写文件==== filecontext=str(i+1).ljust(4) + records[i]['TRCCO'].ljust(10) + records[i]['BSPSQN'].ljust(13) \ + records[i]['BJEDTE'].ljust(9) + records[i]['SNDBNKCO'].ljust(11) \ + records[i]['RCVBNKCO'].ljust(11) + str(records[i]['OCCAMT']).ljust(11) \ + records[i]['PYRACC'].ljust(30) + records[i]['PYEACC'].ljust(34) \ + bcstat['BCSTAT'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #====03 本行汇票签发==== elif TradeContext.TRCCO == '03': AfaLoggerFunc.tradeInfo('>>>本行汇票签发清单打印操作') #====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND BRSFLG = '" + PL_BRSFLG_SND + "'" sql = sql + " AND BILRS = '" + PL_BILRS_INN + "' AND HPSTAT = '" + PL_HPSTAT_SIGN + "'" #=====多笔查询==== records = rccpsDBTrcc_bilbka.selectm(1,0,sql,"") if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "本行汇票签发清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 汇票类别 报单序号 出票日期 汇票号码 金 额 申请人账号 " filecontext = filecontext + "收款人账号 业务状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====通过汇票号码、汇票版本号取汇票类别==== bilinf = {} bilinf_dict = {'BILVER':records[i]['BILVER'],'BILNO':records[i]['BILNO'],'BILRS':records[i]['BILRS']} bilinf = rccpsDBTrcc_bilinf.selectu(bilinf_dict) if bilinf == None: return AfaFlowControl.ExitThisFlow('S999','数据库操作失败') if len(bilinf) <= 0: return AfaFlowControl.ExitThisFlow('S999','通过汇票号码取汇票类别失败') #=====写文件==== filecontext=str(i+1).ljust(4) + bilinf['BILTYP'].ljust(10) + records[i]['BSPSQN'].ljust(13) \ + bilinf['BILDAT'].ljust(9) + records[i]['BILNO'].ljust(11) \ + str(bilinf['BILAMT']).ljust(11) + bilinf['PYRACC'].ljust(30) \ + bilinf['PYEACC'].ljust(34) + bilinf['BILTYP'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #====04 解付他行汇票==== elif TradeContext.TRCCO == '04': AfaLoggerFunc.tradeInfo('>>>解付他行汇票清单打印操作') #====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND BRSFLG = '" + PL_BRSFLG_SND + "'" sql = sql + " AND BILRS = '" + PL_BILRS_OUT + "'" #=====多笔查询==== records = rccpsDBTrcc_bilbka.selectm(1,0,sql,"") if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "解付他行汇票清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 汇票类别 报单序号 出票日期 汇票号码 金 额 申请人账号 " filecontext = filecontext + "收款人账号 业务状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====通过汇票号码、汇票版本号取汇票类别==== bilinf = {} bilinf_dict = {'BILVER':records[i]['BILVER'],'BILNO':records[i]['BILNO'],'BILRS':records[i]['BILRS']} bilinf = rccpsDBTrcc_bilinf.selectu(bilinf_dict) if bilinf == None: return AfaFlowControl.ExitThisFlow('S999','数据库操作失败') if len(bilinf) <= 0: return AfaFlowControl.ExitThisFlow('S999','通过汇票号码取汇票类别失败') #=====写文件==== filecontext=str(i+1).ljust(4) + bilinf['BILTYP'].ljust(10) + records[i]['BSPSQN'].ljust(13) \ + bilinf['BILDAT'].ljust(9) + records[i]['BILNO'].ljust(11) \ + str(bilinf['BILAMT']).ljust(11) + bilinf['PYRACC'].ljust(30) \ + bilinf['PYEACC'].ljust(34) + bilinf['BILTYP'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #=====05 退汇往帐==== elif TradeContext.TRCCO == '05': AfaLoggerFunc.tradeInfo('>>>退汇往账清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND BRSFLG = '" + PL_BRSFLG_SND + "'" sql = sql + " AND TRCCO = '2000004' " #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_trcbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "退汇往帐清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 业务种类 报单序号 报单日期 发起行行号 接收行行号 金额 付款人账号 " filecontext = filecontext + "收款人账号 业务状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====通过报单序号和日期取状态==== bcstat = {} bcstat_dict = {'BJEDTE':records[i]['BJEDTE'],'BSPSQN':records[i]['BSPSQN']} bcstat = rccpsDBTrcc_spbsta.selectu(bcstat_dict) if bcstat == None: return AfaFlowControl.ExitThisFlow('S999','数据库操作失败') if len(bcstat) <= 0: return AfaFlowControl.ExitThisFlow('S999','通过报单序号取业务状态失败') #=====写文件==== filecontext=str(i+1).ljust(4) + records[i]['TRCCO'].ljust(10) + records[i]['BSPSQN'].ljust(13) \ + records[i]['BJEDTE'].ljust(9) + records[i]['SNDBNKCO'].ljust(11) \ + records[i]['RCVBNKCO'].ljust(11) + str(records[i]['OCCAMT']).ljust(11) \ + records[i]['PYRACC'].ljust(30) + records[i]['PYEACC'].ljust(34) \ + bcstat['BCSTAT'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #=====06 退汇来帐==== elif TradeContext.TRCCO == '06': AfaLoggerFunc.tradeInfo('>>>退汇来账清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND BRSFLG = '" + PL_BRSFLG_RCV + "'" sql = sql + " AND TRCCO = '2000004' " #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_trcbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "退汇来帐清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 业务种类 报单序号 报单日期 发起行行号 接收行行号 金额 付款人账号 " filecontext = filecontext + "收款人账号 业务状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====通过报单序号和日期取状态==== bcstat = {} bcstat_dict = {'BJEDTE':records[i]['BJEDTE'],'BSPSQN':records[i]['BSPSQN']} bcstat = rccpsDBTrcc_spbsta.selectu(bcstat_dict) if bcstat == None: return AfaFlowControl.ExitThisFlow('S999','数据库操作失败') if len(bcstat) <= 0: return AfaFlowControl.ExitThisFlow('S999','通过报单序号取业务状态失败') #=====写文件==== filecontext=str(i+1).ljust(4) + records[i]['TRCCO'].ljust(10) + records[i]['BSPSQN'].ljust(13) \ + records[i]['BJEDTE'].ljust(9) + records[i]['SNDBNKCO'].ljust(11) \ + records[i]['RCVBNKCO'].ljust(11) + str(records[i]['OCCAMT']).ljust(11) \ + records[i]['PYRACC'].ljust(30) + records[i]['PYEACC'].ljust(34) \ + bcstat['BCSTAT'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #=====07 汇兑查询书==== elif TradeContext.TRCCO == '07': AfaLoggerFunc.tradeInfo('>>>汇兑查询书清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND TRCCO IN ('9900511','9900522') " #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_hdcbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "汇兑查询书清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 查询书号 查询日期 往来标志 发起行行号 接收行行号 状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====写文件==== filecontext=str(i+1).ljust(4) + records[i]['BSPSQN'].ljust(13) \ + records[i]['BJEDTE'].ljust(13) + records[i]['BRSFLG'].ljust(8) \ + records[i]['SNDBNKCO'].ljust(12) + records[i]['RCVBNKCO'].ljust(13) \ + records[i]['ISDEAL'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #=====08 汇兑查复书==== elif TradeContext.TRCCO == '08': AfaLoggerFunc.tradeInfo('>>>汇兑查复书清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND TRCCO IN ('9900512','9900523') " #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_hdcbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "汇兑查复书清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 查询书号 查询日期 往来标志 发起行行号 接收行行号 状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====写文件==== filecontext=str(i+1).ljust(4) + records[i]['BSPSQN'].ljust(13) \ + records[i]['BJEDTE'].ljust(9) + records[i]['BRSFLG'].ljust(10) \ + records[i]['SNDBNKCO'].ljust(11) + records[i]['RCVBNKCO'].ljust(11) \ + records[i]['ISDEAL'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #=====09 票据查询书==== elif TradeContext.TRCCO == '09': AfaLoggerFunc.tradeInfo('>>>票据查询书清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND TRCCO = '9900520' " #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_pjcbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "票据查询书清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 查询书号 查询日期 往来标志 发起行行号 接收行行号 状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====写文件==== filecontext=str(i+1).ljust(4) + records[i]['BSPSQN'].ljust(13) \ + records[i]['BJEDTE'].ljust(9) + records[i]['BRSFLG'].ljust(10) \ + records[i]['SNDBNKCO'].ljust(11) + records[i]['RCVBNKCO'].ljust(11) \ + records[i]['ISDEAL'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #=====10 票据查复书==== elif TradeContext.TRCCO == '10': AfaLoggerFunc.tradeInfo('>>>票据查复书清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND TRCCO = '9900521' " #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_pjcbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "票据查复书清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 查询书号 查询日期 往来标志 发起行行号 接收行行号 状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====写文件==== filecontext=str(i+1).ljust(4) + records[i]['BSPSQN'].ljust(13) \ + records[i]['BJEDTE'].ljust(9) + records[i]['BRSFLG'].ljust(10) \ + records[i]['SNDBNKCO'].ljust(11) + records[i]['RCVBNKCO'].ljust(11) \ + records[i]['ISDEAL'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #=====11 汇票查询书==== elif TradeContext.TRCCO == '11': AfaLoggerFunc.tradeInfo('>>>汇票查询书清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND TRCCO = '9900526' " #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_hpcbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "汇票查询书清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 查询书号 出票日期 汇票号码 出票金额 往来标志 发起行行号 接收行行号 状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====写文件==== filecontext=str(i+1).ljust(4) + records[i]['BSPSQN'].ljust(15) \ + records[i]['BILDAT'].ljust(9) + records[i]['BILNO'].ljust(11) \ + str(records[i]['BILAMT']).ljust(15) + records[i]['BRSFLG'].ljust(6) \ + records[i]['SNDBNKCO'].ljust(11) + records[i]['RCVBNKCO'].ljust(13) \ + records[i]['ISDEAL'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #=====12 汇票查复书==== elif TradeContext.TRCCO == '12': AfaLoggerFunc.tradeInfo('>>>汇票查复书清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND TRCCO = '9900527' " #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_hpcbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "汇票查复书清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 查询书号 查询日期 往来标志 发起行行号 接收行行号 状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====写文件==== filecontext=str(i+1).ljust(4) + records[i]['BSPSQN'].ljust(13) \ + records[i]['BJEDTE'].ljust(9) + records[i]['BRSFLG'].ljust(10) \ + records[i]['SNDBNKCO'].ljust(11) + records[i]['RCVBNKCO'].ljust(11) \ + records[i]['ISDEAL'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #=====13 自由格式书==== elif TradeContext.TRCCO == '13': AfaLoggerFunc.tradeInfo('>>>自由格式书清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND TRCCO IN ('9900513','9900524') " #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_hdcbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "自由格式书清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 业务种类 报 单 序 号 报单日期 发起行行号 接收行行号 往来标志 状态\n" filecontext = filecontext + "=================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====写文件==== filecontext=str(i+1).ljust(4) + records[i]['TRCCO'].ljust(10) + records[i]['BSPSQN'].ljust(13) \ + records[i]['BJEDTE'].ljust(9) + records[i]['SNDBNKCO'].ljust(11) \ + records[i]['RCVBNKCO'].ljust(11) + records[i]['BRSFLG'].ljust(10) \ + records[i]['ISDEAL'] f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #=====15 通存通兑往账==== elif(TradeContext.TRCCO == '15'): AfaLoggerFunc.tradeInfo('>>>通存通兑往账清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND BRSFLG = '" + PL_BRSFLG_SND + "'" #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_wtrbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "通存通兑往账清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 报单日期 报单序号 接收行行号 交易代码 收款人账号 付款人账号 金额 手续费 状态\n" filecontext = filecontext + "================================================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====查询此笔交易的当前状态==== where_dict = {} where_dict = {'BJEDTE':records[i]['BJEDTE'],'BSPSQN':records[i]['BSPSQN']} spb_dict = rccpsDBTrcc_spbsta.selectu(where_dict) if(spb_dict == None): return AfaFlowControl.ExitThisFlow('S999','查询业务的当前状态失败') elif(len(spb_dict) == 0): return AfaFlowControl.ExitThisFlow('S999','查询业务的当前状态结果为空') else: AfaLoggerFunc.tradeInfo("查询业务的当前状态成功") #=====写文件==== filecontext=str(i+1).ljust(6) + records[i]['BJEDTE'].ljust(10) + records[i]['BSPSQN'].ljust(14) \ + records[i]['RCVBNKCO'].ljust(12) + records[i]['TRCCO'].ljust(10) \ + records[i]['PYEACC'].ljust(26) + records[i]['PYRACC'].ljust(25) \ + str(records[i]['OCCAMT']).ljust(15) + str(records[i]['CUSCHRG']).ljust(15) + spb_dict['BCSTAT'].ljust(2) f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") #=====14 通存通兑来账==== elif(TradeContext.TRCCO == '14'): AfaLoggerFunc.tradeInfo('>>>通存通兑往账清单打印操作') #=====组织查询语句==== sql = "BJEDTE >= '" + TradeContext.STRDAT + "'" sql = sql + " AND BJEDTE <= '" + TradeContext.ENDDAT + "'" sql = sql + " AND BESBNO = '" + TradeContext.BESBNO + "'" sql = sql + " AND BRSFLG = '" + PL_BRSFLG_RCV + "'" #=====多笔查询==== ordersql = "ORDER BY TRCCO ASC" records = rccpsDBTrcc_wtrbka.selectm(1,0,sql,ordersql) if records == None: return AfaFlowControl.ExitThisFlow('A099','数据库操作失败' ) if len(records) == 0: return AfaFlowControl.ExitThisFlow('A099','无满足条件记录' ) #=====开始组织返回文件==== filename="rccps_"+TradeContext.BETELR+"_"+AfaUtilTools.GetSysDate()+"_"+TradeContext.TransCode try: fpath=os.environ["AFAP_HOME"]+"/tmp/" f=open(fpath+filename,"w") except IOError: return AfaFlowControl.ExitThisFlow('S999','打开文件失败') #=====写文件头==== filecontext = "\n\n\n" filecontext = filecontext + " " + TradeContext.BESBNM + "通存通兑来账清单\n" filecontext = filecontext + "起止日期:" + TradeContext.STRDAT + "~" + TradeContext.ENDDAT + "\n" filecontext = filecontext + "序号 报单日期 报单序号 接收行行号 交易代码 收款人账号 付款人账号 金额 手续费 状态\n" filecontext = filecontext + "================================================================================================================================================\n" f.write(filecontext+"\n") #=====循环组织文件数据==== for i in range(0,len(records)): #=====查询此笔交易的当前状态==== where_dict = {} where_dict = {'BJEDTE':records[i]['BJEDTE'],'BSPSQN':records[i]['BSPSQN']} spb_dict = rccpsDBTrcc_spbsta.selectu(where_dict) if(spb_dict == None): return AfaFlowControl.ExitThisFlow('S999','查询业务的当前状态失败') elif(len(spb_dict) == 0): return AfaFlowControl.ExitThisFlow('S999','查询业务的当前状态结果为空') else: AfaLoggerFunc.tradeInfo("查询业务的当前状态成功") #=====写文件==== filecontext=str(i+1).ljust(6) + records[i]['BJEDTE'].ljust(10) + records[i]['BSPSQN'].ljust(14) \ + records[i]['RCVBNKCO'].ljust(12) + records[i]['TRCCO'].ljust(10) \ + records[i]['PYEACC'].ljust(26) + records[i]['PYRACC'].ljust(25) \ + str(records[i]['OCCAMT']).ljust(15) + str(records[i]['CUSCHRG']).ljust(15) + spb_dict['BCSTAT'].ljust(2) f.write(filecontext+"\n") #=====添加打印日期等==== filecontext = "-----------------------------------------------------------------------------------------------------------------\n" filecontext = filecontext + " 打印日期:" + TradeContext.BJEDTE + " 授权: 记账: \n" f.write(filecontext) f.close() AfaLoggerFunc.tradeInfo(">>>生成文件结束") else: return AfaFlowControl.ExitThisFlow('S999','业务类型错') TradeContext.errorCode = '0000' TradeContext.errorMsg = '成功' TradeContext.PRTDAT = TradeContext.BJEDTE #打印日期 TradeContext.PBDAFILE = filename #文件名 AfaLoggerFunc.tradeInfo( '***农信银系统:往账.本地类操作交易[TRC001_8535]退出***' ) return True
def SubModuleDoFst(): #time.sleep(60) AfaLoggerFunc.tradeInfo("农信银系统:来账.中心类操作(1.本地操作).柜台冲销来账接收[TRCC006_1145]进入") #=====判断是否为重复交易==== AfaLoggerFunc.tradeInfo(">>>判断是否为重复交易") where_dict = {} where_dict = {'TRCDAT':TradeContext.TRCDAT,'TRCNO':TradeContext.TRCNO,'SNDBNKCO':TradeContext.SNDBNKCO} record = rccpsDBTrcc_mpcbka.selectu(where_dict) if( record == None ): AfaLoggerFunc.tradeDebug(">>>查找冲销登记簿异常,抛弃报文,等待中心发送自动冲正报文") return AfaFlowControl.ExitThisFlow('A099',"查找冲销登记簿异常") elif( len(record) > 0 ): #重复交易 AfaLoggerFunc.tradeDebug(">>>冲销交易重复") else: AfaLoggerFunc.tradeDebug(">>>非重复交易") #=====开始登记柜台冲销登记簿==== AfaLoggerFunc.tradeDebug(">>>开始登记冲销登记簿") #TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.ORTRCDAT = TradeContext.TRCDAT mpcbka_insert_dict = {} if not rccpsMap1145CTradeContext2Dmpcbka_dict.map(mpcbka_insert_dict): AfaLoggerFunc.tradeDebug("为冲销登记簿字典赋值失败") return AfaFlowControl.ExitThisFlow('S999','为字典赋值失败,抛弃报文,等待中心自动冲正') res = rccpsDBTrcc_mpcbka.insertCmt(mpcbka_insert_dict) if( res == -1): AfaLoggerFunc.tradeDebug(">>>登记冲销登记簿失败") return AfaFlowControl.ExitThisFlow('S999','插入数据库失败,抛弃报文,等待中心自动冲正') #=====commit数据==== AfaDBFunc.CommitSql() #=====查找自动冲正登记簿是否存在记录==== AfaLoggerFunc.tradeDebug(">>>判断是否存在自动冲正报文") atcbka_where = {'ORMFN':TradeContext.MSGFLGNO} atcbka_dict = rccpsDBTrcc_atcbka.selectu(atcbka_where) if( len(atcbka_dict) > 0 ): #=====冲销业务存在自动冲正报文,更新表数据为冲销失败,回复冲销失败报文==== AfaLoggerFunc.tradeDebug('>>>已存在自动冲正报文,拒绝冲销,回复拒绝报文') #=====为返回冲销成功发送拒绝回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'NN1IA999' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '原交易已自动冲正,不允许再次冲销' #附言 return True else: AfaLoggerFunc.tradeDebug('>>>未查找到针对冲销报文的自动冲正报文,流程继续') #=====查找原交易是否存在==== AfaLoggerFunc.tradeDebug(">>>查找原交易是否存在") where_dict = {'TRCDAT':TradeContext.ORMFN[10:18],'TRCNO':TradeContext.ORTRCNO,'SNDBNKCO':TradeContext.SNDBNKCO} wtrbka_dict = rccpsDBTrcc_wtrbka.selectu(where_dict) if( wtrbka_dict == -1 ): AfaLoggerFunc.tradeInfo(">>>查找原交易失败,原业务中心流水号["+str(TradeContext.ORTRCNO)+"]") return AfaFlowControl.ExitThisFlow('A099',"查找原交易失败,抛弃报文,等待中心自动冲正") if( len(wtrbka_dict) == 0 ): #=====未查找到原交易==== AfaLoggerFunc.tradeDebug(">>>查找原交易失败,未收到原交易,直接回复拒绝报文") #=====为返回冲销成功发送成功回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 #关彬捷 20081222 修改:如果未找到原业务,则返回拒绝应答 TradeContext.PRCCO = 'NN1IA999' #中心返回码 TradeContext.STRINFO = '无此交易' #附言 return True else: #=====查找原交易成功==== AfaLoggerFunc.tradeInfo(">>>查找原交易成功") #=====将原报单序号 原交易日期更新到冲销登记簿中==== AfaLoggerFunc.tradeInfo('>>>更新原报单序号\原交易日期') mpcbka_where={} mpcbka_where['BSPSQN'] = TradeContext.BSPSQN #报单序号 mpcbka_where['BJEDTE'] = TradeContext.BJEDTE #交易日期 mpcbka_dict ={} mpcbka_dict['BOJEDT'] = wtrbka_dict['BJEDTE'] #原交易日期 mpcbka_dict['BOSPSQ'] = wtrbka_dict['BSPSQN'] #原报单序号 mpcbka_dict['BESBNO'] = wtrbka_dict['BESBNO'] #原机构号 mpcbka_dict['STRINFO'] = TradeContext.STRINFO #附言 mpcbka_dict['OPRNO'] = PL_TDOPRNO_CX #业务类型 ret = rccpsDBTrcc_mpcbka.update(mpcbka_dict,mpcbka_where) if ret <= 0: AfaDBFunc.RollBackSql( ) return AfaFlowControl.ExitThisFlow('S999', "更新冲销登记簿原报单序号和原交易日期异常,抛弃报文") else: AfaDBFunc.CommitSql( ) AfaLoggerFunc.tradeInfo(">>>结束更新冲销登记簿原交易日期和原报单序号") #=====查找原来账业务业务状态==== AfaLoggerFunc.tradeInfo(">>>查找原业务状态") spbsta_where = {'BJEDTE':wtrbka_dict['BJEDTE'],'BSPSQN':wtrbka_dict['BSPSQN']} spbsta_dict = rccpsDBTrcc_spbsta.selectu(spbsta_where) if( spbsta_dict == None ): AfaLoggerFunc.tradeDebug(">>>查找原业务状态失败,发送中心失败报文") #=====为返回冲销成功发送拒绝回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCO1006' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '开户行处理失败' #附言 return True #关彬捷 20081226 新增查询交易当前状态详细信息 #查询交易当前状态详细信息 sstlog_where = {'BJEDTE':wtrbka_dict['BJEDTE'],'BSPSQN':wtrbka_dict['BSPSQN'],'BCURSQ':spbsta_dict['BCURSQ']} spbsta_dict = rccpsDBTrcc_sstlog.selectu(sstlog_where) if( spbsta_dict == None ): AfaLoggerFunc.tradeDebug(">>>查找原业务状态失败,发送中心失败报文") #=====为返回冲销成功发送拒绝回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCO1006' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '开户行处理失败' #附言 return True #关彬捷 20081226 新增若交易当前状态为自动扣款,自动入账,冲销,冲正处理中状态,则直接拒绝此冲销 if (spbsta_dict['BCSTAT'] == PL_BCSTAT_AUTO or spbsta_dict['BCSTAT'] == PL_BCSTAT_AUTOPAY or spbsta_dict['BCSTAT'] == PL_BCSTAT_CANC or spbsta_dict['BCSTAT'] == PL_BCSTAT_CANCEL) and spbsta_dict['BDWFLG'] == PL_BDWFLG_WAIT: #=====为返回冲销成功发送拒绝回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCO1006' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '原交易账务状态未知' #附言 return True #关彬捷 20081226 新增若交易当前状态为自动扣款,自动入账,冲销,冲正失败状态,则调用8816查询账务状态 if (spbsta_dict['BCSTAT'] == PL_BCSTAT_AUTO or spbsta_dict['BCSTAT'] == PL_BCSTAT_AUTOPAY or spbsta_dict['BCSTAT'] == PL_BCSTAT_CANC or spbsta_dict['BCSTAT'] == PL_BCSTAT_CANCEL) and spbsta_dict['BDWFLG'] == PL_BDWFLG_FAIL: AfaLoggerFunc.tradeDebug('>>>调用8816查找该业务[' + wtrbka_dict['BSPSQN'] + ']状态') TradeContext.HostCode = '8816' #主机交易码 TradeContext.OPFG = '1' #查询类型 TradeContext.NBBH = 'RCC' #代理业务标识 TradeContext.FEDT = spbsta_dict['FEDT'] #原前置日期 TradeContext.RBSQ = spbsta_dict['RBSQ'] #原前置流水号 TradeContext.DAFG = '1' #抹/记账标志 1:记 2:抹 TradeContext.BESBNO = spbsta_dict['BESBNO'] #机构号 TradeContext.BETELR = spbsta_dict['BETELR'] #柜员号 rccpsHostFunc.CommHost( TradeContext.HostCode ) #=====分析主机返回==== if TradeContext.errorCode == '0000': #此账务已成功记主机账,修改原交易状态为记账成功 AfaLoggerFunc.tradeInfo("此账务已成功记主机账,修改原交易状态为记账成功") stat_dict = {} stat_dict['BJEDTE'] = spbsta_dict['BJEDTE'] stat_dict['BSPSQN'] = spbsta_dict['BSPSQN'] stat_dict['BCSTAT'] = spbsta_dict['BCSTAT'] stat_dict['BDWFLG'] = PL_BDWFLG_SUCC stat_dict['TRDT'] = HostContext.O1DADT #主机日期 stat_dict['TLSQ'] = HostContext.O1AMTL #主机流水 stat_dict['MGID'] = '0000' stat_dict['STRINFO']= '主机成功' if not rccpsState.setTransState(stat_dict): return AfaFlowControl.ExitThisFlow('S999','设置原交易业务状态为记账成功异常') if not AfaDBFunc.CommitSql( ): AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) return AfaFlowControl.ExitThisFlow("S999","Commit异常") #更新查询出交易状态 spbsta_dict['BDWFLG'] = PL_BDWFLG_SUCC spbsta_dict['TRDT'] = HostContext.O1DADT spbsta_dict['TLSQ'] = HostContext.O1AMTL elif TradeContext.errorCode == 'XCR0001': AfaLoggerFunc.tradeInfo(">>>主机返回原交易记账失败,继续冲销") else: AfaLoggerFunc.tradeInfo(">>>查询原交易账务状态异常,返回拒绝应答") #=====为返回冲销成功发送拒绝回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCO1006' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '原交易账务状态未知' #附言 return True #=====根据来往帐标识进行冲销状态判断==== if( wtrbka_dict['BRSFLG'] == PL_BRSFLG_RCV ): #=====来账业务==== AfaLoggerFunc.tradeDebug(">>>来账业务") #=====PL_BCSTAT_AUTOPAY 自动扣款==== #=====PL_BCSTAT_AUTO 自动入账==== #=====PL_BCSTAT_CONFPAY 确认付款==== #=====PL_BCSTAT_CONFACC 确认入账==== #=====PL_BCSTAT_MFERFE 拒绝==== #=====PL_BCSTAT_CANC 冲销==== #=====PL_BCSTAT_CANCEL 冲正==== if( ((spbsta_dict['BCSTAT']==PL_BCSTAT_AUTO or spbsta_dict['BCSTAT']==PL_BCSTAT_AUTOPAY) and spbsta_dict['BDWFLG']==PL_BDWFLG_FAIL) \ or (spbsta_dict['BCSTAT'] == PL_BCSTAT_MFERFE and spbsta_dict['BDWFLG'] == PL_BDWFLG_SUCC) \ or (spbsta_dict['BCSTAT'] == PL_BCSTAT_CANC and spbsta_dict['BDWFLG'] == PL_BDWFLG_SUCC) \ or (spbsta_dict['BCSTAT'] == PL_BCSTAT_CANCEL and spbsta_dict['BDWFLG'] == PL_BDWFLG_SUCC) \ or (spbsta_dict['BCSTAT'] == PL_BCSTAT_CONFPAY and spbsta_dict['BDWFLG'] == PL_BDWFLG_SUCC) \ or (spbsta_dict['BCSTAT'] == PL_BCSTAT_CONFACC and spbsta_dict['BDWFLG'] == PL_BDWFLG_SUCC)): #=====不允许冲销==== AfaLoggerFunc.tradeDebug(">>>原业务["+str(spbsta_dict['BSPSQN'])+"]记账失败或被拒绝,发送成功报文") #=====根据交易状态新增冲销-成功状态==== if spbsta_dict['BCSTAT'] not in (PL_BCSTAT_MFERFE,PL_BCSTAT_CANC,PL_BCSTAT_CANCEL): #=====新增原业务状态为冲销-成功==== AfaLoggerFunc.tradeDebug('>>>新增原业务状态为冲销-成功') if not rccpsState.newTransState(spbsta_dict['BJEDTE'],spbsta_dict['BSPSQN'],PL_BCSTAT_CANC,PL_BDWFLG_SUCC): AfaDBFunc.RollBackSql() return AfaFlowControl.ExitThisFlow('S999','设置业务状态为冲销-成功异常') else: AfaDBFunc.CommitSql() else: AfaLoggerFunc.tradeDebug('>>>原业务状态为[拒绝/冲销/冲正],不需要新增状态') #=====为返回冲销成功发送拒绝回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCI0000' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '原业务冲销成功' #附言 return True else: #=====直接调用8820冲销原业务==== status={} if not rccpsState.getTransStateCur(spbsta_dict['BJEDTE'],spbsta_dict['BSPSQN'],status): return AfaFlowControl.ExitThisFlow('S999','取原业务主机流水号和日期失败,抛弃报文') TradeContext.BOSPSQ = status['RBSQ'] #原报单序号 TradeContext.BOJEDT = status['FEDT'] #原交易日期 TradeContext.HostCode = '8820' #主机交易码 #=====新增原业务状态为冲销-处理中==== AfaLoggerFunc.tradeDebug('>>>新增原业务状态为冲销-处理中') if not rccpsState.newTransState(spbsta_dict['BJEDTE'],spbsta_dict['BSPSQN'],PL_BCSTAT_CANC,PL_BDWFLG_WAIT): AfaDBFunc.RollBackSql() return AfaFlowControl.ExitThisFlow('S999','设置业务状态为冲销-处理中异常') else: AfaDBFunc.CommitSql() #=====向主机发起8820抹账处理==== AfaLoggerFunc.tradeDebug('>>>向主机发起8820抹账处理') rccpsHostFunc.CommHost( TradeContext.HostCode ) #=====判断主机返回==== sstlog_dict={} sstlog_dict['BJEDTE'] = spbsta_dict['BJEDTE'] sstlog_dict['BSPSQN'] = spbsta_dict['BSPSQN'] sstlog_dict['BCSTAT'] = PL_BCSTAT_CANC sstlog_dict['MGID'] = TradeContext.errorCode #主机返回码 if TradeContext.existVariable('BOJEDT'): #前置日期 sstlog_dict['FEDT'] = TradeContext.BOJEDT if TradeContext.existVariable('BOSPSQ'): #前置流水号 sstlog_dict['RBSQ'] = TradeContext.BOSPSQ if TradeContext.existVariable('TRDT'): #主机日期 sstlog_dict['TRDT'] = TradeContext.TRDT if TradeContext.existVariable('TLSQ'): #主机流水号 sstlog_dict['TLSQ'] = TradeContext.TLSQ #关彬捷 20090219 增加冲销成功的主机错误码判断:SXR0010(此笔交易已被冲正) if TradeContext.errorCode in ('0000','SXR0010'): #=====更改状态==== sstlog_dict['BDWFLG'] = PL_BDWFLG_SUCC #流转标识 PL_BDWFLG_SUCC 成功 sstlog_dict['STRINFO'] = '来账冲销成功' #附言 TradeContext.PRCCO = 'RCCI0000' TradeContext.STRINFO = '原业务冲销成功' else: sstlog_dict['BDWFLG'] = PL_BDWFLG_FAIL #流转标识 PL_BDWFLG_FAIL 失败 sstlog_dict['MGID'] = TradeContext.errorCode #主机返回码 sstlog_dict['STRINFO'] = TradeContext.errorMsg #主机返回信息 TradeContext.PRCCO = 'NN1IA999' TradeContext.STRINFO = '原业务冲销失败 ' + TradeContext.errorMsg #=====修改原业务状态==== AfaLoggerFunc.tradeDebug('>>>修改原业务状态') res = rccpsState.setTransState(sstlog_dict) if( res == False ): AfaDBFunc.RollbackSql() return AfaFlowControl.ExitThisFlow('A099', '更改被冲正的交易状态失败') AfaDBFunc.CommitSql( ) #关彬捷 20081226 修改如果冲销失败则回滚冲销前状态 if TradeContext.errorCode not in ('0000','SXR0010'): #冲销失败,回滚状态为冲销前状态 if not rccpsState.newTransState(spbsta_dict['BJEDTE'],spbsta_dict['BSPSQN'],spbsta_dict['BCSTAT'],spbsta_dict['BDWFLG']): AfaDBFunc.RollBackSql() return AfaFlowControl.ExitThisFlow('S999','回滚状态为冲销前状态异常') else: AfaDBFunc.CommitSql() sstlog_dict = {} sstlog_dict['BJEDTE'] = spbsta_dict['BJEDTE'] sstlog_dict['BSPSQN'] = spbsta_dict['BSPSQN'] sstlog_dict['BCSTAT'] = spbsta_dict['BCSTAT'] sstlog_dict['BDWFLG'] = spbsta_dict['BDWFLG'] sstlog_dict['NOTE3'] = '原业务冲销失败,回滚为冲销前状态' if spbsta_dict.has_key('FEDT'): #前置日期 sstlog_dict['FEDT'] = spbsta_dict['FEDT'] if spbsta_dict.has_key('RBSQ'): #前置流水号 sstlog_dict['RBSQ'] = spbsta_dict['RBSQ'] if spbsta_dict.has_key('TRDT'): #主机日期 sstlog_dict['TRDT'] = spbsta_dict['TRDT'] if spbsta_dict.has_key('TLSQ'): #主机流水号 sstlog_dict['TLSQ'] = spbsta_dict['TLSQ'] sstlog_dict['MGID'] = spbsta_dict['MGID'] #主机返回码 sstlog_dict['STRINFO'] = spbsta_dict['STRINFO'] #主机返回信息 if not rccpsState.setTransState(sstlog_dict): return AfaFlowControl.ExitThisFlow('S999','回滚状态为冲销前状态详细信息异常') else: AfaDBFunc.CommitSql() #=====发送回执==== AfaLoggerFunc.tradeDebug('>>>发送成功回执到对方行') #=====为返回冲销成功发送成功回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 #TradeContext.PRCCO = 'RCCI0000' #中心返回码 #TradeContext.STRINFO = '原业务冲销成功' #附言 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 else: #=====往帐业务==== AfaLoggerFunc.tradeDebug(">>>往帐业务") #=====发送回执==== AfaLoggerFunc.tradeDebug('>>>发送成功回执到对方行') #=====为返回冲销成功发送成功回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCO1006' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '往帐业务只能受理方冲销' #附言 AfaLoggerFunc.tradeInfo("农信银系统:来账.中心类操作(1.本地操作).柜台冲销来账接收[TRCC006_1145]退出") return True
def SubModuleDoFst(): AfaLoggerFunc.tradeInfo("农信银系统:来账.中心类操作(1.本地操作).柜台冲正来账接收[TRCC006_1144]进入") AfaLoggerFunc.tradeDebug(">>>BJEDTE==" + TradeContext.BJEDTE) AfaLoggerFunc.tradeDebug(">>>BSPSQN==" + TradeContext.BSPSQN) #=====判断是否为重复交易==== AfaLoggerFunc.tradeInfo(">>>判断是否为重复交易") where_dict = {} where_dict = {'MSGFLGNO':TradeContext.MSGFLGNO} record = rccpsDBTrcc_atcbka.selectu(where_dict) if( record == None ): AfaLoggerFunc.tradeDebug(">>>查找冲正登记簿异常,抛弃报文,等待中心重新发送自动冲正报文") return AfaFlowControl.ExitThisFlow('A099',"查找冲正登记簿异常,抛弃报文,等待中心重新发送自动冲正报文") elif( len(record) > 0 ): #重复交易 AfaLoggerFunc.tradeDebug(">>>自动冲正交易重复") #=====为返回自动冲正成功发送成功回执==== #TradeContext.MSGTYPCO = 'SET010' #报文类代码 #TradeContext.PRCCO = 'RCCI0000' #中心返回码 #TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 #TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 #TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 #TradeContext.STRINFO = '自动冲正交易重复' #附言 # #return True TradeContext.BJEDTE = record['BJEDTE'] TradeContext.BSPSQN = record['BSPSQN'] else: #TradeContext.OR_BJEDTE = TradeContext.BJEDTE #为下面更新atcbka表时的字典赋值 #TradeContext.OR_BSPSQN = TradeContext.BSPSQN #为下面更新atcbka表时的字典赋值 #=====开始登记自动冲正登记簿==== AfaLoggerFunc.tradeDebug(">>>登记自动冲正登记簿") atcbka_dict = {} if not rccpsMap1144CTradeContext2Datcbka_dict.map(atcbka_dict): AfaLoggerFunc.tradeDebug(">>>自动冲正登记簿字典赋值失败,抛弃报文,等待自动冲正报文下次来得") return AfaFlowControl.ExitThisFlow('A099',"自动冲正登记簿字典赋值失败") res = rccpsDBTrcc_atcbka.insertCmt(atcbka_dict) if( res == -1): AfaLoggerFunc.tradeDebug(">>>自动冲正登记簿插入数据失败,数据库会滚,抛弃报文") AfaDBFunc.RollbackSql() return AfaFlowControl.ExitThisFlow('A099',"冲正登记簿插入数据失败") else: AfaDBFunc.CommitSql() #=====判断中心日期是否相同==== if TradeContext.NCCWKDAT != TradeContext.NCCworkDate: AfaLoggerFunc.tradeDebug(">>>查找原交易失败,未收到原交易,直接回复成功报文") #=====为返回自动冲正成功发送成功回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCI0006' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '冲正日期不合法' #附言 return True #=====判断原交易代码==== if TradeContext.ORTRCCO == '3000504': #=====3000504 柜台冲销报文==== AfaLoggerFunc.tradeDebug('>>>查找原冲销业务是否存在') mpcbka_where = {'MSGFLGNO':TradeContext.ORMFN} record = rccpsDBTrcc_mpcbka.selectu(mpcbka_where) if record == None: AfaLoggerFunc.tradeDebug('>>>查找原冲销业务异常,抛弃报文,等待中心再次发生自动冲正') return AfaFlowControl.ExitThisFlow('S999','抛弃报文') elif len(record) <= 0: AfaLoggerFunc.tradeDebug('>>>查找原冲销业务空,回复成功') #=====为返回冲正成功发送成功回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCI0000' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '原冲销业务已冲正成功' #附言 return True #return AfaFlowControl.ExitThisFlow('S999','抛弃报文') else: AfaLoggerFunc.tradeDebug('>>>查找冲销业务成功') #=====将原报单序号 原交易日期更新到冲正登记簿中==== AfaLoggerFunc.tradeInfo('>>>更新原报单序号\原交易日期') atcbka_where={} atcbka_where['BJEDTE'] = TradeContext.BJEDTE #交易日期 atcbka_where['BSPSQN'] = TradeContext.BSPSQN #报单序号 atcbka_dict ={} atcbka_dict['BOJEDT'] = record['BJEDTE'] #原交易日期 atcbka_dict['BOSPSQ'] = record['BSPSQN'] #原报单序号 atcbka_dict['STRINFO'] = TradeContext.STRINFO #附言 atcbka_dict['ORTRCDAT']= record['TRCDAT'] #原委托日期 atcbka_dict['BESBNO'] = record['BESBNO'] #原机构号 atcbka_dict['OPRNO'] = PL_TDOPRNO_CZ #业务类型 ret = rccpsDBTrcc_atcbka.update(atcbka_dict,atcbka_where) AfaLoggerFunc.tradeDebug('>>>ret=='+str(ret)) if ret <= 0: AfaDBFunc.RollbackSql( ) return AfaFlowControl.ExitThisFlow('S999', "更新自动冲正登记簿原报单序号和原交易日期异常,抛弃报文") else: AfaDBFunc.CommitSql( ) AfaLoggerFunc.tradeInfo(">>>结束更新冲销登记簿原交易日期和原报单序号") #=====通过冲销登记簿查找原业务==== AfaLoggerFunc.tradeDebug('>>>通过冲销登记簿中原报单序号和原交易日期查询原业务') wtr_where = {'BJEDTE':record['BOJEDT'],'BSPSQN':record['BOSPSQ']} wtr_dict = rccpsDBTrcc_wtrbka.selectu(wtr_where) if wtr_dict == None: AfaLoggerFunc.tradeDebug('>>>通过冲销登记簿中原报单序号和原交易日期查询原交易异常,抛弃报文,等待中心再次发生自动冲正') return AfaFlowControl.ExitThisFlow('S999','抛弃报文') elif len(wtr_dict) <= 0: AfaLoggerFunc.tradeDebug('>>>通过冲销登记簿中原报单序号和原交易日期查询原交易败,抛弃报文,等待中心再次发生自动冲正') return AfaFlowControl.ExitThisFlow('S999','抛弃报文') else: AfaLoggerFunc.tradeDebug('>>>查找原业务成功') #=====取原业务的业务状态==== AfaLoggerFunc.tradeDebug('>>>取原业务业务状态') spb_where = {'BJEDTE':wtr_dict['BJEDTE'],'BSPSQN':wtr_dict['BSPSQN']} spb_dict = rccpsDBTrcc_spbsta.selectu(spb_where) if spb_dict == None: AfaLoggerFunc.tradeDebug('>>>取原业务业务状态异常,抛弃报文,等待中心再次发生自动冲正') return AfaFlowControl.ExitThisFlow('S999','抛弃报文') elif len(spb_dict) <= 0: AfaLoggerFunc.tradeDebug('>>>取原业务业务状态失败,抛弃报文,等待中心再次发生自动冲正') return AfaFlowControl.ExitThisFlow('S999','抛弃报文') else: AfaLoggerFunc.tradeDebug('>>>取原业务业务状态成功') #关彬捷 20081226 新增查询交易当前状态详细信息 #查询交易当前状态详细信息 sstlog_where = {'BJEDTE':wtr_dict['BJEDTE'],'BSPSQN':wtr_dict['BSPSQN'],'BCURSQ':spb_dict['BCURSQ']} spb_dict = rccpsDBTrcc_sstlog.selectu(sstlog_where) if( spb_dict == None ): return AfaFlowControl.ExitThisFlow('S999','取原业务业务状态详细信息异常,抛弃报文,等待中心再次发生自动冲正') elif len(spb_dict) <= 0: return AfaFlowControl.ExitThisFlow('S999','取原业务业务状态详细信息失败,抛弃报文,等待中心再次发生自动冲正') else: AfaLoggerFunc.tradeDebug('>>>取原业务业务状态详细信息成功') #关彬捷 20081226 新增若交易当前状态为自动扣款,自动入账,冲销,冲正处理中状态,则直接拒绝此冲销 if (spb_dict['BCSTAT'] == PL_BCSTAT_AUTO or spb_dict['BCSTAT'] == PL_BCSTAT_AUTOPAY or spb_dict['BCSTAT'] == PL_BCSTAT_CANC or spb_dict['BCSTAT'] == PL_BCSTAT_CANCEL) and spb_dict['BDWFLG'] == PL_BDWFLG_WAIT: return AfaFlowControl.ExitThisFlow('S999','原业务账务状态未知,抛弃报文,等待中心再次发起自动冲正') #关彬捷 20081226 新增若交易当前状态为自动扣款,自动入账,冲销,冲正失败状态,则调用8816查询账务状态 if (spb_dict['BCSTAT'] == PL_BCSTAT_AUTO or spb_dict['BCSTAT'] == PL_BCSTAT_AUTOPAY or spb_dict['BCSTAT'] == PL_BCSTAT_CANC or spb_dict['BCSTAT'] == PL_BCSTAT_CANCEL) and spb_dict['BDWFLG'] == PL_BDWFLG_FAIL: AfaLoggerFunc.tradeDebug('>>>调用8816查找该业务[' + wtr_dict['BSPSQN'] + ']状态') TradeContext.HostCode = '8816' #主机交易码 TradeContext.OPFG = '1' #查询类型 TradeContext.NBBH = 'RCC' #代理业务标识 TradeContext.FEDT = spb_dict['FEDT'] #原前置日期 TradeContext.RBSQ = spb_dict['RBSQ'] #原前置流水号 TradeContext.DAFG = '1' #抹/记账标志 1:记 2:抹 TradeContext.BESBNO = spb_dict['BESBNO'] #机构号 TradeContext.BETELR = spb_dict['BETELR'] #柜员号 rccpsHostFunc.CommHost( TradeContext.HostCode ) #=====分析主机返回==== if TradeContext.errorCode == '0000': #此账务已成功记主机账,修改原交易状态为记账成功 AfaLoggerFunc.tradeInfo("此账务已成功记主机账,修改原交易状态为记账成功") stat_dict = {} stat_dict['BJEDTE'] = spb_dict['BJEDTE'] stat_dict['BSPSQN'] = spb_dict['BSPSQN'] stat_dict['BCSTAT'] = spb_dict['BCSTAT'] stat_dict['BDWFLG'] = PL_BDWFLG_SUCC stat_dict['TRDT'] = HostContext.O1DADT #主机日期 stat_dict['TLSQ'] = HostContext.O1AMTL #主机流水 stat_dict['MGID'] = '0000' stat_dict['STRINFO']= '主机成功' if not rccpsState.setTransState(stat_dict): return AfaFlowControl.ExitThisFlow('S999','设置原交易业务状态为记账成功异常,抛弃报文,等待下次冲正') if not AfaDBFunc.CommitSql( ): AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) return AfaFlowControl.ExitThisFlow("S999","Commit异常") #更新查询出交易状态 spb_dict['BDWFLG'] = PL_BDWFLG_SUCC spb_dict['TRDT'] = HostContext.O1DADT spb_dict['TLSQ'] = HostContext.O1AMTL elif TradeContext.errorCode == 'XCR0001': AfaLoggerFunc.tradeInfo(">>>主机返回原交易记账失败,继续冲销") else: AfaLoggerFunc.tradeInfo(">>>查询原交易账务状态异常,返回拒绝应答") #回滚原被冲销交易状态为冲销前状态 AfaLoggerFunc.tradeInfo(">>>开始回滚原被冲销交易状态为冲销前状态") spbsta_dict = {} if not rccpsState.getTransStateDes(spb_dict['BJEDTE'],spb_dict['BSPSQN'],spbsta_dict,1): return AfaFlowControl.ExitThisFlow('S999','查询原被冲销交易冲销前状态异常') if not rccpsState.newTransState(spbsta_dict['BJEDTE'],spbsta_dict['BSPSQN'],spbsta_dict['BCSTAT'],spbsta_dict['BDWFLG']): return AfaFlowControl.ExitThisFlow('S999','回滚状态为冲销前状态异常') else: AfaDBFunc.CommitSql() sstlog_dict = {} sstlog_dict['BJEDTE'] = spbsta_dict['BJEDTE'] sstlog_dict['BSPSQN'] = spbsta_dict['BSPSQN'] sstlog_dict['BCSTAT'] = spbsta_dict['BCSTAT'] sstlog_dict['BDWFLG'] = spbsta_dict['BDWFLG'] sstlog_dict['NOTE3'] = '冲销交易被冲正,回滚为冲销前状态' if spbsta_dict.has_key('FEDT'): #前置日期 sstlog_dict['FEDT'] = spbsta_dict['FEDT'] if spbsta_dict.has_key('RBSQ'): #前置流水号 sstlog_dict['RBSQ'] = spbsta_dict['RBSQ'] if spbsta_dict.has_key('TRDT'): #主机日期 sstlog_dict['TRDT'] = spbsta_dict['TRDT'] if spbsta_dict.has_key('TLSQ'): #主机流水号 sstlog_dict['TLSQ'] = spbsta_dict['TLSQ'] sstlog_dict['MGID'] = spbsta_dict['MGID'] #主机返回码 sstlog_dict['STRINFO'] = spbsta_dict['STRINFO'] #主机返回信息 if not rccpsState.setTransState(sstlog_dict): return AfaFlowControl.ExitThisFlow('S999','回滚状态为冲正前状态详细信息异常') else: AfaDBFunc.CommitSql() AfaLoggerFunc.tradeInfo(">>>结束回滚原被冲销交易状态为冲销前状态") #=====为返回冲销成功发送拒绝回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCO1006' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '原交易账务状态未知' #附言 return True #=====判断原业务业务状态==== #=====PL_BCSTAT_CANC 冲销==== if not (spb_dict['BCSTAT'] == PL_BCSTAT_CANC and spb_dict['BDWFLG'] == PL_BDWFLG_SUCC): #=====原业务未冲销,直接回复成功即可==== AfaLoggerFunc.tradeDebug(">>>原交易未冲销成功,回复成功") #=====为返回冲销成功发送成功回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCI0000' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '原冲销业务已冲正成功' #附言 return True elif spb_dict['TRDT'] == '' and spb_dict['TLSQ'] == '': #=====原业务冲销成功,但未抹账,回滚冲销前状态,回复冲正成功==== AfaLoggerFunc.tradeDebug(">>>原业务冲销成功,但未抹账,回滚冲销前状态,回复冲正成功") #回滚原被冲销交易状态为冲销前状态 AfaLoggerFunc.tradeInfo(">>>开始回滚原被冲销交易状态为冲销前状态") spbsta_dict = {} if not rccpsState.getTransStateDes(spb_dict['BJEDTE'],spb_dict['BSPSQN'],spbsta_dict,1): return AfaFlowControl.ExitThisFlow('S999','查询原被冲销交易冲销前状态异常') if not rccpsState.newTransState(spbsta_dict['BJEDTE'],spbsta_dict['BSPSQN'],spbsta_dict['BCSTAT'],spbsta_dict['BDWFLG']): return AfaFlowControl.ExitThisFlow('S999','回滚状态为冲销前状态异常') else: AfaDBFunc.CommitSql() sstlog_dict = {} sstlog_dict['BJEDTE'] = spbsta_dict['BJEDTE'] sstlog_dict['BSPSQN'] = spbsta_dict['BSPSQN'] sstlog_dict['BCSTAT'] = spbsta_dict['BCSTAT'] sstlog_dict['BDWFLG'] = spbsta_dict['BDWFLG'] sstlog_dict['NOTE3'] = '冲销交易被冲正,回滚为冲销前状态' if spbsta_dict.has_key('FEDT'): #前置日期 sstlog_dict['FEDT'] = spbsta_dict['FEDT'] if spbsta_dict.has_key('RBSQ'): #前置流水号 sstlog_dict['RBSQ'] = spbsta_dict['RBSQ'] if spbsta_dict.has_key('TRDT'): #主机日期 sstlog_dict['TRDT'] = spbsta_dict['TRDT'] if spbsta_dict.has_key('TLSQ'): #主机流水号 sstlog_dict['TLSQ'] = spbsta_dict['TLSQ'] sstlog_dict['MGID'] = spbsta_dict['MGID'] #主机返回码 sstlog_dict['STRINFO'] = spbsta_dict['STRINFO'] #主机返回信息 if not rccpsState.setTransState(sstlog_dict): return AfaFlowControl.ExitThisFlow('S999','回滚状态为冲正前状态详细信息异常') else: AfaDBFunc.CommitSql() AfaLoggerFunc.tradeInfo(">>>结束回滚原被冲销交易状态为冲销前状态") #=====为返回冲销成功发送成功回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCI0000' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '原冲销业务已冲正成功' #附言 return True else: AfaLoggerFunc.tradeDebug('>>>准备调用8813再次记账') #=====记账前赋值操作==== AfaLoggerFunc.tradeDebug('>>>记账前赋值操作') if rccpsGetFunc.GetRBSQ(PL_BRSFLG_RCV) == -1 : return AfaFlowControl.ExitThisFlow('S999','重新生成前置流水号失败,抛弃报文') TradeContext.BESBNO = wtr_dict['BESBNO'] #机构号 TradeContext.BETELR = wtr_dict['BETELR'] #柜员号 TradeContext.BEAUUS = wtr_dict['BEAUUS'] #授权柜员 TradeContext.BEAUPS = wtr_dict['BEAUPS'] #授权密码 TradeContext.TERMID = wtr_dict['TERMID'] #终端号 TradeContext.HostCode = '8813' #主机交易码 TradeContext.PYRACC = wtr_dict['PYRACC'] #付款人账户 TradeContext.PYRNAM = wtr_dict['PYRNAM'] #付款人名称 TradeContext.OCCAMT = str(wtr_dict['OCCAMT']) #金额 TradeContext.CUSCHRG = str(wtr_dict['CUSCHRG']) #手续费金额 TradeContext.BANKNO = wtr_dict['BNKBKNO'] #存折号码 if wtr_dict['TRCCO'] in ('3000002','3000004'): #=====通存==== AfaLoggerFunc.tradeDebug('>>>通存') TradeContext.RCCSMCD = PL_RCCSMCD_XJTCLZ #摘要代码 PL_RCCSMCD_XJTCLZ 通存来账 TradeContext.SBAC = TradeContext.BESBNO + PL_ACC_NXYDQSLZ #借方账户:农信银待清算来账 TradeContext.SBNM = "农信银待清算来账" TradeContext.RBAC = wtr_dict['PYEACC'] #贷方账户:收款人账户 TradeContext.RBNM = wtr_dict['PYENAM'] #贷方户名:收款人户名 TradeContext.OCCAMT = str(wtr_dict['OCCAMT']) #=====add by pgt 12-4==== TradeContext.CTFG = '7' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.PKFG = 'T' #通存通兑标识 TradeContext.SBAC = rccpsHostFunc.CrtAcc(TradeContext.SBAC, 25) elif wtr_dict['TRCCO'] in ('3000102','3000104'): #=====通兑==== AfaLoggerFunc.tradeDebug('>>>通兑') if float(wtr_dict['CUSCHRG']) <= 0: #=====对方现金收取手续费或不收费==== AfaLoggerFunc.tradeDebug('>>>现金收取手续费') TradeContext.RCCSMCD = PL_RCCSMCD_XJTDLZ #主机摘要代码 TradeContext.SBAC = TradeContext.PYRACC #借方账户:付款人账户 TradeContext.ACNM = TradeContext.PYRNAM #借方户名 付款人户名 TradeContext.RBAC = TradeContext.BESBNO + PL_ACC_NXYDQSLZ #贷方账户:农信银待清算来账 TradeContext.RBAC = rccpsHostFunc.CrtAcc(TradeContext.RBAC, 25) TradeContext.RBNM = '农信银待清算来账' #贷方户名 #=====add by pgt 12-4==== TradeContext.CTFG = '7' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.PKFG = 'T' #通存通兑标识 if wtr_dict['TRCCO'] == '3000104': TradeContext.WARNTNO = '49' + TradeContext.BANKNO else: TradeContext.WARNTNO = TradeContext.SBAC[6:18] else: #=====对方转账收取手续费==== AfaLoggerFunc.tradeDebug('>>>转账收取手续费') TradeContext.ACUR = '3' #记账次数 #=========交易金额============ TradeContext.RCCSMCD = PL_RCCSMCD_XJTDLZ #摘要代码 TradeContext.SBAC = TradeContext.PYRACC #借方账号 TradeContext.ACNM = TradeContext.PYRNAM #借方户名 TradeContext.RBAC = TradeContext.BESBNO + PL_ACC_NXYDJLS #贷方账号 TradeContext.RBAC = rccpsHostFunc.CrtAcc(TradeContext.RBAC,25) TradeContext.OTNM = '待解临时款项' #贷方户名 TradeContext.CTFG = '7' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.PKFG = 'T' #通存通兑标识 AfaLoggerFunc.tradeInfo( '>>>交易金额:借方账号' + TradeContext.SBAC ) AfaLoggerFunc.tradeInfo( '>>>交易金额:贷方账号' + TradeContext.RBAC ) #=========结算手续费收入户=========== TradeContext.I2SMCD = PL_RCCSMCD_SXF #摘要代码 TradeContext.I2SBAC = TradeContext.PYRACC #借方账号 TradeContext.I2ACNM = TradeContext.PYRNAM #借方户名 TradeContext.I2RBAC = TradeContext.BESBNO + PL_ACC_NXYDJLS #贷方账号 TradeContext.I2RBAC = rccpsHostFunc.CrtAcc(TradeContext.I2RBAC,25) TradeContext.I2OTNM = '待解临时款项' #贷方户名 TradeContext.I2TRAM = str(TradeContext.CUSCHRG) #发生额 TradeContext.I2CTFG = '8' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.I2PKFG = 'T' #通存通兑标识 AfaLoggerFunc.tradeInfo( '>>>结算手续费收入户:借方账号' + TradeContext.I2SBAC ) AfaLoggerFunc.tradeInfo( '>>>结算手续费收入户:贷方账号' + TradeContext.I2RBAC ) #=========交易金额+手续费=================== TradeContext.I3SMCD = PL_RCCSMCD_XJTDLZ #摘要代码 TradeContext.I3SBAC = TradeContext.BESBNO + PL_ACC_NXYDJLS #借方账号 TradeContext.I3SBAC = rccpsHostFunc.CrtAcc(TradeContext.I3SBAC,25) TradeContext.I3ACNM = '待解临时款项' #借方户名 TradeContext.I3RBAC = TradeContext.BESBNO + PL_ACC_NXYDQSLZ #贷方账号 TradeContext.I3RBAC = rccpsHostFunc.CrtAcc(TradeContext.I3RBAC,25) TradeContext.I3OTNM = '农信银来账' #贷方户名 TradeContext.I3TRAM = rccpsUtilTools.AddDot(TradeContext.OCCAMT,TradeContext.CUSCHRG) #发生额 TradeContext.I3CTFG = '9' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.I3PKFG = 'T' #通存通兑标识 #=====凭证号码==== if wtr_dict['TRCCO'] == '3000102': #=====卡==== TradeContext.WARNTNO = TradeContext.SBAC[6:18] TradeContext.I2WARNTNO = TradeContext.I2SBAC[6:18] else: #=====折==== TradeContext.WARNTNO = '49' + TradeContext.BANKNO TradeContext.I2WARNTNO = '49' + TradeContext.BANKNO elif wtr_dict['TRCCO'] in ('3000003','3000005'): #=====本转异==== AfaLoggerFunc.tradeDebug('>>>本转异') TradeContext.RCCSMCD = PL_RCCSMCD_XJTCLZ #摘要代码 PL_RCCSMCD_XJTCLZ 通存来账 TradeContext.SBAC = TradeContext.BESBNO + PL_ACC_NXYDQSLZ #借方账户:农信银待清算来账 TradeContext.SBNM = "农信银待清算来账" TradeContext.RBAC = wtr_dict['PYEACC'] #贷方账户:收款人账户 TradeContext.RBNM = wtr_dict['PYENAM'] #贷方户名:收款人户名 TradeContext.OCCAMT = str(wtr_dict['OCCAMT']) #=====add by pgt 12-4==== TradeContext.CTFG = '7' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.PKFG = 'T' #通存通兑标识 TradeContext.SBAC = rccpsHostFunc.CrtAcc(TradeContext.SBAC, 25) elif wtr_dict['TRCCO'] in ('3000103','3000105'): #=====异转本==== AfaLoggerFunc.tradeDebug('>>>异转本') if( float(TradeContext.CUSCHRG) <= 0 ): #=====现金==== AfaLoggerFunc.tradeDebug('>>>现金收取手续费') TradeContext.RCCSMCD = PL_RCCSMCD_YZBWZ#主机摘要代码 TradeContext.SBAC = TradeContext.PYRACC #借方账户:付款人账户 TradeContext.ACNM = TradeContext.PYRNAM #借方户名 付款人户名 TradeContext.RBAC = TradeContext.BESBNO + PL_ACC_NXYDQSLZ #贷方账户:农信银待清算来账 TradeContext.RBAC = rccpsHostFunc.CrtAcc(TradeContext.RBAC, 25) TradeContext.RBNM = '农信银待清算来账' #贷方户名: TradeContext.CTFG = '7' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.PKFG = 'T' #通存通兑标识 if wtr_dict['TRCCO'] == '3000103': TradeContext.WARNTNO = TradeContext.SBAC[6:18] else: TradeContext.WARNTNO = '49' + TradeContext.BANKNO AfaLoggerFunc.tradeDebug( '>>>借方账号:' + TradeContext.SBAC ) AfaLoggerFunc.tradeDebug( '>>>贷方账号:' + TradeContext.RBAC ) AfaLoggerFunc.tradeDebug( '>>>凭证号码:' + TradeContext.WARNTNO ) else: #=====转账===== AfaLoggerFunc.tradeDebug('>>>转账收取手续费') TradeContext.ACUR = '3' #记账次数 #=========交易金额============ TradeContext.RCCSMCD = PL_RCCSMCD_YZBWZ #摘要代码 TradeContext.SBAC = TradeContext.PYRACC #借方账号 TradeContext.ACNM = TradeContext.PYRNAM #借方户名 TradeContext.RBAC = TradeContext.BESBNO + PL_ACC_NXYDJLS #贷方账号 TradeContext.RBAC = rccpsHostFunc.CrtAcc(TradeContext.RBAC,25) TradeContext.OTNM = '待解临时款项' #贷方户名 TradeContext.OCCAMT = str(TradeContext.OCCAMT) #发生额 TradeContext.CTFG = '7' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.PKFG = 'T' #通存通兑标识 AfaLoggerFunc.tradeDebug( '>>>交易金额:借方账号' + TradeContext.SBAC ) AfaLoggerFunc.tradeDebug( '>>>交易金额:贷方账号' + TradeContext.RBAC ) #=========结算手续费收入户=========== TradeContext.I2SMCD = PL_RCCSMCD_SXF #摘要代码 TradeContext.I2SBAC = TradeContext.PYRACC #借方账号 TradeContext.I2ACNM = TradeContext.PYRNAM #借方户名 TradeContext.I2RBAC = TradeContext.BESBNO + PL_ACC_NXYDJLS #贷方账号 TradeContext.I2RBAC = rccpsHostFunc.CrtAcc(TradeContext.I2RBAC,25) TradeContext.I2OTNM = '待解临时款项' #贷方户名 TradeContext.I2TRAM = str(TradeContext.CUSCHRG) #发生额 TradeContext.I2CTFG = '8' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.I2PKFG = 'T' #通存通兑标识 AfaLoggerFunc.tradeDebug( '>>>结算手续费收入户:借方账号' + TradeContext.I2SBAC ) AfaLoggerFunc.tradeDebug( '>>>结算手续费收入户:贷方账号' + TradeContext.I2RBAC ) #=========交易金额+手续费=================== TradeContext.I3SMCD = PL_RCCSMCD_YZBWZ #摘要代码 TradeContext.I3SBAC = TradeContext.BESBNO + PL_ACC_NXYDJLS #借方账号 TradeContext.I3SBAC = rccpsHostFunc.CrtAcc(TradeContext.I3SBAC,25) TradeContext.I3ACNM = '待解临时款项' #借方户名 TradeContext.I3RBAC = TradeContext.BESBNO + PL_ACC_NXYDQSLZ #贷方账号 TradeContext.I3RBAC = rccpsHostFunc.CrtAcc(TradeContext.I3RBAC,25) TradeContext.I3OTNM = '农信银来账' #贷方户名 TradeContext.I3TRAM = rccpsUtilTools.AddDot(TradeContext.OCCAMT,TradeContext.CUSCHRG) #发生额 TradeContext.I3CTFG = '9' #本金 手续费标识 7 本金 8手续费 9 本金+手续费 TradeContext.I3PKFG = 'T' #通存通兑标识 AfaLoggerFunc.tradeDebug( '>>>交易金额+手续费:借方账号' + TradeContext.I3SBAC ) AfaLoggerFunc.tradeDebug( '>>>交易金额+手续费:贷方账号' + TradeContext.I3RBAC ) if wtr_dict['TRCCO'] == '3000103': TradeContext.WARNTNO = TradeContext.SBAC[6:18] TradeContext.I2WARNTNO = TradeContext.I2SBAC[6:18] else: TradeContext.WARNTNO = '49' + TradeContext.BANKNO TradeContext.I2WARNTNO = '49' + TradeContext.BANKNO else: AfaLoggerFunc.tradeInfo('>>>原交易码错误') return AfaFlowControl.ExitThisFlow('S999','抛弃报文') #=====新增状态==== if wtr_dict['TRCCO'] in ('3000002','3000004','3000003','3000005'): #=====通存 本转异 状态为:自动入账==== TradeContext.BCSTAT = PL_BCSTAT_AUTO else: #=====通兑 异转本 状态为:自动扣款==== TradeContext.BCSTAT = PL_BCSTAT_AUTOPAY #=====开始设置状态==== #if not rccpsState.newTransState(TradeContext.BJEDTE,TradeContext.BSPSQN,TradeContext.BCSTAT,PL_BDWFLG_WAIT): if not rccpsState.newTransState(wtr_dict['BJEDTE'],wtr_dict['BSPSQN'],TradeContext.BCSTAT,PL_BDWFLG_WAIT): AfaDBFunc.RollbackSql() return AfaFlowControl.ExitThisFlow('S999','设置业务状态为自动入账/扣款-处理中异常') else: AfaDBFunc.CommitSql() #=====开始与主机进行通讯==== AfaLoggerFunc.tradeInfo('>>>准备开始与主机通讯') rccpsHostFunc.CommHost( TradeContext.HostCode ) #=====分析主机返回==== AfaLoggerFunc.tradeInfo('>>>分析主机返回') sstlog = {} sstlog['BJEDTE'] = wtr_dict['BJEDTE'] sstlog['BSPSQN'] = wtr_dict['BSPSQN'] sstlog['BCSTAT'] = TradeContext.BCSTAT sstlog['MGID'] = TradeContext.errorCode if TradeContext.errorCode == '0000': sstlog['TRDT'] = TradeContext.TRDT #主机日期 sstlog['TLSQ'] = TradeContext.TLSQ #主机流水 sstlog['BDWFLG']= PL_BDWFLG_SUCC sstlog['STRINFO'] = '冲销交易被冲正,补记账务成功' #附言 else: sstlog['BDWFLG']= PL_BDWFLG_FAIL sstlog['STRINFO'] = TradeContext.errorMsg #附言 #=====设置状态==== if not rccpsState.setTransState(sstlog): AfaDBFunc.RollbackSql() return AfaFlowControl.ExitThisFlow('S999', "设置业务状态异常") else: AfaDBFunc.CommitSql() #=====主机成功后返回正确回执报文==== AfaLoggerFunc.tradeInfo('>>>发送成功回执') TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCI0000' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '成功' #附言 return True elif TradeContext.ORTRCCO == '3000505': #=====3000505 补正业务==== AfaLoggerFunc.tradeDebug('>>>查找原补正业务是否存在') #关彬捷 20081230 若原业务为补正,直接回复冲正成功应答 AfaLoggerFunc.tradeInfo('>>>发送成功回执') TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCI0000' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '成功' #附言 return True else: #=====冲正原来账/往账正常业务==== #=====查找原交易是否存在==== AfaLoggerFunc.tradeDebug(">>>查找原交易是否存在") where_dict = {'MSGFLGNO':TradeContext.ORMFN} wtrbka_dict = rccpsDBTrcc_wtrbka.selectu(where_dict) if( wtrbka_dict == -1 ): AfaLoggerFunc.tradeInfo(">>>查找原交易失败,原业务中心流水号["+str(TradeContext.ORTRCNO)+"]") return AfaFlowControl.ExitThisFlow('A099',"查找原交易失败,抛弃报文,等待中心自动冲正") if( len(wtrbka_dict) == 0 ): #=====未查找到原交易==== AfaLoggerFunc.tradeDebug(">>>查找原交易失败,未收到原交易,直接回复成功报文") #=====为返回冲销成功发送成功回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCI0000' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '成功' #附言 return True else: #=====查找原交易成功==== AfaLoggerFunc.tradeInfo(">>>查找原交易成功") #=====将原报单序号 原交易日期更新到冲销登记簿中==== AfaLoggerFunc.tradeInfo('>>>更新原报单序号\原交易日期') atcbka_where={} atcbka_where['BSPSQN'] = TradeContext.BSPSQN #报单序号 atcbka_where['BJEDTE'] = TradeContext.BJEDTE #交易日期 atcbka_dict ={} atcbka_dict['BOJEDT'] = wtrbka_dict['BJEDTE'] #原交易日期 atcbka_dict['BOSPSQ'] = wtrbka_dict['BSPSQN'] #原报单序号 #关彬捷 20081225 更新冲正登记簿中登记机构号为原交易机构号 atcbka_dict['BESBNO'] = wtrbka_dict['BESBNO'] #原机构号 atcbka_dict['STRINFO'] = TradeContext.STRINFO #附言 atcbka_dict['ORTRCDAT']= wtrbka_dict['TRCDAT'] #原委托日期 atcbka_dict['OPRNO'] = PL_TDOPRNO_CZ #业务类型 ret = rccpsDBTrcc_atcbka.update(atcbka_dict,atcbka_where) if ret <= 0: AfaDBFunc.RollbackSql( ) return AfaFlowControl.ExitThisFlow('S999', "更新自动冲正登记簿原报单序号和原交易日期异常,抛弃报文") else: AfaDBFunc.CommitSql( ) AfaLoggerFunc.tradeInfo(">>>结束更新冲销登记簿原交易日期和原报单序号") #=====查找原来账业务状态==== AfaLoggerFunc.tradeInfo(">>>查找原业务状态") spbsta_where = {'BJEDTE':wtrbka_dict['BJEDTE'],'BSPSQN':wtrbka_dict['BSPSQN']} spbsta_dict = rccpsDBTrcc_spbsta.selectu(spbsta_where) if( spbsta_dict == None ): AfaLoggerFunc.tradeDebug(">>>查找原业务状态失败,发送中心失败报文") #=====为返回冲销成功发送拒绝回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCO1006' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '开户行处理失败' #附言 return True #关彬捷 20081226 新增查询交易当前状态详细信息 #查询交易当前状态详细信息 sstlog_where = {'BJEDTE':wtrbka_dict['BJEDTE'],'BSPSQN':wtrbka_dict['BSPSQN'],'BCURSQ':spbsta_dict['BCURSQ']} spbsta_dict = rccpsDBTrcc_sstlog.selectu(sstlog_where) if( spbsta_dict == None ): AfaLoggerFunc.tradeDebug(">>>查找原业务状态失败,发送中心失败报文") #=====为返回冲销成功发送拒绝回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCO1006' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '开户行处理失败' #附言 return True #关彬捷 20081226 新增若交易当前状态为自动扣款,自动入账,冲销,冲正处理中状态,退出,等待下个冲正报文 if (spbsta_dict['BCSTAT'] == PL_BCSTAT_AUTO or spbsta_dict['BCSTAT'] == PL_BCSTAT_AUTOPAY or spbsta_dict['BCSTAT'] == PL_BCSTAT_CANC or spbsta_dict['BCSTAT'] == PL_BCSTAT_CANCEL) and spbsta_dict['BDWFLG'] == PL_BDWFLG_WAIT: return AfaFlowControl.ExitThisFlow('S999','原业务账务状态未知,抛弃报文,等待中心再次发起自动冲正') #关彬捷 20081226 新增若交易当前状态为自动扣款,自动入账,冲销,冲正失败状态,则调用8816查询账务状态 if (spbsta_dict['BCSTAT'] == PL_BCSTAT_AUTO or spbsta_dict['BCSTAT'] == PL_BCSTAT_AUTOPAY or spbsta_dict['BCSTAT'] == PL_BCSTAT_CANC or spbsta_dict['BCSTAT'] == PL_BCSTAT_CANCEL) and spbsta_dict['BDWFLG'] == PL_BDWFLG_FAIL: AfaLoggerFunc.tradeDebug('>>>调用8816查找该业务[' + wtrbka_dict['BSPSQN'] + ']状态') TradeContext.HostCode = '8816' #主机交易码 TradeContext.OPFG = '1' #查询类型 TradeContext.NBBH = 'RCC' #代理业务标识 TradeContext.FEDT = spbsta_dict['FEDT'] #原前置日期 TradeContext.RBSQ = spbsta_dict['RBSQ'] #原前置流水号 TradeContext.DAFG = '1' #抹/记账标志 1:记 2:抹 TradeContext.BESBNO = spbsta_dict['BESBNO'] #机构号 TradeContext.BETELR = spbsta_dict['BETELR'] #柜员号 rccpsHostFunc.CommHost( TradeContext.HostCode ) #=====分析主机返回==== if TradeContext.errorCode == '0000': #此账务已成功记主机账,修改原交易状态为记账成功 AfaLoggerFunc.tradeInfo("此账务已成功记主机账,修改原交易状态为记账成功") stat_dict = {} stat_dict['BJEDTE'] = spbsta_dict['BJEDTE'] stat_dict['BSPSQN'] = spbsta_dict['BSPSQN'] stat_dict['BCSTAT'] = spbsta_dict['BCSTAT'] stat_dict['BDWFLG'] = PL_BDWFLG_SUCC stat_dict['TRDT'] = HostContext.O1DADT #主机日期 stat_dict['TLSQ'] = HostContext.O1AMTL #主机流水 stat_dict['MGID'] = '0000' stat_dict['STRINFO']= '主机成功' if not rccpsState.setTransState(stat_dict): return AfaFlowControl.ExitThisFlow('S999','设置原交易业务状态为记账成功异常') if not AfaDBFunc.CommitSql( ): AfaLoggerFunc.tradeFatal( AfaDBFunc.sqlErrMsg ) return AfaFlowControl.ExitThisFlow("S999","Commit异常") #更新查询出交易状态 spbsta_dict['BDWFLG'] = PL_BDWFLG_SUCC spbsta_dict['TRDT'] = HostContext.O1DADT spbsta_dict['TLSQ'] = HostContext.O1AMTL elif TradeContext.errorCode == 'XCR0001': AfaLoggerFunc.tradeInfo(">>>主机返回原交易记账失败,继续冲正") else: AfaLoggerFunc.tradeInfo(">>>查询原交易账务状态异常,返回拒绝应答,等待下次冲正报文") #=====为返回冲正拒绝回执赋值==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCO1006' #中心返回码 TradeContext.STRINFO = '原交易账务状态未知' #附言 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 return True #=====根据来往帐标识进行冲正状态判断==== if( wtrbka_dict['BRSFLG'] == PL_BRSFLG_RCV ): #=====来账业务==== AfaLoggerFunc.tradeDebug(">>>来账业务") #=====PL_BCSTAT_AUTOPAY 自动扣款==== #=====PL_BCSTAT_CONFPAY 确认付款==== #=====PL_BCSTAT_CONFACC 确认入账==== #=====PL_BCSTAT_MFERFE 拒绝==== #=====PL_BCSTAT_CANC 柜台冲销==== #=====PL_BCSTAT_CANCEL 自动冲正==== if( ((spbsta_dict['BCSTAT']==PL_BCSTAT_AUTO or spbsta_dict['BCSTAT']==PL_BCSTAT_AUTOPAY) and spbsta_dict['BDWFLG']==PL_BDWFLG_FAIL) \ or (spbsta_dict['BCSTAT'] == PL_BCSTAT_MFERFE and spbsta_dict['BDWFLG'] == PL_BDWFLG_SUCC) \ or (spbsta_dict['BCSTAT'] == PL_BCSTAT_CANC and spbsta_dict['BDWFLG'] == PL_BDWFLG_SUCC) \ or (spbsta_dict['BCSTAT'] == PL_BCSTAT_CANCEL and spbsta_dict['BDWFLG'] == PL_BDWFLG_SUCC) \ or (spbsta_dict['BCSTAT'] == PL_BCSTAT_CONFPAY and spbsta_dict['BDWFLG'] == PL_BDWFLG_SUCC) \ or (spbsta_dict['BCSTAT'] == PL_BCSTAT_CONFACC and spbsta_dict['BDWFLG'] == PL_BDWFLG_SUCC)): #=====不允许冲正==== AfaLoggerFunc.tradeDebug(">>>原业务["+str(spbsta_dict['BSPSQN'])+"]记账失败或被拒绝或冲销或自动冲正或存款确认,无需再抹账,发送成功报文") if spbsta_dict['BCSTAT'] not in (PL_BCSTAT_MFERFE,PL_BCSTAT_CANC,PL_BCSTAT_CANCEL): AfaLoggerFunc.tradeDebug('>>>新增原业务状态为自动冲正-成功') if not rccpsState.newTransState(spbsta_dict['BJEDTE'],spbsta_dict['BSPSQN'],PL_BCSTAT_CANCEL,PL_BDWFLG_SUCC): AfaDBFunc.RollbackSql() return AfaFlowControl.ExitThisFlow('S999','设置业务状态为自动冲正-成功异常') else: AfaDBFunc.CommitSql( ) else: AfaLoggerFunc.tradeDebug('>>>原业务状态为[拒绝/冲销/冲正],不需要新增状态') #=====原交易无需抹账,返回冲正成功应答==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCI0000' #中心返回码 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 TradeContext.STRINFO = '原业务冲正成功' #附言 return True else: #=====新增原业务状态为冲正-处理中==== AfaLoggerFunc.tradeDebug('>>>新增原业务状态为自动冲正-处理中') #=====直接调用8820冲正原业务==== TradeContext.BOSPSQ = spbsta_dict['BSPSQN'] #原报单序号 TradeContext.BOJEDT = spbsta_dict['BJEDTE'] #原交易日期 TradeContext.HostCode = '8820' #主机交易码 if not rccpsState.newTransState(spbsta_dict['BJEDTE'],spbsta_dict['BSPSQN'],PL_BCSTAT_CANCEL,PL_BDWFLG_WAIT): AfaDBFunc.RollbackSql() return AfaFlowControl.ExitThisFlow('S999','设置业务状态为自动冲正处理中异常') else: AfaDBFunc.CommitSql( ) #=====向主机发起8820抹账处理==== AfaLoggerFunc.tradeDebug('>>>向主机发起8820抹账处理') rccpsHostFunc.CommHost( TradeContext.HostCode ) #=====判断主机返回==== sstlog_dict={} sstlog_dict['BJEDTE'] = spbsta_dict['BJEDTE'] sstlog_dict['BSPSQN'] = spbsta_dict['BSPSQN'] sstlog_dict['BCSTAT'] = PL_BCSTAT_CANCEL #冲正 sstlog_dict['MGID'] = TradeContext.errorCode #主机返回码 if TradeContext.existVariable('BOJEDT'): #前置日期 sstlog_dict['FEDT'] = TradeContext.BOJEDT if TradeContext.existVariable('BOSPSQ'): #前置流水号 sstlog_dict['RBSQ'] = TradeContext.BOSPSQ if TradeContext.existVariable('TRDT'): #主机日期 sstlog_dict['TRDT'] = TradeContext.TRDT if TradeContext.existVariable('TLSQ'): #主机流水号 sstlog_dict['TLSQ'] = TradeContext.TLSQ #关彬捷 20090219 增加冲销成功的主机错误码判断:SXR0010(此笔交易已被冲正) if TradeContext.errorCode in ('0000','SXR0010'): #=====更改状态==== sstlog_dict['BDWFLG'] = PL_BDWFLG_SUCC #流转标识 PL_BDWFLG_SUCC 成功 sstlog_dict['STRINFO'] = '来账冲正成功' #附言 TradeContext.PRCCO = 'RCCI0000' TradeContext.STRINFO = '原业务冲正成功' else: sstlog_dict['BDWFLG'] = PL_BDWFLG_FAIL #流转标识 PL_BDWFLG_FAIL 失败 sstlog_dict['STRINFO'] = TradeContext.errorMsg #附言 TradeContext.PRCCO = 'NN1IA999' TradeContext.STRINFO = '原业务冲正失败 ' + TradeContext.errorMsg #=====修改原业务状态==== AfaLoggerFunc.tradeDebug('>>>修改原业务状态') res = rccpsState.setTransState(sstlog_dict) if( res == False ): AfaDBFunc.RollbackSql() return AfaFlowControl.ExitThisFlow('A099', '更改被冲正的交易状态失败') else: AfaDBFunc.CommitSql( ) #关彬捷 20081226 修改如果冲正失败则回滚冲正前状态 if TradeContext.errorCode not in ('0000','SXR0010'): #冲正失败,回滚状态为冲正前状态 if not rccpsState.newTransState(spbsta_dict['BJEDTE'],spbsta_dict['BSPSQN'],spbsta_dict['BCSTAT'],spbsta_dict['BDWFLG']): AfaDBFunc.RollBackSql() return AfaFlowControl.ExitThisFlow('S999','回滚状态为冲正前状态异常') else: AfaDBFunc.CommitSql() sstlog_dict = {} sstlog_dict['BJEDTE'] = spbsta_dict['BJEDTE'] sstlog_dict['BSPSQN'] = spbsta_dict['BSPSQN'] sstlog_dict['BCSTAT'] = spbsta_dict['BCSTAT'] sstlog_dict['BDWFLG'] = spbsta_dict['BDWFLG'] sstlog_dict['NOTE3'] = '原业务冲正失败,回滚为冲正前状态' if spbsta_dict.has_key('FEDT'): #前置日期 sstlog_dict['FEDT'] = spbsta_dict['FEDT'] if spbsta_dict.has_key('RBSQ'): #前置流水号 sstlog_dict['RBSQ'] = spbsta_dict['RBSQ'] if spbsta_dict.has_key('TRDT'): #主机日期 sstlog_dict['TRDT'] = spbsta_dict['TRDT'] if spbsta_dict.has_key('TLSQ'): #主机流水号 sstlog_dict['TLSQ'] = spbsta_dict['TLSQ'] sstlog_dict['MGID'] = spbsta_dict['MGID'] #主机返回码 sstlog_dict['STRINFO'] = spbsta_dict['STRINFO'] #主机返回信息 if not rccpsState.setTransState(sstlog_dict): return AfaFlowControl.ExitThisFlow('S999','回滚状态为冲正前状态详细信息异常') else: AfaDBFunc.CommitSql() #=====发送回执==== AfaLoggerFunc.tradeDebug('>>>发送成功回执到对方行') #=====为返回冲销成功发送成功回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 #TradeContext.PRCCO = 'RCCI0000' #中心返回码 #TradeContext.STRINFO = '原业务冲正成功' #附言 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 return True else: #=====往帐业务==== AfaLoggerFunc.tradeDebug(">>>往帐业务") #=====发送回执==== AfaLoggerFunc.tradeDebug('>>>发送拒绝回执到对方行') #=====为返回冲销成功发送成功回执==== TradeContext.MSGTYPCO = 'SET010' #报文类代码 TradeContext.PRCCO = 'RCCO1006' #中心返回码 TradeContext.STRINFO = '往帐业务只能由受理方冲正' #附言 TradeContext.ORMFN = TradeContext.MSGFLGNO #参考报文标示号 TradeContext.SNDSTLBIN= TradeContext.RCVMBRCO #发送成员行号 TradeContext.RCVSTLBIN= TradeContext.SNDMBRCO #接收成员行号 AfaLoggerFunc.tradeInfo("农信银系统:来账.中心类操作(1.本地操作).柜台冲正来账接收[TRCC006_1144]进入") return True