1、    通过C++ Builder设计开发客户端,将表[NAME]_CALL_TICKET_STAT中的结果按照一定条件显示在客户端界面中;
2、    [NAME]_CALL_TICKET_STAT表结构及内容见1.1中有关说明;
3、    条件包括:
1)    选定日期时间段;
2)    选定帐目类型;
3)    选定主叫号码;
4、    界面显示内容包括主叫、被叫、帐目类型、原始费用、优惠费用、时长及通话时间等;
5、    要求写一后台TUXEDO服务程序,客户端向TUXEDO服务端调用该服务完成相关查询结果的显示;
6、    后台TUXEDO接收来自客户端的服务请求,服务请求参数包括:日期时间段、帐目类型、主叫号码;
7、    完成客户及服务端编译;
8、    附后有TUXEDO服务模板,按模板完成相应服务编写;


#include <base/platform.h>
#include <UtilPackage.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <rating_func/ibacom.h>
#include <rating_func/BaseFunction.h>
#include <publiclib.h>
#include <sqlca.h>

using namespace std;
#ifdef _WIN32
    #define DLLIMPORT _declspec(dllimport)
    #define DLLEXPORT _declspec(dllexport)
    #define CDECL _cdecl
#else
    #define DLLIMPORT
    #define DLLEXPORT
    #define CDECL
#endif

#define ORA7

#if defined (DB2)
    #define SQLNOTFOUND 100
    #include <sql.h>
    #define DATABASE "cicstest"
#elif defined (ORA7)
    #define SQLNOTFOUND 1403
#endif

#ifdef __cplusplus
extern "C"
#endif
void
#if defined(__STDC__) || defined(__cplusplus)
TEST(TPSVCINFO *rqst)
#else
TEST(rqst)
TPSVCINFO *rqst;
#endif
{
      EXEC SQL BEGIN DECLARE SECTION;
    char     Q_data_group_code[4];
    char     Q_data_group_name[60];
    char     Q_obj_type[2];
    long     staff_id;
    EXEC SQL END DECLARE SECTION;

      int counts=0;
    FILE *fp;

    /*错误信息长度*/
    char     errmsg[81];

    /*临时变量*/
    char  ctemp[50];

    flag[0]='\0';
    ctemp[0]='\0';

    /*初始化EasyTp*/
    if(InitEasyTp(rqst)<0)
    {
        ExitEasyTp();
        return ;
    }
    
    GetValue("flag",flag);
    GetValue("staff_id",ctemp);
    staff_id=atol(ctemp);
    userlog("staff_id=%d",staff_id);
  
      EXEC SQL DECLARE c1 CURSOR FOR 
      SELECT data_group_code,data_group_name,obj_type FROM data_group_code;
      EXEC SQL OPEN c1;
      if (sqlca.sqlcode<0)
      {
          userlog("查询分类数据报错!sqlca.sqlcode=%d",sqlca.sqlcode);
        SetValue("errno","-1");
        SetValue("errmsg","查询权限时数据库错!");
        ExitEasyTp();
        return ;
      }
        BeginWrite();
      RsCreate(3);
      while(1)
      {
          EXEC SQL FETCH c1 INTO :Q_data_group_code,:Q_data_group_name,:Q_obj_type;
        if (sqlca.sqlcode==SQLNOTFOUND)     break;
           if (sqlca.sqlcode<0)
        {
          userlog("查询分类数据报错!sqlca.sqlcode=%d",sqlca.sqlcode);
          EXEC SQL CLOSE c1;
          SetValue("errno","-1");
            SetValue("errmsg","查询权限时数据库错!");
            ExitEasyTp();
            return ;
        }
          stringTrim(Q_data_group_code);
        stringTrim(Q_data_group_name);
          stringTrim(Q_obj_type);
        RsAddRow(); 
        RsSetCol(1,Q_data_group_code);
        RsSetCol(2,Q_data_group_name);
        RsSaveRow();
      }
      EXEC SQL CLOSE c1;
      SetValue("errno","1");    
      ExitEasyTp();
      userlog("处理成功!"); 
      return; 
}