📄 cb8583pack.java
字号:
switch(Integer.parseInt(retCodeParam[2].trim())){
case CB8583Const.COMMON_ERRORCODE_FILE:{
retDataPacket.errMsg = CB8583ErrorCode.getInstance().
getErrDescription(retDataPacket.errCode);
}
break;
default:
retDataPacket.errMsg = CB8583ErrorCode.getInstance().
getErrDescription(retDataPacket.errCode);
break;
}
}
}
}
}
tmpRuleValue = null;
tmpValue = null;
String lastRecord = null;
if(field48Value != null&& field48Value.length>86){
byte[] tmpRecordValue = null;
if (field47Value != null) {
tmpRecordValue = new byte[field48Value.length + field47Value.length];
System.arraycopy(field48Value, 0, tmpRecordValue, 0,
field48Value.length);
System.arraycopy(field47Value, 0, tmpRecordValue, field48Value.length,
field47Value.length);
}
else {
tmpRecordValue = field48Value;
}
DataField recordField = unPackRecords(new String(header.getPrcCode()),tmpRecordValue);
if (((DataField) retDataPacket.getDomain(retDataPacket.getSize()-1)).fieldSign != SignConst.RECORD_DOMAIN) {
retDataPacket.add(recordField);
}else {
((TradeField)retDataPacket.getDomain(retDataPacket.getSize()-1)).record.addAll(recordField.record);
}
retDataPacket.recordData = field48Value;
if(recordField != null && recordField.record != null && recordField.record.size() > 0)
lastRecord = (String)recordField.record.get(recordField.record.size()-1);
}
if(checkSerialTrade(retDataPacket,tradeParam,lastRecord)){
retDataPacket.hasNextTrade = true;
}
lastRecord = null;
}
finally{
packetHeader = null;
bodyLen = null;
packetBody = null;
messageId = null;
bitmapField = null;
header = null;
bitmap = null;
outParamList = null;
outRecordParam = null;
retCodeParam = null;
field47Value = null;
field48Value = null;
retCodeParam = null;
}
return retDataPacket;
}
public static boolean checkSerialTrade(TradePacket responsePack,TradeParam tradeParam,String lastRecord)throws PacketException{
if(responsePack == null || tradeParam == null || tradeParam.serialTrade == null)
return false;
SerialTradeParam serialTradeParam = tradeParam.serialTrade;
String[] tmpRuleValue = SysFunction.splitString(tradeParam.serialTrade.from.trim(),":");
if(tmpRuleValue == null || tmpRuleValue.length <= 0)
return false;
boolean hasNextTrade = false;
String validValue = tradeParam.serialTrade.validValue.trim().toUpperCase();
String validRule = new StringBuffer(tmpRuleValue[0]).append(":").append(tmpRuleValue[1]).toString();
for(int i=0;i<responsePack.getSize();i++){
if(((TradeField)responsePack.getDomain(i)).fieldRule.startsWith(validRule)){
if(validValue.indexOf(new String(((TradeField)responsePack.getDomain(i)).getValue(),Integer.parseInt(tmpRuleValue[1]),Integer.parseInt(tmpRuleValue[2])).toUpperCase()) >= 0){
responsePack.hasNextTrade = true;
hasNextTrade = true;
}
break;
}
}
tmpRuleValue = null;
ArrayList serialParamList = null;
ArrayList serialValueList = null;
SerialTradeParamHelper tmpSerialParam = null;
SerialTradeValue tmpSerialTradeValue = null;
if(tradeParam.serialTrade != null && tradeParam.serialTrade.paramList != null)
serialParamList = tradeParam.serialTrade.paramList;
if(hasNextTrade){
if(serialParamList != null && serialParamList.size() > 0 ){
if(serialValueList == null)
serialValueList = new ArrayList();
for(int j=0 ; j<serialParamList.size() ; j++){
tmpSerialParam = (SerialTradeParamHelper)serialParamList.get(j);
tmpSerialTradeValue = new SerialTradeValue();
tmpSerialTradeValue.from = tmpSerialParam.from;
tmpSerialTradeValue.to = tmpSerialParam.to;
tmpRuleValue = null;
if(tmpSerialParam.from.trim().equals("record_count")){//计数器
if (((DataField)responsePack.getDomain(responsePack.getSize()-1)).fieldSign == SignConst.RECORD_DOMAIN) {
tmpSerialTradeValue.fromValue = String.valueOf(((DataField)responsePack.getDomain(responsePack.getSize()-1)).record.size()).getBytes();
System.out.println("================================"+String.valueOf(((DataField)responsePack.getDomain(responsePack.getSize()-1)).record.size()));
serialValueList.add(tmpSerialTradeValue);
}
}
else if(tmpSerialParam.from.trim().startsWith("last_record")){//最后一条纪录
if(lastRecord != null && !lastRecord.trim().equals("")){
System.out.println("================================----"+lastRecord);
tmpRuleValue = SysFunction.splitString(tmpSerialParam.from.trim(), ":");
int fieldNo = Integer.parseInt(tmpRuleValue[1])-1;
String[] tmpFieldValue = SysFunction.splitString(lastRecord.trim(), "|");
tmpSerialTradeValue.fromValue = tmpFieldValue[fieldNo].getBytes();
if(!tmpRuleValue[2].trim().equals("0")){
if(tmpRuleValue.length < 4)
tmpSerialTradeValue.fromValue = convertField(tmpSerialTradeValue.fromValue,Integer.parseInt(tmpRuleValue[2].trim()),0,null,null);
else
tmpSerialTradeValue.fromValue = convertField(tmpSerialTradeValue.fromValue,Integer.parseInt(tmpRuleValue[2].trim()),0,tmpRuleValue[3].trim().getBytes(),tmpRuleValue[3].trim());
}
System.out.println("================================----:"+new String(tmpSerialTradeValue.fromValue));
serialValueList.add(tmpSerialTradeValue);
tmpFieldValue = null;
}
}
else if(tmpSerialParam.from.trim().startsWith("48")){
tmpRuleValue = SysFunction.splitString(tmpSerialParam.from.trim(), ":");
tmpSerialTradeValue.fromValue = new byte[Integer.parseInt(tmpRuleValue[2].trim())];
System.arraycopy(responsePack.recordData,
Integer.parseInt(tmpRuleValue[1].trim()),
tmpSerialTradeValue.fromValue, 0,
Integer.parseInt(tmpRuleValue[2].trim()));
if(!tmpRuleValue[3].trim().equals("0")){
if(tmpRuleValue.length < 5)
tmpSerialTradeValue.fromValue = convertField(tmpSerialTradeValue.fromValue,Integer.parseInt(tmpRuleValue[3].trim()),Integer.parseInt(tmpRuleValue[2].trim()),null,null);
else
tmpSerialTradeValue.fromValue = convertField(tmpSerialTradeValue.fromValue,Integer.parseInt(tmpRuleValue[3].trim()),Integer.parseInt(tmpRuleValue[2].trim()),tmpRuleValue[4].trim().getBytes(),tmpRuleValue[4].trim());
}
serialValueList.add(tmpSerialTradeValue);
}else{
for(int i=0;i<responsePack.getSize();i++){
tmpRuleValue = SysFunction.splitString(((TradeField)responsePack.getDomain(i)).fieldRule,":");
if (tmpSerialParam.from.trim().startsWith(tmpRuleValue[0]+":")){
tmpRuleValue = SysFunction.splitString(tmpSerialParam.from.trim(), ":");
tmpSerialTradeValue.fromValue = new byte[Integer.parseInt(tmpRuleValue[2].trim())];
if(tmpRuleValue[2].trim().equals("0"))
tmpSerialTradeValue.fromValue = ((TradeField) responsePack.getDomain(i)).getValue();
else
System.arraycopy(((TradeField) responsePack.getDomain(i)).
getValue(),
Integer.parseInt(tmpRuleValue[1].trim()),
tmpSerialTradeValue.fromValue, 0,
Integer.parseInt(tmpRuleValue[2].trim()));
if(!tmpRuleValue[3].trim().equals("0")){
if(tmpRuleValue.length < 5)
tmpSerialTradeValue.fromValue = convertField(tmpSerialTradeValue.fromValue,Integer.parseInt(tmpRuleValue[3].trim()),Integer.parseInt(tmpRuleValue[2].trim()),null,null);
else
tmpSerialTradeValue.fromValue = convertField(tmpSerialTradeValue.fromValue,Integer.parseInt(tmpRuleValue[3].trim()),Integer.parseInt(tmpRuleValue[2].trim()),tmpRuleValue[4].trim().getBytes(),tmpRuleValue[4].trim());
}
serialValueList.add(tmpSerialTradeValue);
break;
}
}
}
}
responsePack.nextTradeValueList = serialValueList;
}
}
tmpRuleValue = null;
return hasNextTrade;
}
public static DataField unPackRecords(String tradeCode,byte[] recordData) throws PacketException{
System.out.println("record value="+ new String(recordData));
if(recordData == null || tradeCode == null)
return null;
TradeParam tradeParam = CB8583Config.getInstance().getTradeParam(tradeCode);
if(tradeParam == null || tradeParam.paramList == null){
throw new PacketException("解包出错,交易参数没有配置");
}
String outParam = (String)tradeParam.paramList.get("out");
if(outParam == null)
throw new PacketException("解包出错,输出参数没有配置");
String[] outParamList = SysFunction.splitString(outParam,"#");
String[] recordParamList = null;
if(outParamList.length >= 2)
recordParamList = SysFunction.splitString(outParamList[1],"|");
TradeField recordsField = new TradeField();
if(recordParamList != null){
String[] recordParamHeader = SysFunction.splitString(recordParamList[0],":");
int recordLen = Integer.parseInt(recordParamHeader[0]);
int recordStartPos = Integer.parseInt(recordParamHeader[1]);
int recordBufLen = recordData.length-recordStartPos;
int recordNum = recordBufLen/recordLen;
int cusPos = 0;
recordsField.fieldRule = outParamList[1].substring(outParamList[1].indexOf("|")+1);
//add by tangmw
String[] recordRule= SysFunction.splitString(recordsField.fieldRule,"|");
StringBuffer outRecordRule = new StringBuffer("");
for(int m=0;m<recordRule.length;m++){
String[] recordFieldRule = SysFunction.splitString(recordRule[m],":");
outRecordRule.append("48").append(":").append(recordFieldRule[1]).append("|");
}
System.out.println(outRecordRule.toString());
recordsField.fieldRule=outRecordRule.toString();
recordsField.fieldSign = SignConst.RECORD_DOMAIN;
recordsField.record = new java.util.ArrayList(35);
String[] tmpParam = null;
String tmpFieldValue = null;
for(int j=0 ; j<recordNum ; j++){
StringBuffer recordLine = new StringBuffer();
for(int k=1;k<recordParamList.length;k++){
// System.out.println("recordParanmlist"+k+".........."+recordParamList[k]);
tmpParam = null;
tmpParam = SysFunction.splitString(recordParamList[k],":");
int offset = cusPos + Integer.parseInt(tmpParam[1].trim());
int length = Integer.parseInt(tmpParam[2].trim());
tmpFieldValue = new String(recordData,offset,length);
if(!tmpParam[3].trim().equals("0")){
if(tmpParam.length < 5)
tmpFieldValue = new String(convertField(tmpFieldValue.getBytes(),Integer.parseInt(tmpParam[3].trim()),Integer.parseInt(tmpParam[2].trim()),null,null));
else
tmpFieldValue = new String(convertField(tmpFieldValue.getBytes(),Integer.parseInt(tmpParam[3].trim()),Integer.parseInt(tmpParam[2].trim()),tmpParam[4].trim().getBytes(),tmpParam[4].trim()));
}
recordLine.append(tmpFieldValue).append("|");
// System.out.println("recordline field................."+j+ new String(recordLine.toString()));
}
System.out.println("recordline+"+j+ new String(recordLine.toString()));
cusPos += recordLen;
recordsField.record.add(recordLine.toString());
}
//tradeField=(TradeField)recordsField;
tmpParam = null;
recordParamHeader = null;
}
outParamList = null;
recordParamList = null;
return recordsField;
}
public static byte[] convertField(byte[] fieldValue,int method,int maxLength,byte[] defaultValue,String selectType) throws PacketException{
if(fieldValue == null)
return defaultValue;
byte[] tmpValue = null;
switch(method){
case 0:{
tmpValue = fieldValue;
}break;
case 888:{
tmpValue = defaultValue;
}break;
case 999:{
tmpValue = TradeDataSelectConvert.getInstance().getSelectValue(selectType,new String(fieldValue)).getBytes();
}break;
default:
tmpValue = TradeDataConvert.convertData(fieldValue,method,maxLength);
break;
}
return tmpValue;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -