⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cb8583pack.java

📁 8583 pack and unpack 8583 pro
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                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 + -