SQL语句


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include <sqlite3.h>
#include "ConfJSONParse.h"
#include "ConfSQLApi.h"
#include "PlatAllHeader.h"

//MYSQL 数据库 API
extern MYSQL *mysql_connect;
extern char glb_mysqlInstName[];
extern char glb_mysqlIP[];
extern char glb_mysqlUser[];
extern char glb_mysqlPassword[];
extern SINT glb_mysqlPort;

MYSQL * MYSQL_udb_open(void)
{
    /* 从SQLITE中读取出配置的数据库连接信息 读取数据库配置 */
    T_JosnConfig* ptconfig = NULL;
    ptconfig = Fplat_GetjsonCfg();
    /*读取本地配置*/

    char *db = ptconfig->udbsqlInstName;
    char *MYSQL_ip = ptconfig->udbsqlIpaddr;
    int   MYSQL_port = ptconfig->udbsqlPort; //0表示使用数据库的默认端口
    char *MYSQL_user = ptconfig->udbsqlUserName;
    char *MYSQL_password = ptconfig->udbsqlPassword;

    strcpy(glb_mysqlInstName, ptconfig->udbsqlInstName);
    strcpy(glb_mysqlIP, ptconfig->udbsqlIpaddr);
    strcpy(glb_mysqlUser, ptconfig->udbsqlUserName);
    strcpy(glb_mysqlPassword, ptconfig->udbsqlPassword);
    glb_mysqlPort = ptconfig->udbsqlPort;

    MYSQL *mysql_conn = mysql_init(NULL);
    if (mysql_conn == NULL)/* 初始化 */
    {
        x_ErrorLog("mysql_init() failed: %s\n", mysql_error(mysql_conn));
        exit(-1);
    }
    my_bool reconnect = 1;
    if (XPOC_ERR_SUCCESS == mysql_options(mysql_conn, MYSQL_OPT_RECONNECT, &reconnect))
    {
        x_InfoLog("UM_Mysql_init() function success.");
    }
    else
    {
        x_ErrorLog("mysql_options() function failed: %s\n", mysql_error(mysql_conn));
    }

    /* 连接数据库 */
    if (!mysql_real_connect(mysql_conn, MYSQL_ip, MYSQL_user, MYSQL_password, db, MYSQL_port, NULL, 0))
    {
        x_ErrorLog("connect mysql db failed : %s\n", mysql_error(mysql_conn));
        exit(-1);
    }
    else {
        x_InfoLog("connect mysql db success!\n");
    }

    //set session wait_timeout=31536000 to avoid disconnect
    if (mysql_query(mysql_conn, "set session wait_timeout=31536000"))
    {
        x_ErrorLog("Error - unable to set wait_timeout: %s\n", mysql_error(mysql_conn));
        exit(-1);
    }

    //set global interactive_timeout, when reconnect, session wait_timeout will same as 'global interactive_timeout'
    if (mysql_query(mysql_conn, "set global interactive_timeout=31536000"))
    {
        x_ErrorLog("Error - unable to set interactive_timeout: %s\n", mysql_error(mysql_conn));
        //no need to return
    }

    ///
    if(ptconfig) free(ptconfig);

    return mysql_conn;
}

UINT MYSQL_udb_excute(MYSQL *mysql_conn, const char * ptSql)
{
    UINT ret_val = XPOC_ERR_SUCCESS;
    (void)mysql_conn;
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_ONE_PARA(ptSql);

    x_InfoLog("Exec SQL[%s].\n", ptSql);
    MYSQL *mysql_link = mysql_init(NULL);
    if (mysql_link == NULL)/* 初始化 */
    {
        x_ErrorLog("mysql_init() failed: %s\n", mysql_error(mysql_link));
        return XPOC_ERR_FAIL;
    }
    /* 连接数据库 */
    if (!mysql_real_connect(mysql_link, glb_mysqlIP, glb_mysqlUser, glb_mysqlPassword, glb_mysqlInstName, glb_mysqlPort, NULL, 0))
    {
        x_ErrorLog("connect mysql db failed : %s\n", mysql_error(mysql_link));
        return XPOC_ERR_FAIL;
    }

    // 如果是h_user_msg或h_group_msg或h_fse_file表,则统一uft_8格式输出(本地已测试)
    if (strstr(ptSql, "h_user_msg") || strstr(ptSql, "h_group_msg") || strstr(ptSql, "h_fse_file") || strstr(ptSql, "h_fse_offline_file"))
    {
        ret_val = mysql_query(mysql_link, "set names utf8");
        if (ret_val != XPOC_ERR_SUCCESS) 
        {
            x_ErrorLog("h_user_msg or h_group_msg set utf8 error: %s\n", mysql_error(mysql_link)); // 只打印错误日志,不返回,乱码也会保存起来
        }
    }

    ret_val = mysql_query(mysql_link, (const char *)ptSql);
    if (ret_val != XPOC_ERR_SUCCESS)
    {
        if (UM_MYSQL_SERVER_GONE_AWAY == ret_val)
        {
            ret_val = mysql_ping(mysql_link);
            if (XPOC_ERR_SUCCESS == ret_val)
            {
                ret_val = mysql_query(mysql_link, (const char *)ptSql);
            }
        }
    }

    if (XPOC_ERR_SUCCESS != ret_val)
    {
        x_ErrorLog("Error mysql_udb_query FAILED! Error : %s", mysql_error(mysql_link));
    }
    if (mysql_affected_rows(mysql_link) == 0)
    {
        x_DebugLog("Affected rows is 0 !");
    }

    mysql_close(mysql_link);

    XPOC_TRACEFUNC_OUT;
    return ret_val;
}

UINT MYSQL_udbGetRecord(MYSQL *mysql_conn, char *ptSql, MYSQL_RES **result)
{
    UINT ret_val = XPOC_ERR_SUCCESS;
    (void)mysql_conn;
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_ONE_PARA(ptSql);

    x_InfoLog("Exec SQL[%s].\n", ptSql);
    MYSQL *mysql_link = mysql_init(NULL);
    if (mysql_link == NULL)/* 初始化 */
    {
        x_ErrorLog("mysql_init() failed.\n");
        return XPOC_ERR_FAIL;
    }
    /* 连接数据库 */
    if (!mysql_real_connect(mysql_link, glb_mysqlIP, glb_mysqlUser, glb_mysqlPassword, glb_mysqlInstName, glb_mysqlPort, NULL, 0))
    {
        x_ErrorLog("connect mysql db failed : %s\n", mysql_error(mysql_link));
        return XPOC_ERR_FAIL;
    }
    // 如果是h_user_msg或h_group_msg或h_fse_file表,则统一uft_8格式输出(本地已测试)
    if (strstr(ptSql, "h_user_msg") || strstr(ptSql, "h_group_msg") || strstr(ptSql, "h_fse_file") || strstr(ptSql, "h_fse_offline_file"))
    {
        ret_val = mysql_query(mysql_link, "set names utf8");
        if (ret_val != XPOC_ERR_SUCCESS) 
        {
            x_ErrorLog("h_user_msg or h_group_msg set utf8 error: %s\n", mysql_error(mysql_link)); // 只打印错误日志,不返回,乱码也会保存起来
        }
    }

    ret_val = mysql_query(mysql_link, (const char *)ptSql);
    if (XPOC_ERR_SUCCESS == ret_val)
    {
        *result = mysql_store_result(mysql_link);
    }
    else
    {
        if (UM_MYSQL_SERVER_GONE_AWAY == ret_val)
        {
            ret_val = mysql_ping(mysql_link);
            if (XPOC_ERR_SUCCESS == ret_val)
            {
                ret_val = mysql_query(mysql_link, (const char *)ptSql);
                if (XPOC_ERR_SUCCESS == ret_val)
                {
                    *result = mysql_store_result(mysql_link);
                }
            }
        }
    }

    //避免mysql_store_result返回空指针,导致rce core dump
    if (XPOC_ERR_SUCCESS == ret_val && *result == NULL)
    {
        *result = mysql_store_result(mysql_link);
        if (*result == NULL)
        {
            x_ErrorLog("Error mysql_store_result FAILED, return NULL!");
            mysql_close(mysql_link);
            return XPOC_ERR_FAIL;
        }
    }

    if (XPOC_ERR_SUCCESS != ret_val)
    {
        x_ErrorLog("Error mysql_udb_query FAILED! Error : %s", mysql_error(mysql_link));
    }

    mysql_close(mysql_link);
    XPOC_TRACEFUNC_OUT;
    return ret_val;
}

UINT MYSQL_NeEntity_Qry(MYSQL *mysql_conn, EntityType_E entityType, NE_Entity_List_Struct *ptNeEntityList)
{
    UINT ret_val = XPOC_ERR_SUCCESS;
    char ne_type[10]; memset(ne_type, 0, 10);

    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptNeEntityList);

    x_InfoLog("mysql[%p].", mysql_conn);

    switch (entityType)
    {
        case D_PROCTYPE_ACE:
            strcpy(ne_type,"ace");
            break;
        case D_PROCTYPE_ACE_HTTPS:
            strcpy(ne_type, "ace_https");
            break;
        case D_PROCTYPE_CCE:
            strcpy(ne_type, "cce");
            break;
        case D_PROCTYPE_CCE_HTTPS:
            strcpy(ne_type, "cce_https");
            break;
        case D_PROCTYPE_MDE:
            strcpy(ne_type, "mde");
            break;
        case D_PROCTYPE_FSE:
            strcpy(ne_type, "fse");
            break;
        case D_PROCTYPE_FSE_HTTPS:
            strcpy(ne_type, "fse_https");
            break;
        case D_PROCTYPE_GSE_HTTPS:
            strcpy(ne_type, "gse_https");
            break;
        case D_PROCTYPE_UDE_HTTPS:
            strcpy(ne_type, "ude_https");
            break;
        case D_PROCTYPE_ACE_RMT:
            strcpy(ne_type, "ace_rmt");
            break;
        case D_PROCTYPE_RCE:
            strcpy(ne_type, "rce");
            break;
        case D_PROCTYPE_RCE_HTTPS:
            strcpy(ne_type, "rce_https");
            break;
        default:
            x_ErrorLog("unexpected ne_type[%d] while query ne entity failed.", entityType);
            return XPOC_ERR_FAIL;
    }

    MYSQL_RES *result;
    MYSQL_ROW row;
    char strSql[1024]; 
    memset(strSql, 0, 1024);

    sprintf(strSql, "SELECT ip,port FROM h_ne_config WHERE ne_type=\'%s\'", ne_type);
    ret_val = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
    if (ret_val == XPOC_ERR_SUCCESS)
    {
        ptNeEntityList->uiNeNum = result->row_count;
        UINT i = 0;
        while((row = mysql_fetch_row(result)) != NULL)
        {
            strncpy(ptNeEntityList->stNeList[i].DevHostIp, (char *)row[0], STR_LEN32);
            ptNeEntityList->stNeList[i].DevPort = atoi(row[1]);
            i++;
        }
        mysql_free_result(result);
    }

    x_InfoLog("get NE[%s],num[%d],ip[%s:%d].", 
        ne_type, ptNeEntityList->uiNeNum, ptNeEntityList->stNeList[0].DevHostIp, ptNeEntityList->stNeList[0].DevPort);

    XPOC_TRACEFUNC_OUT;
    return ret_val;
}

UINT MYSQL_UserAccount_Add(MYSQL *mysql_conn, UserDetailInfo *ptUserInfo)
{
    char    strSql[1024]; memset(strSql, 0, 1024);
    sprintf(strSql, "insert into h_account(account_no,user_no,user_alias,password,fleet_id,attr," \
                    "audio_ca,video_ca,data_ca,gis_interval,audio_rcrd,video_rcrd) " \
                    "values(\'%s\',\'%s\',\'%s\',\'%s\',%ld,%d,%d,%d,%d,%d,%d,%d);",
                    ptUserInfo->AccountID,
                    ptUserInfo->UserID,
                    ptUserInfo->UserAlias,
                    ptUserInfo->Password,
                    ptUserInfo->FleetID,
                    ptUserInfo->Attr,
                    ptUserInfo->AudioCa,
                    ptUserInfo->VideoCa,
                    ptUserInfo->DataCa,
                    ptUserInfo->GisInterval,
                    ptUserInfo->audioRcrd,
                    ptUserInfo->videoRcrd);

    return MYSQL_udb_excute(mysql_conn, strSql);
}

UINT MYSQL_UserAccount_Del(MYSQL *mysql_conn, UserDetailInfo *ptUserInfo)
{
    char    strSql[1024]; memset(strSql, 0, 1024);
    if (strlen(ptUserInfo->AccountID))
    {
        sprintf(strSql, "delete from h_account where account_no=\'%s\';", ptUserInfo->AccountID);
    }
    else if (strlen(ptUserInfo->UserID))
    {
        sprintf(strSql, "delete from h_account where account_no=\'%s\';", ptUserInfo->UserID);
    }
    else
    {
        return XPOC_ERR_FAIL;
    }


    return MYSQL_udb_excute(mysql_conn, strSql);
}

UINT MYSQL_UserAccount_Mod(MYSQL *mysql_conn, UserDetailInfo *ptUserInfo)
{
    char    strSql[1024]; memset(strSql, 0, 1024);
    sprintf(strSql, "update h_account set account_no=\'%s\',user_no=\'%s\',user_alias=\'%s\'," \
                    "password=\'%s\',fleet_id=%ld,attr=%d,audio_ca=%d,video_ca=%d,data_ca=%d, " \
                    "gis_interval=%d,audio_rcrd=%d,video_rcrd=%d where account_no = \'%s\';", 
                    ptUserInfo->UserID,
                    ptUserInfo->UserAlias,
                    ptUserInfo->Password,
                    ptUserInfo->FleetID,
                    ptUserInfo->Attr,
                    ptUserInfo->AudioCa,
                    ptUserInfo->VideoCa,
                    ptUserInfo->DataCa,
                    ptUserInfo->GisInterval,
                    ptUserInfo->audioRcrd,
                    ptUserInfo->videoRcrd,
                    ptUserInfo->AccountID);

    return MYSQL_udb_excute(mysql_conn, strSql);
}

UINT MYSQL_UserAccount_Qry(MYSQL *mysql_conn, UserDetailInfo *ptUserInfo)
{
    UINT               ret_val = XPOC_ERR_SUCCESS;
    MYSQL_RES          *result;
    MYSQL_ROW           row;

    char strSql[1024]; memset(strSql, 0, 1024);
    if (strlen(ptUserInfo->AccountID))
    {
        sprintf(strSql, "select account_no,user_no,user_alias,password,fleet_id,attr,audio_ca,video_ca," \
                        "data_ca,gis_interval,audio_rcrd,video_rcrd from h_account where account_no = \'%s\';", 
                        ptUserInfo->AccountID);
    }
    else if (strlen(ptUserInfo->UserID))
    {
        sprintf(strSql, "select account_no,user_no,user_alias,password,fleet_id,attr,audio_ca,video_ca," \
                        "data_ca,gis_interval,audio_rcrd,video_rcrd from h_account where user_no = \'%s\';", 
                        ptUserInfo->UserID);
    }
    else
    {
        return XPOC_ERR_FAIL;
    }

    ret_val = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
    if (ret_val == XPOC_ERR_SUCCESS)
    {
        ret_val = XPOC_ERR_FAIL;
        while ((row = mysql_fetch_row(result)) != NULL)
        {
            if (row[0])
                strncpy(ptUserInfo->AccountID, (char *)row[0], STR_LEN32);
            if (row[1])
                strncpy(ptUserInfo->UserID, (char *)row[1], STR_LEN32);
            if (row[2])
                strncpy(ptUserInfo->UserAlias, (char *)row[2], STR_LEN32);
            if (row[3])
                strncpy(ptUserInfo->Password, (char *)row[3], STR_LEN32);
            if (row[4])
                ptUserInfo->FleetID = atol(row[4]);
            if (row[5])
                ptUserInfo->Attr = atoi(row[5]);
            if (row[6])
                ptUserInfo->AudioCa = atoi(row[6]);
            if (row[7])
                ptUserInfo->VideoCa = atoi(row[7]);
            if (row[8])
                ptUserInfo->DataCa = atoi(row[8]);
            if (row[9])
                ptUserInfo->GisInterval = atoi(row[9]);
            if (row[10])
                ptUserInfo->audioRcrd = atoi(row[10]);
            if (row[11])
                ptUserInfo->videoRcrd = atoi(row[11]);
            ret_val = XPOC_ERR_SUCCESS;
        }
        mysql_free_result(result);
    }
    return ret_val;
}

UINT MYSQL_Group_QryByID(MYSQL *mysql_conn, char * pAccountID, char * pUserID, char *pGroupID, GroupDataInfo *ptGroupDataInfo, UCHAR bNeedSearchMember)
{
    UINT               ret_val = XPOC_ERR_SUCCESS;
    MYSQL_RES          *result;
    MYSQL_ROW           row;    

    char    strSql[1024]; memset(strSql, 0, 1024);
    if (0 < strlen(pAccountID))
    {
        sprintf(strSql, "select group_id,group_alias,audio_record,video_record,floor_time,idle_time " \
                        "from h_group where group_id in (select group_id from h_group_member where member_account_no = \'%s\');", 
                        pAccountID);
    }
    else if (0 < strlen(pUserID))
    {
        sprintf(strSql, "select group_id,group_alias,audio_record,video_record,floor_time,idle_time " \
                        "from h_group where group_id in (select group_id from h_group_member where member_user_no = \'%s\');", 
                        pUserID);
    }
    else if (0 < strlen(pGroupID))
    {
        sprintf(strSql, "select group_id,group_alias,audio_record,video_record,floor_time,idle_time " \
                        "from h_group where group_id = \'%s\';", pGroupID);
    }
    else
    {
        x_WarnLog("MYSQL_Group_QryByID failed id is null.\n");
        return XPOC_ERR_FAIL;
    }
    ret_val = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
    if (ret_val == XPOC_ERR_SUCCESS)
    {
        ptGroupDataInfo->GroupNum = result->row_count;
        ptGroupDataInfo->pGroupInfo = (GroupInfo*)malloc(sizeof(GroupInfo) * ptGroupDataInfo->GroupNum);

        GroupInfo*pGroupInfo = NULL;
        int i = 0;
        for (i = 0; i < ptGroupDataInfo->GroupNum; i++)
        {
            row = mysql_fetch_row(result);
            pGroupInfo = ptGroupDataInfo->pGroupInfo + i;
            memset(pGroupInfo, 0, sizeof(GroupInfo));
            strncpy(pGroupInfo->GroupID,row[0], STR_LEN32);
            strncpy(pGroupInfo->GroupAlias,row[1], STR_LEN32);
            pGroupInfo->audioRcrd = atoi(row[2]);
            pGroupInfo->videoRcrd = atoi(row[3]);
            pGroupInfo->FloorTime = atoi(row[4]);
            pGroupInfo->IdleTime = atoi(row[5]);

            if (0 != bNeedSearchMember)
            {
                if (XPOC_ERR_SUCCESS != MYSQL_GroupMember_Qry(mysql_conn, pGroupInfo))
                {
                    mysql_free_result(result);
                    return XPOC_ERR_FAIL;
                }
            }
        }
        mysql_free_result(result);
    }

    return ret_val;
}

UINT MYSQL_GroupMember_Qry(MYSQL *mysql_conn, GroupInfo *pGroupInfo)
{
    UINT               ret_val = XPOC_ERR_SUCCESS;
    MYSQL_RES          *result;
    MYSQL_ROW           row;

    char    strSql[1024]; memset(strSql, 0, 1024);
    sprintf(strSql, "select account_no,user_no,user_alias from h_account " \
                    "where user_no in (select member_user_no from h_group_member where group_id=\'%s\');", 
                    pGroupInfo->GroupID);

    ret_val = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
    if (ret_val == XPOC_ERR_SUCCESS)
    {
        pGroupInfo->tGroupMemberInfo.UserNum = result->row_count;
        pGroupInfo->tGroupMemberInfo.pUserDetailInfo = (UserDetailInfo*)malloc(sizeof(UserDetailInfo) * pGroupInfo->tGroupMemberInfo.UserNum);

        UserDetailInfo *pUserDetailInfo = NULL;
        UINT k = 0;
        for (k = 0; k < pGroupInfo->tGroupMemberInfo.UserNum; k++)
        {
            row = mysql_fetch_row(result);
            pUserDetailInfo = pGroupInfo->tGroupMemberInfo.pUserDetailInfo + k;
            memset(pUserDetailInfo, 0, sizeof(UserDetailInfo));
            strncpy(pUserDetailInfo->AccountID, row[0], STR_LEN32);
            strncpy(pUserDetailInfo->UserID, row[1], STR_LEN32);
            strncpy(pUserDetailInfo->UserAlias, row[2], STR_LEN32);
        }
        mysql_free_result(result);
    }

    return ret_val;
}

long long CalcUserSessionID(char*pFromNo, char*pToNo)
{
    unsigned int i = 0;
    for (i = 0; i < MIN(strlen(pFromNo), strlen(pToNo)); i++)
    {
        if (pFromNo[i] != pToNo[i])
        {
            break;
        }
    }
    long long lFromNo = atoll(pFromNo+i);
    long long lToNo = atoll(pToNo+i);
    if (lFromNo > lToNo)
    {
        char strSession[STR_LEN32];
        strcpy(strSession, pFromNo+i);
        strncpy(strSession + strlen(strSession), pToNo+i, MIN((STR_LEN32 - strlen(strSession)), (strlen(pToNo) - i)));
        return atoll(strSession);
    }
    else
    {
        char strSession[STR_LEN32];
        strcpy(strSession, pToNo+i);
        strncpy(strSession + strlen(strSession), pFromNo+i, MIN((STR_LEN32 - strlen(strSession)), (strlen(pFromNo) - i)));
        return atoll(strSession);
    }
}

long long CalcGroupSessionID(char*pFromNo, char*pGroupNo)
{
    char strSession[STR_LEN32];
    strcpy(strSession, pFromNo);
    strncpy(strSession + strlen(strSession), pGroupNo, MIN((STR_LEN32 - strlen(strSession)), (strlen(pGroupNo))));
    return atoll(strSession);
}

UINT MYSQL_UserMessage_Add(MYSQL *mysql_conn, UserMessageInfo *pUserMessageInfo)
{
    time_t aclock;
    time(&aclock);
    strftime(pUserMessageInfo->send_time, 20, "%Y-%m-%d %H:%M:%S", localtime(&aclock));
    pUserMessageInfo->delivery_status = 1;
    pUserMessageInfo->read_status = 1;
    pUserMessageInfo->session_id = CalcUserSessionID(pUserMessageInfo->from_user_no,pUserMessageInfo->to_user_no);
    if (pUserMessageInfo->msg_type <= E_MSG_TYPE_NULL || pUserMessageInfo->msg_type > E_MSG_TYPE_SOS)
    {
        x_ErrorLog("Error MYSQL_UserMessage_Add FAILED!! msg_type [%d] is not corrected", pUserMessageInfo->msg_type);
        return XPOC_ERR_FAIL;
    }
    // modified by shm at 20210201,pCompany_no改为获取8位集团号
    char pCompany_no[9] = {0};
    strncpy(pCompany_no, pUserMessageInfo->from_user_no, 8);
    char    strSql[1024]; memset(strSql, 0, 1024);
    sprintf(strSql, "insert into h_user_msg(fleet_id,session_id,caller_no,callee_no,msg_type,msg_content," \
                    "send_time,delivery_status,read_status) values(%lld,%lld,\'%s\',\'%s\',%d,\'%s\',\'%s\',%d,%d);",
                    atoll(pCompany_no),
                    pUserMessageInfo->session_id,
                    pUserMessageInfo->from_user_no,
                    pUserMessageInfo->to_user_no,
                    pUserMessageInfo->msg_type,
                    pUserMessageInfo->msg_content,
                    pUserMessageInfo->send_time,
                    pUserMessageInfo->delivery_status,
                    pUserMessageInfo->read_status);

    if (XPOC_ERR_SUCCESS != MYSQL_udb_excute(mysql_conn, strSql))
    {
        x_ErrorLog("Error MYSQL_UserMessage_Add FAILED!!");
        return XPOC_ERR_FAIL;
    }
    else
    {
        memset(strSql, 0, 1024);
        sprintf(strSql, "SELECT LAST_INSERT_ID();");
        UINT               ret_val = XPOC_ERR_SUCCESS;
        MYSQL_RES          *result;
        MYSQL_ROW           row;
        ret_val = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
        if (ret_val == XPOC_ERR_SUCCESS)
        {
            while ((row = mysql_fetch_row(result)) != NULL)
            {
                if (row[0])
                {
                    pUserMessageInfo->id = atoll(row[0]);
                    break;
                }
            }
            mysql_free_result(result);
        }
    }
    return XPOC_ERR_SUCCESS;
}

// added by shm
UINT MYSQL_UserSos_Add(MYSQL *mysql_conn, UserSosInfo *pUserSosInfo)
{
    XPOC_TRACEFUNC_IN;

    time_t aclock;
    time(&aclock);
    strftime(pUserSosInfo->send_time, 20, "%Y-%m-%d %H:%M:%S", localtime(&aclock));
    pUserSosInfo->status = 0;   // 告警失败

    // modified by shm at 20210201,pCompany_no改为获取8位集团号
    char pCompany_no[9] = {0};
    strncpy(pCompany_no, pUserSosInfo->from_user_no, 8);
    char strSql[1024]; 
    memset(strSql, 0, 1024);
    sprintf(strSql, "insert into h_user_sos(fleet_id,sos_id,caller_no,callee_no,msg_content," \
                    "send_time,status) values(\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',%d);",
                    pCompany_no,
                    pUserSosInfo->sos_id,
                    pUserSosInfo->from_user_no,
                    pUserSosInfo->to_user_no,
                    pUserSosInfo->msg_content,
                    pUserSosInfo->send_time,
                    pUserSosInfo->status);

    if (XPOC_ERR_SUCCESS != MYSQL_udb_excute(mysql_conn, strSql))
    {
        x_ErrorLog("Error MYSQL_UserMessage_Add FAILED!!");
        return XPOC_ERR_FAIL;
    }
    else
    {
        memset(strSql, 0, 1024);
        sprintf(strSql, "SELECT LAST_INSERT_ID();");
        UINT               ret_val = XPOC_ERR_SUCCESS;
        MYSQL_RES          *result;
        MYSQL_ROW           row;
        ret_val = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
        if (ret_val == XPOC_ERR_SUCCESS)
        {
            while ((row = mysql_fetch_row(result)) != NULL)
            {
                if (row[0])
                {
                    pUserSosInfo->id = atoll(row[0]);
                    break;
                }
            }
            mysql_free_result(result);
        }
    }
    return XPOC_ERR_SUCCESS;
}

// added by shm
UINT MYSQL_UserSos_Upd(MYSQL *mysql_conn, UserSosInfo *pUserSosInfo)
{
    XPOC_TRACEFUNC_IN;
    (void)mysql_conn;
    time_t aclock;
    time(&aclock);
    strftime(pUserSosInfo->send_time, 20, "%Y-%m-%d %H:%M:%S", localtime(&aclock));

    char strSql[1024]   = {0}; 
    sprintf(strSql, "update h_user_sos set status=%d where sos_id=\'%s\';",
                    pUserSosInfo->status,
                    pUserSosInfo->sos_id);

    UINT ulReturn = MYSQL_udb_excute(mysql_connect, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_WarnLog("upt h_user_sos failed.");
    }
    return XPOC_ERR_SUCCESS;
}

UINT MYSQL_GroupMessage_Add(MYSQL *mysql_conn, GroupMessageInfo *pGroupMessageInfo)
{
    time_t aclock;
    time(&aclock);
    strftime(pGroupMessageInfo->send_time, 20, "%Y-%m-%d %H:%M:%S", localtime(&aclock));
    pGroupMessageInfo->session_id = CalcGroupSessionID(pGroupMessageInfo->from_user_no,pGroupMessageInfo->group_no);
    if (pGroupMessageInfo->msg_type < 1 || pGroupMessageInfo->msg_type > 4)
    {
        x_ErrorLog("Error MYSQL_GroupMessage_Add FAILED!! msg_type is not corrected");
        return XPOC_ERR_FAIL;
    }

    // modified by shm at 20210201,pCompany_no改为获取8位集团号
    char pCompany_no[9] = {0};
    strncpy(pCompany_no, pGroupMessageInfo->from_user_no, 8);
    char    strSql[1024]; memset(strSql, 0, 1024);
    sprintf(strSql, "insert into h_group_msg(fleet_id,session_id,caller_no,group_no,msg_type,msg_content,send_time)" \
                    " values(%lld,%lld,%lld,%lld,%d,\'%s\',\'%s\');",
                    atoll(pCompany_no),
                    pGroupMessageInfo->session_id,
                    atoll(pGroupMessageInfo->from_user_no),
                    atoll(pGroupMessageInfo->group_no),
                    pGroupMessageInfo->msg_type,
                    pGroupMessageInfo->msg_content,
                    pGroupMessageInfo->send_time);

    if (XPOC_ERR_SUCCESS != MYSQL_udb_excute(mysql_conn, strSql))
    {
        x_ErrorLog("Error MYSQL_UserMessage_Add FAILED!!");
        return XPOC_ERR_FAIL;
    }
    else
    {
        memset(strSql, 0, 1024);
        sprintf(strSql, "SELECT LAST_INSERT_ID();");
        UINT ret_val = XPOC_ERR_SUCCESS;
        MYSQL_RES *result;
        MYSQL_ROW row;
        ret_val = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
        if (ret_val == XPOC_ERR_SUCCESS)
        {
            while ((row = mysql_fetch_row(result)) != NULL)
            {
                if (row[0])
                {
                    pGroupMessageInfo->id = atoll(row[0]);
                    break;
                }
            }
            mysql_free_result(result);
        }
    }
    return XPOC_ERR_SUCCESS;
}

UINT MYSQL_GIS_Add(MYSQL *mysql_conn, GisInfo *pGisInfo)
{
    UserDetailInfo tUserDetailInfo;
    memset(&tUserDetailInfo, 0, sizeof(UserDetailInfo));
    strncpy(tUserDetailInfo.UserID, pGisInfo->UserID, STR_LEN32);
    if (XPOC_ERR_SUCCESS != MYSQL_UserAccount_Qry(mysql_conn, &tUserDetailInfo))
    {
        x_ErrorLog("Error MYSQL_GIS_Add FAILED!! UserID is not corrected");
        return XPOC_ERR_FAIL;
    }
    else
    {
        time_t aclock;
        time(&aclock);
        char create_time[STR_LEN32]; memset(create_time, 0, STR_LEN32);
        strftime(create_time, 20, "%Y-%m-%d %H:%M:%S", localtime(&aclock));
        char    strSql[1024]; memset(strSql, 0, 1024);
        sprintf(strSql, "insert into h_gps_loc(main_id,account_id,lon,lat,up_time) values(%lld,%lld,%10.6f,%10.6f,\'%s\');",
            (long long)(tUserDetailInfo.FleetID),
            atoll(tUserDetailInfo.AccountID),
            atof(pGisInfo->Lon),
            atof(pGisInfo->Lat),
            create_time);

        return MYSQL_udb_excute(mysql_conn, strSql);
    }
}

UINT MYSQL_UserVideo_Add(MYSQL *mysql_conn, H_User_Video_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);

    sprintf(strSql, "insert into h_user_video(fleet_id, call_type, call_id, caller_no, callee_no, start_time, end_time) " \
                    "values(\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\');",
                    ptData->company_no,
                    ptData->biz_type,
                    ptData->call_id,
                    ptData->from_user_no,
                    ptData->to_user_no,
                    ptData->start_time,
                    ptData->end_time);
    ulReturn = MYSQL_udb_excute(mysql_connect, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_WarnLog("Add h_user_video failed.");
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_UserVideo_Upt_StartTime(MYSQL *mysql_conn, H_User_Video_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);

    sprintf(strSql, "update h_user_video set start_time= \'%s\' where call_id= \'%s\';",
                    ptData->start_time, ptData->call_id);    
    ulReturn = MYSQL_udb_excute(mysql_connect, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_WarnLog("upt h_user_video failed.");
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_UserVideo_Upt_EndTime(MYSQL *mysql_conn, H_User_Video_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);

    sprintf(strSql, "update h_user_video set end_time= \'%s\' where call_id= \'%s\';",
                    ptData->end_time, ptData->call_id);
    ulReturn = MYSQL_udb_excute(mysql_connect, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_WarnLog("upt h_user_video failed.");
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_UserVideo_Qry_Id_By_UserNo(MYSQL *mysql_conn, H_User_Video_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    MYSQL_RES *result;
    MYSQL_ROW row;
    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);

    sprintf(strSql, "select max(id) from h_user_video where from_user_no= \'%s\' and to_user_no= \'%s\';",
                    ptData->from_user_no,
                    ptData->to_user_no);
    ulReturn = MYSQL_udbGetRecord(mysql_connect, strSql, &result);
    if (ulReturn == XPOC_ERR_SUCCESS)
    {
        UINT i = 0;
        while((row = mysql_fetch_row(result)) != NULL)
        {
            ptData->id = atoi(row[0]);
            i++;
        }
        mysql_free_result(result);
    }
    
    x_InfoLog("get id[%d] by from_user[%lld]+to_user[%lld].", ptData->id, ptData->from_user_no, ptData->to_user_no);

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_UserVideo_Qry_Id_By_SipCallId(MYSQL *mysql_conn, H_User_Video_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    MYSQL_RES *result;
    MYSQL_ROW row;
    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);

    sprintf(strSql, "select max(id) from h_user_video where call_id= \'%s\';", ptData->call_id);
    ulReturn = MYSQL_udbGetRecord(mysql_connect, strSql, &result);
    if (ulReturn == XPOC_ERR_SUCCESS)
    {
        UINT i = 0;
        while((row = mysql_fetch_row(result)) != NULL)
        {
            if(NULL == row[0])
                return XPOC_ERR_FAIL;

            ptData->id = atoi(row[0]);
            i++;
        }
        mysql_free_result(result);
    }
    
    x_InfoLog("get id[%d] by call_id[%s].", ptData->id, ptData->call_id);

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}


UINT MYSQL_UserVideoItem_Add(MYSQL *mysql_conn, H_User_Video_Item_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    // x_InfoLog("szFromUrl:%s.\n", ptData->from_video_url);
    // x_InfoLog("szToUrl:%s.\n", ptData->to_video_url);

    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);
    sprintf(strSql, "insert into h_user_video_item(fleet_id,user_video_id,user_no,call_id," \
                    "start_time, end_time, record_file, record_time, duration_time) " \
                    "values(\'%s\',%lld,\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\');",
                    ptData->company_no,
                    ptData->user_video_no,
                    ptData->user_no,
                    ptData->call_id,
                    ptData->start_time,
                    ptData->end_time,
                    ptData->from_video_url,
                    ptData->record_time,
                    ptData->duration_time);
    ulReturn = MYSQL_udb_excute(mysql_connect, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_WarnLog("Add h_user_video_item failed.");
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_UserVoice_Add(MYSQL *mysql_conn, H_User_Voice_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);

    sprintf(strSql, "insert into h_user_voice(fleet_id, call_type, call_id, " \
                    "caller_no, callee_no, start_time, end_time) " \
                    "values(\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\');",
                    ptData->company_no,
                    ptData->biz_type,
                    ptData->call_id,
                    ptData->from_user_no,
                    ptData->to_user_no,
                    ptData->start_time,
                    ptData->end_time);
    ulReturn = MYSQL_udb_excute(mysql_connect, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_WarnLog("Add h_user_voice failed.");
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_UserVoice_Upt_EndTime(MYSQL *mysql_conn, H_User_Voice_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);

    sprintf(strSql, "update h_user_voice set end_time= \'%s\' where call_id= \'%s\';",
                    ptData->end_time, ptData->call_id);    
    ulReturn = MYSQL_udb_excute(mysql_connect, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_WarnLog("upt h_user_voice failed.");
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_UserVoice_Qry_Id_By_UserNo(MYSQL *mysql_conn, H_User_Voice_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    MYSQL_RES *result;
    MYSQL_ROW row;
    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);

    sprintf(strSql, "select max(id) from h_user_voice where from_user_no= \'%s\' and to_user_no= \'%s\';",
                    ptData->from_user_no,
                    ptData->to_user_no);
    ulReturn = MYSQL_udbGetRecord(mysql_connect, strSql, &result);
    if (ulReturn == XPOC_ERR_SUCCESS)
    {
        UINT i = 0;
        while((row = mysql_fetch_row(result)) != NULL)
        {
            ptData->id = atoi(row[0]);
            i++;
        }
        mysql_free_result(result);
    }
    
    //x_InfoLog("get id[%d] by from_user[%lld]+to_user[%lld].", ptData->id, ptData->from_user_no, ptData->to_user_no);

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}


UINT MYSQL_UserVoice_Qry_Id_By_SipCallId(MYSQL *mysql_conn, H_User_Voice_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    MYSQL_RES *result;
    MYSQL_ROW row;
    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);

    sprintf(strSql, "select max(id) from h_user_voice where call_id= \'%s\';", ptData->call_id);
    ulReturn = MYSQL_udbGetRecord(mysql_connect, strSql, &result);
    if (ulReturn == XPOC_ERR_SUCCESS)
    {
        UINT i = 0;
        while((row = mysql_fetch_row(result)) != NULL)
        {
            if(NULL == row[0])
            {
                mysql_free_result(result);
                return XPOC_ERR_FAIL;
            }

            ptData->id = atoi(row[0]);
            i++;
        }
        mysql_free_result(result);
    }
    
    //x_InfoLog("get id[%d] by call_id[%s].", ptData->id, ptData->call_id);

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_UserVoiceItem_Add(MYSQL *mysql_conn, H_User_Voice_Item_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    // x_InfoLog("szFromUrl[%s].\n", ptData->from_voice_url);
    // x_InfoLog("szToUrl[%s].\n", ptData->to_voice_url);

    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);
    sprintf(strSql, "insert into h_user_voice_item(fleet_id,user_voice_id,user_no,call_id," \
                    "start_time, end_time, record_file, record_time) " \
                    "values(\'%s\',%lld,\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\');",
                    ptData->company_no,
                    ptData->user_voice_no,
                    ptData->user_no,
                    ptData->call_id,
                    ptData->start_time,
                    ptData->end_time,
                    ptData->from_voice_url,
                    ptData->record_time);

    ulReturn = MYSQL_udb_excute(mysql_connect, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_WarnLog("Add h_user_voice_item failed.");
    }

    //x_InfoLog("TEST[%s].\n", strSql);
    //x_InfoLog("TEST[%s].\n", (strSql+150));

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_FseFile_Add(MYSQL *mysql_conn, H_FSEFILE_ADD_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);
    sprintf(strSql, "insert into h_fse_file(fleet_id,file_name,file_url,file_hash,"
                    "file_uploaded_size,create_time,creater_user_id) " \
                    "values(%lld,\'%s\',\'%s\',\'%s\',%lld,\'%s\',\'%s\');",
                    ptData->fleet_id, ptData->file_name, ptData->file_url,
                    ptData->file_hash, ptData->file_uploaded_size,
                    ptData->create_time, ptData->creater_user_id);

    ulReturn = MYSQL_udb_excute(mysql_connect, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_WarnLog("Add h_fse_file failed.");
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_FseFile_Qry_By_FileHash(MYSQL *mysql_conn, H_FSEFILE_ADD_S *ptData)
{
    UINT               ret_val = XPOC_ERR_SUCCESS;
    MYSQL_RES          *result;
    MYSQL_ROW           row;

    char strSql[STR_LEN512]; 
    memset(strSql, 0, STR_LEN512);
    if (strlen(ptData->file_hash))
    {
        sprintf(strSql, "select fleet_id,file_name,file_url from h_fse_file where file_hash = \'%s\';", 
                        ptData->file_hash);
    }
    else
    {
        x_WarnLog("file_hash is NULL.");
        return XPOC_ERR_FAIL;
    }

    ret_val = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
    if (ret_val == XPOC_ERR_SUCCESS)
    {
        ret_val = XPOC_ERR_FAIL;
        while ((row = mysql_fetch_row(result)) != NULL)
        {
            if (row[0] == NULL || row[1] == NULL || row[2] == NULL)
            {
                mysql_free_result(result);
                return XPOC_ERR_FAIL;
            }
            else
            {
                ptData->fleet_id = atol(row[0]);
                strncpy(ptData->file_name, (char *)row[1], STR_LEN512);
                strncpy(ptData->file_url, (char *)row[2], STR_LEN512);
            }
            ret_val = XPOC_ERR_SUCCESS;
        }
        mysql_free_result(result);
    }
    return ret_val;
}

UINT MYSQL_FseFile_Qry_By_FileName(MYSQL *mysql_conn, H_FSEFILE_ADD_S *ptData)
{
    UINT               ret_val = XPOC_ERR_SUCCESS;
    MYSQL_RES          *result;
    MYSQL_ROW           row;

    char strSql[STR_LEN512]; 
    memset(strSql, 0, STR_LEN512);
    if (strlen(ptData->file_name))
    {
        sprintf(strSql, "select file_url,file_uploaded_size from h_fse_file where file_name = \'%s\';", ptData->file_name);
    }
    else
    {
        x_WarnLog("file_name is NULL.");
        return XPOC_ERR_FAIL;
    }

    ret_val = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
    if (ret_val == XPOC_ERR_SUCCESS)
    {
        ret_val = XPOC_ERR_FAIL;
        while ((row = mysql_fetch_row(result)) != NULL)
        {
            if (row[0] == NULL || row[1] == NULL)
            {
                mysql_free_result(result);
                return XPOC_ERR_FAIL;
            }
            else
            {
                strncpy(ptData->file_url, (char *)row[0], STR_LEN512);
                ptData->file_uploaded_size = atol(row[1]);
            }
            ret_val = XPOC_ERR_SUCCESS;
        }
        mysql_free_result(result);
    }
    return ret_val;
}

UINT MYSQL_FseFile_Mod(MYSQL *mysql_conn, H_FSEFILE_ADD_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);
    if (strlen(ptData->file_name))
    {
        sprintf(strSql, "update h_fse_file set file_uploaded_size = %lld,file_hash= \'%s\' "
                            " where file_name = \'%s\';",
                    ptData->file_uploaded_size, ptData->file_hash, ptData->file_name);
    }
    else
    {
        x_WarnLog("file_name is NULL.");
        return XPOC_ERR_FAIL;
    }

    ulReturn = MYSQL_udb_excute(mysql_conn, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_WarnLog("Mod h_fse_file failed.");
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_FseFile_Del_By_FileName(MYSQL *mysql_conn, H_FSEFILE_ADD_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char strSql[STR_LEN256];
    memset(strSql, 0, STR_LEN256);
    sprintf(strSql, "delete from h_fse_file where file_name = \'%s\';", ptData->file_name);
    ulReturn = MYSQL_udb_excute(mysql_conn, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_ErrorLog("delete h_fse_file record failed. FileName[%s]", ptData->file_name);
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_FseFile_Delete(MYSQL *mysql_conn, H_USER_Record_Delete_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char strUserMsg[STR_LEN512];
    memset(strUserMsg, 0, STR_LEN512);
    sprintf(strUserMsg, "delete from h_user_msg where fleet_id = \'%s\' and send_time < \'%s\';",
            ptData->aucFleetId, ptData->aucDeleteTime);
    ulReturn = MYSQL_udb_excute(mysql_connect, strUserMsg);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_ErrorLog("delete h_user_msg record failed. fleet_id[%s], deleteTime[%s]", ptData->aucFleetId, ptData->aucDeleteTime);
    }

    char strGroupMsg[STR_LEN512];
    memset(strGroupMsg, 0, STR_LEN512);
    sprintf(strGroupMsg, "delete from h_group_msg where fleet_id = \'%s\' and send_time < \'%s\';",
            ptData->aucFleetId, ptData->aucDeleteTime);
    ulReturn = MYSQL_udb_excute(mysql_connect, strGroupMsg);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_ErrorLog("delete h_group_msg record failed. fleet_id[%s], deleteTime[%s]", ptData->aucFleetId, ptData->aucDeleteTime);
    }

    char aucDelFsefile[STR_LEN512];
    memset(aucDelFsefile, 0, STR_LEN512);
    sprintf(aucDelFsefile, "delete from h_fse_file where fleet_id = \'%s\' and create_time < \'%s\';",
            ptData->aucFleetId, ptData->aucDeleteTime);
    ulReturn = MYSQL_udb_excute(mysql_connect, aucDelFsefile);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_ErrorLog("delete h_fse_file record failed. fleet_id[%s], deleteTime[%s]", ptData->aucFleetId, ptData->aucDeleteTime);
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_SOS_Delete(MYSQL *mysql_conn, H_USER_Record_Delete_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char strUserSosMsg[STR_LEN512];
    memset(strUserSosMsg, 0, STR_LEN512);
    sprintf(strUserSosMsg, "delete from h_user_sos where fleet_id = \'%s\' and send_time < \'%s\';",
            ptData->aucFleetId, ptData->aucDeleteTime);
    ulReturn = MYSQL_udb_excute(mysql_connect, strUserSosMsg);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_ErrorLog("delete h_user_sos record failed. fleet_id[%s], deleteTime[%s]", ptData->aucFleetId, ptData->aucDeleteTime);
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_FseOffLineFile_Add(MYSQL *mysql_conn, H_FSE_OFFLINE_FILE_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char strSql[STR_LEN1024];
    memset(strSql, 0, STR_LEN1024);
    sprintf(strSql, "insert into h_fse_offline_file(fleet_id,creater_user_id,case_no,file_name,file_url,"
                    "file_hash,file_size,file_uploaded_size,file_duration,create_time,file_state,file_type,file_spec_flag,file_remark) "
                    "values(%lld,\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',%lld,%lld,\'%s\',\'%s\',%d,%d,%d,\'%s\');",
                    ptData->fleet_id, ptData->creater_user_id, ptData->case_no, ptData->file_name,
                    ptData->file_url, ptData->file_hash, ptData->file_size,
                    ptData->file_uploaded_size, ptData->file_duration, ptData->create_time, 
                    ptData->file_state, ptData->file_type, ptData->file_spec_flag, ptData->file_remark);

    ulReturn = MYSQL_udb_excute(mysql_connect, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_WarnLog("Add h_fse_offline_file failed.");
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_FseOffLineFile_Qry_By_FileHash(MYSQL *mysql_conn, H_FSE_OFFLINE_FILE_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);
    UINT               ret_val = XPOC_ERR_SUCCESS;
    MYSQL_RES          *result;
    MYSQL_ROW           row;

    char strSql[STR_LEN512]; 
    memset(strSql, 0, STR_LEN512);
    if (strlen(ptData->file_hash))
    {
        sprintf(strSql, "select fleet_id,file_name,file_url from h_fse_offline_file where file_hash = \'%s\';", 
                        ptData->file_hash);
    }
    else
    {
        x_WarnLog("file_hash is NULL.");
        return XPOC_ERR_FAIL;
    }

    ret_val = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
    if (ret_val == XPOC_ERR_SUCCESS)
    {
        ret_val = XPOC_ERR_FAIL;
        while ((row = mysql_fetch_row(result)) != NULL)
        {
            if (row[0] == NULL || row[1] == NULL || row[2] == NULL)
            {
                mysql_free_result(result);
                x_WarnLog("Do not find record by filehash[%s].", ptData->file_hash);
                return XPOC_ERR_FAIL;
            }
            else
            {
                ptData->fleet_id = atol(row[0]);
                strncpy(ptData->file_name, (char *)row[1], STR_LEN512);
                strncpy(ptData->file_url, (char *)row[2], STR_LEN512);
            }
            ret_val = XPOC_ERR_SUCCESS;
        }
        mysql_free_result(result);
    }

    XPOC_TRACEFUNC_OUT;
    return ret_val;
}

UINT MYSQL_FseOffLineFile_Qry_By_FileName(MYSQL *mysql_conn, H_FSE_OFFLINE_FILE_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);
    UINT               ret_val = XPOC_ERR_SUCCESS;
    MYSQL_RES          *result;
    MYSQL_ROW          row;

    char strSql[STR_LEN512]; 
    memset(strSql, 0, STR_LEN512);
    if (strlen(ptData->file_name))
    {
        sprintf(strSql, "select fleet_id,file_size,file_uploaded_size,file_url,file_hash,file_state from h_fse_offline_file "
                        " where file_name = \'%s\';", 
                        ptData->file_name);
    }
    else
    {
        x_WarnLog("file_name is NULL.");
        return XPOC_ERR_FAIL;
    }

    ret_val = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
    if (ret_val == XPOC_ERR_SUCCESS)
    {
        ret_val = XPOC_ERR_FAIL;

        while ((row = mysql_fetch_row(result)) != NULL)
        {
            if (row[0] == NULL || row[1] == NULL || row[2] == NULL || row[3] == NULL || row[4] == NULL || row[5] == NULL)
            {
                mysql_free_result(result);
                x_WarnLog("Do not find record by filename[%s].", ptData->file_name);
                return XPOC_ERR_FAIL;
            }
            else
            {
                ptData->fleet_id = atol(row[0]);
                ptData->file_size = atoll(row[1]);
                ptData->file_uploaded_size = atol(row[2]);
                strncpy(ptData->file_url, (char *)row[3], STR_LEN512);
                strncpy(ptData->file_hash, (char *)row[4], 40);
                ptData->file_state = (char)atoi(row[5]);
            }
            ret_val = XPOC_ERR_SUCCESS;
        }
        mysql_free_result(result);
    }

    XPOC_TRACEFUNC_OUT;
    return ret_val;
}

UINT MYSQL_FseOffLineFile_Qry_To_DelFile(MYSQL *mysql_conn, H_USER_Record_Delete_S *ptData, char *path)  //参数3-离线文件根目录,集团目录上一级
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;
    MYSQL_RES          *result;
    MYSQL_ROW          row;
    char aucRmOffLineFile[STR_LEN512];
    memset(aucRmOffLineFile, 0, STR_LEN512);

    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);
    sprintf(strSql, "select file_url,file_name,creater_user_id from h_fse_offline_file where fleet_id = \'%s\' and create_time < \'%s\' and file_spec_flag = 0;",
            ptData->aucFleetId, ptData->aucDeleteTime);

    ulReturn = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
    if (ulReturn == XPOC_ERR_SUCCESS)
    {
        UINT i = 0;
        while ((row = mysql_fetch_row(result)) != NULL)
        {
            if (row[0] == NULL || row[1] == NULL || row[2] == NULL)
            {
                x_WarnLog("That has incomplete record, file_url[%s], file_name[%s], creater_user_id[%s].", row[0], row[1], row[2]);
            }
            else
            {
                //删除对应文件
                sprintf(aucRmOffLineFile, "%s/%s/%s", path, row[0], row[1]);
                if(remove(aucRmOffLineFile) == 0)
                {
                    x_InfoLog("delete offline file[%s] success!", ptData->aucFleetId, aucRmOffLineFile);
                    i++;
                }
                else
                {
                    x_ErrorLog("delete offline file[%s] fail!", ptData->aucFleetId, aucRmOffLineFile);
                }
            }
        }
        x_InfoLog("OffLinefile Qry to Del Num[%d], Delete OffLinefile Num[%d] actually !", mysql_num_rows(result), i);
        mysql_free_result(result);
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_FseOffLineFile_QryOldest_To_Del(MYSQL *mysql_conn, H_USER_Record_Delete_S *ptData, char *path)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;
    MYSQL_RES          *result;
    MYSQL_ROW          row;
    char aucRmOffLineFile[STR_LEN512];
    memset(aucRmOffLineFile, 0, STR_LEN512);

    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);
    sprintf(strSql, "select file_url,file_name,min(start_time),creater_user_id from (select * from h_fse_offline_file where fleet_id = \'%s\' and file_spec_flag = 0 ) tb1;",
            ptData->aucFleetId);

    ulReturn = MYSQL_udbGetRecord(mysql_conn, strSql, &result);
    if (ulReturn == XPOC_ERR_SUCCESS)
    {
        while ((row = mysql_fetch_row(result)) != NULL)
        {
            if (row[0] == NULL || row[1] == NULL || row[2] == NULL || row[3]==NULL)
            {
                mysql_free_result(result);
                x_WarnLog("That has incomplete record, file_url[%s], file_name[%s], start_time[%s], creater_user_id[%s].", row[0], row[1], row[2], row[3]);
                return XPOC_ERR_FAIL;
            }
            else
            {
                //删除对应文件
                sprintf(aucRmOffLineFile, "%s/%s/%s", path, row[0], row[1]);
                if(remove(aucRmOffLineFile) == 0)
                {
                    x_InfoLog("delete oldest offline file[%s] success!", ptData->aucFleetId, aucRmOffLineFile);
                }
                else
                {
                    x_ErrorLog("delete oldest offline file[%s] fail!", ptData->aucFleetId, aucRmOffLineFile);
                }
            }
        }
        mysql_free_result(result);
    }

    memset(strSql, 0, STR_LEN512);
    sprintf(strSql, "delete from h_fse_offline_file where file_url = \'%s\' and file_name = \'%s\';", row[0], row[1]);
    ulReturn = MYSQL_udb_excute(mysql_conn, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_ErrorLog("delete h_fse_offline_file record failed. file_url[%s], file_name[%s].", row[0], row[1]);
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_FseOffLineFile_Mod(MYSQL *mysql_conn, H_FSE_OFFLINE_FILE_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char strSql[STR_LEN512];
    memset(strSql, 0, STR_LEN512);
    if (strlen(ptData->file_name))
    {
        sprintf(strSql, "update h_fse_offline_file set file_uploaded_size = %lld,file_state=%d "
                            " where file_name = \'%s\';",
                    ptData->file_uploaded_size, ptData->file_state, ptData->file_name);
    }
    else
    {
        x_WarnLog("file_name is NULL.");
        return XPOC_ERR_FAIL;
    }

    ulReturn = MYSQL_udb_excute(mysql_conn, strSql);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_WarnLog("Mod h_fse_offline_file failed.");
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_FseOffLineFile_Del(MYSQL *mysql_conn, H_USER_Record_Delete_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;

    char aucDelFseOffLinefile[STR_LEN512];
    memset(aucDelFseOffLinefile, 0, STR_LEN512);
    sprintf(aucDelFseOffLinefile, "delete from h_fse_offline_file where fleet_id = \'%s\' and create_time < \'%s\' and file_spec_flag = 0;",
            ptData->aucFleetId, ptData->aucDeleteTime);
    ulReturn = MYSQL_udb_excute(mysql_conn, aucDelFseOffLinefile);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_ErrorLog("fleet[%s] delete h_fse_offline_file record before time[%s] failed.", ptData->aucFleetId, ptData->aucDeleteTime);
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_UserAudioRecord_Delete(MYSQL* mysql_conn, H_USER_Record_Delete_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;
    // delete h_user_voice
    char strSqlVoice[STR_LEN512];
    memset(strSqlVoice, 0, STR_LEN512);
    sprintf(strSqlVoice, "delete from h_user_voice where fleet_id = \'%s\' and start_time < \'%s\';",
            ptData->aucFleetId, ptData->aucDeleteTime);
    ulReturn = MYSQL_udb_excute(mysql_connect, strSqlVoice);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_ErrorLog("delete h_user_voice record failed.");
    }

    // delete h_user_voice_item
    char strSqlVoiceItem[STR_LEN512];
    memset(strSqlVoiceItem, 0, STR_LEN512);
    sprintf(strSqlVoiceItem, "delete from h_user_voice_item where fleet_id = \'%s\' and start_time < \'%s\';",
            ptData->aucFleetId, ptData->aucDeleteTime);
    ulReturn = MYSQL_udb_excute(mysql_connect, strSqlVoiceItem);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_ErrorLog("delete h_user_voice_item record failed.");
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

UINT MYSQL_UserVideoRecord_Delete(MYSQL* mysql_conn, H_USER_Record_Delete_S *ptData)
{
    XPOC_TRACEFUNC_IN;
    X_NULL_POINTER_CHK_TWO_PARA(mysql_conn, ptData);

    UINT ulReturn = XPOC_ERR_SUCCESS;
    // delete h_user_vedio
    char strSqlVideo[STR_LEN512];
    memset(strSqlVideo, 0, STR_LEN512);
    sprintf(strSqlVideo, "delete from h_user_video where fleet_id = \'%s\' and start_time < \'%s\';",
            ptData->aucFleetId, ptData->aucDeleteTime);
    ulReturn = MYSQL_udb_excute(mysql_connect, strSqlVideo);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_ErrorLog("delete h_user_voice record failed.");
    }

    // delete h_user_vedio_item
    char strSqlVideoItem[STR_LEN512];
    memset(strSqlVideoItem, 0, STR_LEN512);
    sprintf(strSqlVideoItem, "delete from h_user_video_item where fleet_id = \'%s\' and start_time < \'%s\';",
            ptData->aucFleetId, ptData->aucDeleteTime);
    ulReturn = MYSQL_udb_excute(mysql_connect, strSqlVideoItem);
    if (XPOC_ERR_SUCCESS != ulReturn)
    {
        x_ErrorLog("delete h_user_voice_item record failed.");
    }

    XPOC_TRACEFUNC_OUT;
    return ulReturn;
}

//UINT MYSQL_UserVoice_GetMaxId(UINT *ptId)
//{
//    XPOC_TRACEFUNC_IN;
//    X_NULL_POINTER_CHK_ONE_PARA(ptId);

//    UINT ulReturn = XPOC_ERR_SUCCESS;

//    MYSQL_RES *result;
//    MYSQL_ROW row;
//    char strSql[STR_LEN32] = ""; 
//    memset(strSql, 0, STR_LEN32);
//    
//    sprintf(strSql, "select max(id) from h_user_voice;");
//    ulReturn = MYSQL_udbGetRecord(mysql_connect, strSql, &result);
//    if (ulReturn == XPOC_ERR_SUCCESS)
//    {
//        UINT i = 0;
//        while((row = mysql_fetch_row(result)) != NULL)
//        {
//            *ptId = atoi(row[0]);
//            i++;
//        }
//        mysql_free_result(result);
//    }
//    
//    x_InfoLog("get id[%d].", *ptId);

//    XPOC_TRACEFUNC_OUT;
//    return ulReturn;
//}


/*
SQLITE 数据库  API
    this interface only exec QRY operation, not exec ADD/DEL/MOD!
*/

// extern char glbSqliteDb[STR_LEN128];
// 
// 
// #if 0
// #endif
// 

// UINT udbGetRecord(char *ptSql, int *ptRows, int *ptCols, char***ppptRecord)
// {
//     UINT retCode = XPOC_ERR_SUCCESS;
// 
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptSql);
//     (void)ptSql;
//     (void)ptRows;
//     (void)ptCols;
//     (void)ppptRecord;
// 
//     x_InfoLog("Exec SQL[%s].\n", ptSql);
// 
//     sqlite3 *db_Xpoc = NULL;
// 
//     char *path;
//     asprintf(&path, "%s", glbSqliteDb);
//     x_InfoLog("Xpoc DB[%s].\n", glbSqliteDb);
// 
//     if( 0 != access(path, F_OK) ) // if database file exist, return OK; else create it.
//     {
//         x_ErrorLog("[%s] does not exist, please check.\n", path);
//         return XPOC_ERR_FAIL;
//     }
// 
//     if( 0 != sqlite3_open(path, &db_Xpoc) )//open database, if not exist then create it.
//     {
//         sqlite3_close(db_Xpoc);
//         x_ErrorLog("Error opening db[%s].\n", path);
//         return XPOC_ERR_FAIL;
//     }
// 
// 
//     int retVal = 0;
//     char *errorMsg = NULL;
//     while(1)
//     {
//         retVal = sqlite3_get_table(db_Xpoc, ptSql, (char ***)ppptRecord, (int *)ptRows, (int *)ptCols, &errorMsg);
//         if(retVal == SQLITE_BUSY)
//         {
//             x_ErrorLog("sqlite3_get_table returned SQLITE_BUSY. Trying again.");
//             continue;
//         }
//         else
//         {
//             break;
//         }
//     }
// 
//     if(SQLITE_OK != retVal || 0 == *ptRows)
//     {
//         x_ErrorLog("sqlite3_get_table failed. retcode[%d], errorMsg[%s].", retVal, errorMsg);
//         retCode = XPOC_ERR_FAIL;
//     }
//     else
//     {
//         x_InfoLog("sqlite3_get_table OK. retcode[%d], rows[%d], column[%d].", retVal, *ptRows, *ptCols);
//         retCode = XPOC_ERR_SUCCESS;
//     }
// 
//     sqlite3_close(db_Xpoc); //close database
//     sqlite3_free(errorMsg);
// 
//     XPOC_TRACEFUNC_OUT;
//     return retCode;
// }
// 
// /*
//     this interface only exec ADD/DEL/MOD operation ,not exec QRY!
// */
// UINT udbOprRecord(char *ptSql)
// {
//     UINT retCode = XPOC_ERR_SUCCESS;
// 
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptSql);
// 
//     x_InfoLog("Exec SQL[%s].\n", ptSql);
// 
//     sqlite3 *db_Xpoc = NULL;
// 
//     char *path;
//     asprintf(&path, "%s", glbSqliteDb);
//     x_InfoLog("Xpoc DB[%s].\n", glbSqliteDb);
// 
//     if( 0 != access(path, F_OK) ) // if database file exist, return OK; else create it.
//     {
//         x_ErrorLog("[%s] does not exist, please check.\n", path);
//         return XPOC_ERR_FAIL;
//     }
// 
//     if( 0 != sqlite3_open(path, &db_Xpoc) )//open database, if not exist then create it.
//     {
//         sqlite3_close(db_Xpoc);
//         x_ErrorLog("Error opening db[%s].\n", path);
//         return XPOC_ERR_FAIL;
//     }
// 
// 
//     int retVal = 0;
//     char *errorMsg = NULL;
//     retVal = sqlite3_exec(db_Xpoc, ptSql, NULL, NULL, &errorMsg);
//     if(SQLITE_OK != retVal)
//     {
//         x_ErrorLog("sqlite3_exec Fail. retcode[%d], errMsg[%s].", retVal, errorMsg);
//         retCode = XPOC_ERR_FAIL;
//     }
//     else
//     {
//         x_InfoLog("sqlite3_exec OK. retcode[%d].", retVal);
//         retCode = XPOC_ERR_SUCCESS;
//     }
// 
//     sqlite3_close(db_Xpoc); //close database
//     sqlite3_free(errorMsg);
// 
//  
//     XPOC_TRACEFUNC_OUT;
//     return retCode;
// }
// 
// 
// #if 0
// /*---------------------------------------------------------------*/
// #endif
// 
// UINT Conf_NeEntityCfg_Add(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_NeEntityCfg_Del(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_NeEntityCfg_Mod(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// 
// /* 通过 entityType 或者 devId 查询 */
// UINT Conf_NeEntityCfg_Qry
// (
//     EntityType_E entityType,
//     UCHAR devId,
//     T_ELEMENT_CfgStruct *ptNeEntityCfg
// )
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptNeEntityCfg);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0; 
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     memset(strSql, 0, STR_LEN256);
// 
//     if(D_PROCTYPE_BUTT != entityType && 0 != entityType)
//     {
//         sprintf(strSql, "select * from NE_ENTITY_CFG where EntityType = %d;", entityType);
//     }
//     else if(INVALID_VALUE_UCHAR != devId && 0 != devId)
//     {
//         sprintf(strSql, "select * from NE_ENTITY_CFG where DevId = %d;", devId);
//     }
// 
//     ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//     if(XPOC_ERR_SUCCESS != ulReturn || 0 == nRows)
//     {
//         x_WarnLog("get NE_ENTITY_CFG failed, entitytype[%d], devid[%d].\n", entityType, devId);
//         return XPOC_ERR_FAIL;
//     }
// 
//     x_InfoLog("get NE_ENTITY_CFG Record OK:rows[%d],cols[%d],record[%s].\n", nRows, nCols, *pptRecord);
//     ptNeEntityCfg->Indx         = atoi(pptRecord[1*nCols+0]); /* 第0行是参数的名称 */
//     ptNeEntityCfg->EntityType   = atoi(pptRecord[1*nCols+1]);
//     ptNeEntityCfg->DevId        = atoi(pptRecord[1*nCols+2]);
//     memcpy(ptNeEntityCfg->DevHostName, pptRecord[1*nCols+3], MIN(STR_LEN32, strlen(pptRecord[1*nCols+3])));
//     memcpy(ptNeEntityCfg->DevHostIp,   pptRecord[1*nCols+4], MIN(STR_LEN32, strlen(pptRecord[1*nCols+4])));
//     ptNeEntityCfg->DevPort      = atoi(pptRecord[1*nCols+5]);
//     memcpy(ptNeEntityCfg->PublicServiceId, pptRecord[1*nCols+6], MIN(STR_LEN32, strlen(pptRecord[1*nCols+6])));
//     memcpy(ptNeEntityCfg->Introduction,pptRecord[1*nCols+7], MIN(STR_LEN256, strlen(pptRecord[1*nCols+7])));
// 
//     XPOC_TRACEFUNC_OUT;
//     return XPOC_ERR_SUCCESS;
// }
// 
// UINT Conf_NeHttpLinkCfg_Add(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_NeHttpLinkCfg_Del(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_NeHttpLinkCfg_Mod(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// 
// /* 由于同一类型的网元唯一,因此可以按照 entitytype or devid 查询 */
// UINT Conf_NeHttpLinkCfg_Qry
// (
//     IN EntityType_E entityType, 
//     IN UCHAR devId,
//     OUT NE_HTTP_LINK_CFG_Struct *ptNeHttpLinkCfg
// )
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptNeHttpLinkCfg);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0; 
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     memset(strSql, 0, STR_LEN256);
// 
//     devId = D_PROCTYPE_UDE;
//     sprintf(strSql, "select * from NE_HTTP_LINK_CFG where DevId = %d;", devId);
// 
//     ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//     if(XPOC_ERR_SUCCESS != ulReturn)
//     {
//         x_WarnLog("get NE_HTTP_LINK_CFG failed, entitytype[%d], devid[%d].\n", entityType, devId);
//         return ulReturn;
//     }
// 
//     x_InfoLog("get NE_HTTP_LINK_CFG Record OK:rows[%d],cols[%d],record[%s].\n", nRows, nCols, *pptRecord);
//     ptNeHttpLinkCfg->Indx = atoi(pptRecord[1*nCols+0]); /* 第0行是参数的名称 */
//     ptNeHttpLinkCfg->DevId = atoi(pptRecord[1*nCols+1]);
//     ptNeHttpLinkCfg->ServerOrClient = atoi(pptRecord[1*nCols+2]);
//     memcpy(ptNeHttpLinkCfg->DevHostName, pptRecord[1*nCols+3], MIN(STR_LEN32, strlen(pptRecord[1*nCols+3])));
//     memcpy(ptNeHttpLinkCfg->IpAddrVal, pptRecord[1*nCols+4], MIN(STR_LEN32, strlen(pptRecord[1*nCols+4])));
//     ptNeHttpLinkCfg->PortVal = atoi(pptRecord[1*nCols+5]);
//     memcpy(ptNeHttpLinkCfg->Introduction,pptRecord[1*nCols+6], MIN(STR_LEN256, strlen(pptRecord[1*nCols+6])));
// 
//     XPOC_TRACEFUNC_OUT;
//     return XPOC_ERR_SUCCESS;
// }
// 
// UINT Conf_McIdMapCfg_Add(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_McIdMapCfg_Del(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_McIdMapCfg_Mod(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_McIdMapCfg_Qry
// (
//     EntityType_E EntityType,
//     char *ptXPOCIdPre,
//     MCID_MAP_CFG_Struct *ptRecord
// )
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_TWO_PARA(ptXPOCIdPre, ptRecord);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0; 
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     memset(strSql, 0, STR_LEN256);
//     sprintf(strSql, "select * from MCID_MAP_CFG where EntityType = %d and McServiceIdPre=%s;", EntityType, ptXPOCIdPre);
// 
//     ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//     if(XPOC_ERR_SUCCESS != ulReturn)
//     {
//         x_WarnLog("get MCID_MAP_CFG failed, entitytype[%d], XPOCIdPre[%s].\n", EntityType, ptXPOCIdPre);
//         return ulReturn;
//     }
// 
//     x_InfoLog("get MCID_MAP_CFG Record OK:rows[%d],cols[%d],record[%s].\n", nRows, nCols, *pptRecord);
//     ptRecord->Indx = atoi(pptRecord[1*nCols+0]); /* 第0行是参数的名称 */
//     ptRecord->EntityType = atoi(pptRecord[1*nCols+1]);
//     memcpy(ptRecord->McServiceIdPre, pptRecord[1*nCols+2], MIN(STR_LEN32, strlen(pptRecord[1*nCols+2])));
//     ptRecord->DstDevId = atoi(pptRecord[1*nCols+3]);
//     memcpy(ptRecord->Introduction, pptRecord[1*nCols+4], MIN(STR_LEN256, strlen(pptRecord[1*nCols+4])));
// 
//     XPOC_TRACEFUNC_OUT;
//     return XPOC_ERR_SUCCESS;
// }
// UINT Conf_GroupMapCfg_Add(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_GroupMapCfg_Del(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_GroupMapCfg_Mod(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_GroupMapCfg_Qry
// (
//     char *ptGroupId,
//     GROUP_MAP_CFG_Struct *ptRecord
// )
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     D_Check_NULL_TwoPara(ptGroupId, ptRecord);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0; 
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     memset(strSql, 0, STR_LEN256);
//     sprintf(strSql, "select * from GROUP_MAP_CFG where McGroupId = %d;", ptGroupId);
// 
//     ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//     if(XPOC_ERR_SUCCESS != ulReturn)
//     {
//         x_WarnLog("get GROUP_MAP_CFG failed, McGroupId[%s].\n", ptGroupId);
//         return ulReturn;
//     }
// 
//     x_InfoLog("get GROUP_MAP_CFG Record OK:rows[%d],cols[%d],record[%s].\n", nRows, nCols, *pptRecord);
//     ptRecord->Indx = atoi(pptRecord[1*nCols+0]); /* 第0行是参数的名称 */
//     memcpy(ptRecord->McGroupId, pptRecord[1*nCols+1], MIN(STR_LEN32, strlen(pptRecord[1*nCols+1])));
//     ptRecord->DevId = atoi(pptRecord[1*nCols+2]);
//     memcpy(ptRecord->Introduction, pptRecord[1*nCols+3], MIN(STR_LEN256, strlen(pptRecord[1*nCols+3])));
// 
//     XPOC_TRACEFUNC_OUT;
//     return XPOC_ERR_SUCCESS;
// }
// 
// UINT Conf_RtcpLinkCfg_Add(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_RtcpLinkCfg_Del(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_RtcpLinkCfg_Mod(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_RtcpLinkCfg_Qry(RTCP_LINK_CFG_Struct *ptRecord)
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0; 
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     memset(strSql, 0, STR_LEN256);
//     strcpy(strSql, "select * from RTCP_LINK_CFG;");
// 
//     ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//     if(XPOC_ERR_SUCCESS != ulReturn)
//     {
//         x_WarnLog("get RTCP_LINK_CFG failed.\n");
//         return ulReturn;
//     }
// 
//     x_InfoLog("get RTCP_LINK_CFG Record OK:rows[%d],cols[%d],record[%s].\n", nRows, nCols, *pptRecord);
//     ptRecord->Indx = atoi(pptRecord[1*nCols+0]); /* 第0行是参数的名称 */
//     memcpy(ptRecord->AceRtcpIpAddr, pptRecord[1*nCols+1], MIN(STR_LEN32, strlen(pptRecord[1*nCols+1])));
//     ptRecord->AceRtcpPort = atoi(pptRecord[1*nCols+2]);
//     memcpy(ptRecord->CceRtcpIpAddr, pptRecord[1*nCols+3], MIN(STR_LEN32, strlen(pptRecord[1*nCols+3])));
//     ptRecord->CceRtcpPort = atoi(pptRecord[1*nCols+4]);
//     memcpy(ptRecord->MdeRtcpIpAddr, pptRecord[1*nCols+5], MIN(STR_LEN32, strlen(pptRecord[1*nCols+5])));
//     ptRecord->MdeRtcpPort = atoi(pptRecord[1*nCols+6]);
//     memcpy(ptRecord->Introduction, pptRecord[1*nCols+7], MIN(STR_LEN256, strlen(pptRecord[1*nCols+7])));
// 
//     XPOC_TRACEFUNC_OUT;
//     return XPOC_ERR_SUCCESS;
// }
// 
// UINT Conf_KeyManagement_Add(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_KeyManagement_Del(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_KeyManagement_Mod(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_KeyManagement_Qry(KEY_MANAGEMENT_Struct *ptRecord)
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0; 
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     memset(strSql, 0, STR_LEN256);
//     strcpy(strSql, "select * from KEY_MANAGEMENT;");
// 
//     ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//     if(XPOC_ERR_SUCCESS != ulReturn)
//     {
//         x_WarnLog("get KEY_MANAGEMENT failed.\n");
//         return ulReturn;
//     }
// 
//     x_InfoLog("get KEY_MANAGEMENT Record OK:rows[%d],cols[%d],record[%s].\n", nRows, nCols, *pptRecord);
//     ptRecord->Indx = atoi(pptRecord[1*nCols+0]); /* 第0行是参数的名称 */
//     memcpy(ptRecord->Key, pptRecord[1*nCols+1], MIN(STR_LEN32, strlen(pptRecord[1*nCols+1])));
//     memcpy(ptRecord->Introduction, pptRecord[1*nCols+2], MIN(STR_LEN256, strlen(pptRecord[1*nCols+2])));
// 
//     XPOC_TRACEFUNC_OUT;
//     return XPOC_ERR_SUCCESS;
// }
// 
// UINT Conf_UeInitCfg_Add(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_UeInitCfg_Del(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_UeInitCfg_Mod(void)
// {
//     //todo
//     return 0;
// }
// UINT Conf_UeInitCfg_Qry(UE_INIT_CFG_Struct *ptRecord)
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0; 
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     memset(strSql, 0, STR_LEN256);
//     strcpy(strSql, "select * from UE_INIT_CFG;");
// 
//     ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//     if(XPOC_ERR_SUCCESS != ulReturn)
//     {
//         x_WarnLog("get UE_INIT_CFG failed.\n");
//         return ulReturn;
//     }
// 
//     x_InfoLog("get UE_INIT_CFG Record OK:rows[%d],cols[%d],record[%s].\n", nRows, nCols, *pptRecord);
//     ptRecord->Indx = atoi(pptRecord[1*nCols+0]); /* 第0行是参数的名称 */
//     memcpy(ptRecord->AuthEndPoint,  pptRecord[1*nCols+1], MIN(STR_LEN32, strlen(pptRecord[1*nCols+1])));
//     memcpy(ptRecord->TokenEndPoint, pptRecord[1*nCols+2], MIN(STR_LEN32, strlen(pptRecord[1*nCols+2])));
//     memcpy(ptRecord->XmagHttpAddr,  pptRecord[1*nCols+3], MIN(STR_LEN32, strlen(pptRecord[1*nCols+3])));
//     memcpy(ptRecord->ActrSipAddr,   pptRecord[1*nCols+4], MIN(STR_LEN32, strlen(pptRecord[1*nCols+4])));
//     memcpy(ptRecord->ClientId,      pptRecord[1*nCols+5], MIN(STR_LEN32, strlen(pptRecord[1*nCols+5])));
// 
//     XPOC_TRACEFUNC_OUT;
//     return XPOC_ERR_SUCCESS;
// }
// 
// UINT Conf_UeservCtrl_Add(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_UeservCtrl_Del(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_UeservCtrl_Mod(void)
// {
//     XPOC_TRACEFUNC_IN;
// 
//     //todo
// 
//     XPOC_TRACEFUNC_OUT;
//     return 0;
// }
// UINT Conf_UeservCtrl_Qry(UE_SERVICE_CTRL_Struct *ptRecord)
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0; 
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     memset(strSql, 0, STR_LEN256);
//     strcpy(strSql, "select * from UE_SERVICE_CTRL;");
// 
//     ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//     if(XPOC_ERR_SUCCESS != ulReturn)
//     {
//         x_WarnLog("get UE_SERVICE_CTRL failed.\n");
//         return ulReturn;
//     }
// 
//     x_InfoLog("get UE_SERVICE_CTRL Record OK:rows[%d],cols[%d],record[%s].\n", nRows, nCols, *pptRecord);
//     ptRecord->Indx = atoi(pptRecord[1*nCols+0]); /* 第0行是参数的名称 */
//     memcpy(ptRecord->domain, pptRecord[1*nCols+1], MIN(STR_LEN256, strlen(pptRecord[1*nCols+1])));
//     ptRecord->CancelPcallTimeout    = atoi(pptRecord[1*nCols+2]);
//     ptRecord->GroupTimeLimit        = atoi(pptRecord[1*nCols+3]);
//     ptRecord->PcallHangTime         = atoi(pptRecord[1*nCols+4]);
//     ptRecord->FCMaxTime             = atoi(pptRecord[1*nCols+5]);
//     ptRecord->PcallMaxTime          = atoi(pptRecord[1*nCols+6]);
//     ptRecord->GroupPCTransTimeLimit = atoi(pptRecord[1*nCols+7]);
//     ptRecord->FCQueueDepth          = atoi(pptRecord[1*nCols+8]);
//     ptRecord->UserFCMaxTime         = atoi(pptRecord[1*nCols+9]);
//     ptRecord->T7                    = atoi(pptRecord[1*nCols+10]);
//     ptRecord->T8                    = atoi(pptRecord[1*nCols+11]);
//     ptRecord->T15                   = atoi(pptRecord[1*nCols+12]);
//     ptRecord->T16                   = atoi(pptRecord[1*nCols+13]);
//     ptRecord->T17                   = atoi(pptRecord[1*nCols+14]);
//     ptRecord->T20                   = atoi(pptRecord[1*nCols+15]);
//     ptRecord->T55                   = atoi(pptRecord[1*nCols+16]);
//     ptRecord->T56                   = atoi(pptRecord[1*nCols+17]);
//     ptRecord->C7                    = atoi(pptRecord[1*nCols+18]);
//     ptRecord->C17                   = atoi(pptRecord[1*nCols+19]);
//     ptRecord->C20                   = atoi(pptRecord[1*nCols+20]);
//     ptRecord->C55                   = atoi(pptRecord[1*nCols+21]);
//     ptRecord->C56                   = atoi(pptRecord[1*nCols+22]);
// 
//     XPOC_TRACEFUNC_OUT;
//     return XPOC_ERR_SUCCESS;
// }
// 
// /*
// CREATE TABLE USER_ACCOUNT (
// 'Indx' INTEGER PRIMARY KEY AUTOINCREMENT,
// 'XPOCId' TEXT NOT NULL,
// 'PassWord' TEXT NOT NULL,
// 'UserAlias' TEXT NOT NULL,
// 'UserType' INTEGER NOT NULL, --用户类型:1-Normal,2-Admin,3-DC
// 'XPOCid' TEXT NOT NULL,
// 'videoid' TEXT NOT NULL,
// 'dataid' TEXT NOT NULL,
// 'IncallProhibit' INTEGER NOT NULL,
// 'OutcallProhibit' INTEGER NOT NULL,
// 'PttMaxSimuPrivateCallNum' INTEGER NOT NULL,
// 'PttMaxSimuGroupCallNum' INTEGER NOT NULL,
// 'VideoMaxSimuPrivateCallNum' INTEGER NOT NULL,
// 'VideoMaxSimuGroupCallNum' INTEGER NOT NULL,
// 'audioCallClass' INTEGER NOT NULL,
// 'videoCallClass' INTEGER NOT NULL,
// 'dataCallClass' INTEGER NOT NULL
// );
// */
// UINT Conf_UserAccount_Add(USER_ACCOUNT_Struct *ptRecord)
// {
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     UINT ulReturn = XPOC_ERR_SUCCESS;
//     char strSql[STR_LEN1024];
// 
//     do
//     {
//         if(0 == strlen(ptRecord->AccntId) || 0 == strlen(ptRecord->PassWord))
//         {
//             x_WarnLog("invalid XPOCId[%s] or password[%s].\n", ptRecord->AccntId, ptRecord->PassWord);
//             ulReturn = XPOC_ERR_FAIL;
//             break;
//         }
// 
//         memset(strSql, 0, STR_LEN1024);
//         sprintf(strSql, "insert into USER_ACCOUNT values(NULL, \'%s\', \'%s\', \'%s\', %d, \'%s\', \'%s\', \'%s\', %d, %d, %d, %d, %d, %d, %d, %d, %d);",
//                         ptRecord->AccntId,
//                         ptRecord->PassWord,
//                         ptRecord->UserAlias,
//                         ptRecord->UserType,
//                         ptRecord->XPOCId,
//                         ptRecord->videoid,
//                         ptRecord->dataid,
//                         ptRecord->IncallProhibit,
//                         ptRecord->OutcallProhibit,
//                         ptRecord->PttMaxSimuPrivateCallNum,
//                         ptRecord->PttMaxSimuGroupCallNum,
//                         ptRecord->VideoMaxSimuPrivateCallNum,
//                         ptRecord->VideoMaxSimuGroupCallNum, 
//                         ptRecord->audioCallClass, 
//                         ptRecord->videoCallClass, 
//                         ptRecord->dataCallClass);
// 
//         ulReturn = udbOprRecord(strSql);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("add USER_ACCOUNT failed. XPOCId[%s], retCode[%d].\n", ptRecord->AccntId, ulReturn);
//             break;
//         }
//     } while(0);
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// 
// UINT Conf_UserAccount_Del(USER_ACCOUNT_Struct *ptRecord)
// {
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     UINT ulReturn = XPOC_ERR_SUCCESS;
//     char strSql[STR_LEN256];
// 
//     do
//     {
//         memset(strSql, 0, STR_LEN256);
//         if(strlen(ptRecord->AccntId) > 0)
//         {
//             sprintf(strSql, "delete from USER_ACCOUNT where XPOCId = \'%s\';", ptRecord->AccntId);
//         }
//         else
//         {
//             sprintf(strSql, "delete from USER_ACCOUNT where Indx = %ld;", ptRecord->Indx);
//         }
// 
//         ulReturn = udbOprRecord(strSql);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("delete USER_ACCOUNT failed. indx[%d], XPOCId[%s], retCode[%d].\n", ptRecord->Indx, ptRecord->AccntId, ulReturn);
//             break;
//         }
//     } while(0);
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// 
// /*
//     只支持修改 密码和别名
// */
// UINT Conf_UserAccount_Mod(USER_ACCOUNT_Struct *ptRecord)
// {
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     UINT ulReturn = XPOC_ERR_SUCCESS;
//     char strSql[STR_LEN256];
// 
//     do
//     {
//         if(0 == strlen(ptRecord->AccntId))
//         {
//             x_WarnLog("invalid XPOCId[%s].\n", ptRecord->AccntId);
//             ulReturn = XPOC_ERR_FAIL;
//             break;
//         }
// 
//         memset(strSql, 0, STR_LEN256);
//         if( strlen(ptRecord->PassWord) && strlen(ptRecord->UserAlias) )
//         {
//             sprintf(strSql, "update USER_ACCOUNT set PassWord=\'%s\', UserAlias=\'%s\' where XPOCId=\'%s\';", 
//                     ptRecord->PassWord, ptRecord->UserAlias, ptRecord->AccntId);
//         }
//         else if(strlen(ptRecord->PassWord))
//         {
//             sprintf(strSql, "update USER_ACCOUNT set PassWord=\'%s\' where XPOCId=\'%s\';", 
//                     ptRecord->PassWord, ptRecord->AccntId);
//         }
//         else if(strlen(ptRecord->UserAlias))
//         {
//             sprintf(strSql, "update USER_ACCOUNT set UserAlias=\'%s\' where XPOCId=\'%s\';", 
//                     ptRecord->UserAlias, ptRecord->AccntId);
//         }
//         else
//         {
//             x_WarnLog("invalid password[%s] or useralias[%s] for XPOCId[%s].\n",
//                         ptRecord->PassWord, ptRecord->UserAlias, ptRecord->AccntId);
//             ulReturn = XPOC_ERR_FAIL;
//             break;
//         }
// 
//         ulReturn = udbOprRecord(strSql);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("update USER_ACCOUNT failed. XPOCId[%s], retCode[%d].\n", ptRecord->AccntId, ulReturn);
//             ulReturn = XPOC_ERR_PDB_RECORD_EXIST;
//             break;
//         }
//     } while(0);
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// 
// /* 单条记录查询接口 */
// UINT Conf_UserAccount_Qry(USER_ACCOUNT_Struct *ptRecord)
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0;
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     do
//     {
//         memset(strSql, 0, STR_LEN256);
//         if(strlen(ptRecord->AccntId))
//         {
//             sprintf(strSql, "select * from USER_ACCOUNT where McsId = \'%s\';", ptRecord->AccntId);
//         }
//         else if(strlen(ptRecord->XPOCId))
//         {
//             sprintf(strSql, "select * from USER_ACCOUNT where McsId = \'%s\';", ptRecord->XPOCId);
//         }
//         else
//         {
//             strcpy(strSql, "select * from USER_ACCOUNT;");
//         }
//     
//         ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("get USER_ACCOUNT failed, XPOCId[%s], retCode[%d].\n", ptRecord->AccntId, ulReturn);
//             break;
//         }
//     
//         UCHAR i = 1;
// //        for(i=1; i<=nRows && i<XPOC_ACCOUNT_MAX_NUM; i++)
//         {
//             ptRecord->Indx = atoi(pptRecord[i*nCols+0]); /* 第0行是参数的名称 */
//             memcpy(ptRecord->AccntId,   pptRecord[i*nCols+1], MIN(STR_LEN32, strlen(pptRecord[i*nCols+1])));
//             memcpy(ptRecord->PassWord,  pptRecord[i*nCols+2], MIN(STR_LEN32, strlen(pptRecord[i*nCols+2])));
//             memcpy(ptRecord->UserAlias, pptRecord[i*nCols+3], MIN(STR_LEN32, strlen(pptRecord[i*nCols+3])));
//             ptRecord->UserType   = atoi(pptRecord[i*nCols+4]);
//             memcpy(ptRecord->XPOCId,   pptRecord[i*nCols+5], MIN(STR_LEN32, strlen(pptRecord[i*nCols+5])));
//             memcpy(ptRecord->videoid, pptRecord[i*nCols+6], MIN(STR_LEN32, strlen(pptRecord[i*nCols+6])));
//             memcpy(ptRecord->dataid,  pptRecord[i*nCols+7], MIN(STR_LEN32, strlen(pptRecord[i*nCols+7])));
//             ptRecord->IncallProhibit            = atoi(pptRecord[i*nCols+8]);
//             ptRecord->OutcallProhibit           = atoi(pptRecord[i*nCols+9]);
//             ptRecord->PttMaxSimuPrivateCallNum  = atoi(pptRecord[i*nCols+10]);
//             ptRecord->PttMaxSimuGroupCallNum    = atoi(pptRecord[i*nCols+11]);
//             ptRecord->VideoMaxSimuPrivateCallNum= atoi(pptRecord[i*nCols+12]);
//             ptRecord->VideoMaxSimuGroupCallNum  = atoi(pptRecord[i*nCols+13]);
//         }
//     } while(0);
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// /* 多条记录查询接口 */
// UINT Conf_UserAccount_QryAll(USER_ACCOUNT_LIST_Struct *ptRecordList)
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecordList);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0;
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     do
//     {
//         memset(strSql, 0, STR_LEN256);
//         if(strlen(ptRecordList->strXPOCInfo[0].AccntId))
//         {
//             sprintf(strSql, "select * from USER_ACCOUNT where XPOCId = \'%s\';", ptRecordList->strXPOCInfo[0].AccntId);
//         }
//         else
//         {
//             strcpy(strSql, "select * from USER_ACCOUNT;");
//         }
//     
//         ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("get USER_ACCOUNT failed, XPOCId[%s], retCode[%d].\n", ptRecordList->strXPOCInfo[0].AccntId, ulReturn);
//             break;
//         }
//     
//         USER_ACCOUNT_Struct *ptRecord = NULL;
//         UCHAR i = 0;
//         for(i=1; i<=nRows && i<XPOC_ACCOUNT_MAX_NUM; i++)
//         {
//             ptRecord = &ptRecordList->strXPOCInfo[i-1];
//             ptRecord->Indx = atoi(pptRecord[i*nCols+0]); /* 第0行是参数的名称 */
//             memcpy(ptRecord->AccntId,   pptRecord[i*nCols+1], MIN(STR_LEN32, strlen(pptRecord[i*nCols+1])));
//             memcpy(ptRecord->PassWord,  pptRecord[i*nCols+2], MIN(STR_LEN32, strlen(pptRecord[i*nCols+2])));
//             memcpy(ptRecord->UserAlias, pptRecord[i*nCols+3], MIN(STR_LEN32, strlen(pptRecord[i*nCols+3])));
//             ptRecord->UserType   = atoi(pptRecord[i*nCols+4]);
//             memcpy(ptRecord->XPOCId,   pptRecord[i*nCols+5], MIN(STR_LEN32, strlen(pptRecord[i*nCols+5])));
//             memcpy(ptRecord->videoid, pptRecord[i*nCols+6], MIN(STR_LEN32, strlen(pptRecord[i*nCols+6])));
//             memcpy(ptRecord->dataid,  pptRecord[i*nCols+7], MIN(STR_LEN32, strlen(pptRecord[i*nCols+7])));
//             ptRecord->IncallProhibit            = atoi(pptRecord[i*nCols+8]);
//             ptRecord->OutcallProhibit           = atoi(pptRecord[i*nCols+9]);
//             ptRecord->PttMaxSimuPrivateCallNum  = atoi(pptRecord[i*nCols+10]);
//             ptRecord->PttMaxSimuGroupCallNum    = atoi(pptRecord[i*nCols+11]);
//             ptRecord->VideoMaxSimuPrivateCallNum= atoi(pptRecord[i*nCols+12]);
//             ptRecord->VideoMaxSimuGroupCallNum  = atoi(pptRecord[i*nCols+13]);
//     
//     //        x_InfoLog("  %d-%s-%s.\n", ptRecord->Indx, ptRecord->XPOCId, ptRecord->UserAlias);
//         }
//         ptRecordList->uiXPOCNum = nRows;
//     } while(0);
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// /*
// sqlite> .schema GROUP_ACCOUNT
// CREATE TABLE GROUP_ACCOUNT (
// 'Indx' INTEGER PRIMARY KEY AUTOINCREMENT,
// 'GroupId' TEXT NOT NULL,
// 'GroupAlias' TEXT NOT NULL,
// 'GroupOwner' TEXT NOT NULL,
// 'MaxmemberNum' INTEGER NOT NULL
// );
// */
// UINT Conf_GroupAccount_Add(GROUP_ACCOUNT_Struct *ptRecord)
// {
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     UINT ulReturn = XPOC_ERR_SUCCESS;
//     char strSql[STR_LEN1024];
// 
//     do
//     {
//         if(0 == strlen(ptRecord->GroupId))
//         {
//             x_WarnLog("invalid groupId[%s].\n", ptRecord->GroupId);
//             ulReturn = XPOC_ERR_FAIL;
//             break;
//         }
// 
//         memset(strSql, 0, STR_LEN1024);
//         sprintf(strSql, "insert into GROUP_ACCOUNT values(NULL, \'%s\', \'%s\', \'%s\', %d);",
//                         ptRecord->GroupId,
//                         ptRecord->GroupAlias,
//                         ptRecord->GroupOwner,
//                         ptRecord->MaxmemberNum);
// 
//         ulReturn = udbOprRecord(strSql);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("add GROUP_ACCOUNT failed. groupId[%s], retCode[%d].\n", ptRecord->GroupId, ulReturn);
//             break;
//         }
//     } while(0);
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// UINT Conf_GroupAccount_Del(GROUP_ACCOUNT_Struct *ptRecord)
// {
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     UINT ulReturn = XPOC_ERR_SUCCESS;
//     char strSql[STR_LEN256];
// 
//     do
//     {
//         memset(strSql, 0, STR_LEN256);
//         if(strlen(ptRecord->GroupId) > 0)
//         {
//             sprintf(strSql, "delete from GROUP_ACCOUNT where GroupId = \'%s\';", ptRecord->GroupId);
//         }
//         else
//         {
//             sprintf(strSql, "delete from GROUP_ACCOUNT where Indx = %ld;", ptRecord->Indx);
//         }
// 
//         ulReturn = udbOprRecord(strSql);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("delete GROUP_ACCOUNT failed. indx[%d], groupId[%s], retCode[%d].\n", ptRecord->Indx, ptRecord->GroupId, ulReturn);
//             break;
//         }
//     } while(0);
// 
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// UINT Conf_GroupAccount_Mod(GROUP_ACCOUNT_Struct *ptRecord)
// {
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     UINT ulReturn = XPOC_ERR_SUCCESS;
//     char strSql[STR_LEN256];
// 
//     do
//     {
//         if(0 == strlen(ptRecord->GroupId) || 0 == strlen(ptRecord->GroupAlias))
//         {
//             x_WarnLog("invalid groupId[%s] or groupAlias[%s].\n", ptRecord->GroupId, ptRecord->GroupAlias);
//             ulReturn = XPOC_ERR_FAIL;
//             break;
//         }
// 
//         memset(strSql, 0, STR_LEN256);
//         sprintf(strSql, "update GROUP_ACCOUNT set GroupAlias=\'%s\' where GroupId=\'%s\';", 
//                 ptRecord->GroupAlias, ptRecord->GroupId);
// 
//         ulReturn = udbOprRecord(strSql);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("update GROUP_ACCOUNT failed. groupId[%s], retCode[%d].\n", ptRecord->GroupId, ulReturn);
//             ulReturn = XPOC_ERR_PDB_RECORD_EXIST;
//             break;
//         }
//     } while(0);
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// /* 单条记录查询接口 */
// UINT Conf_GroupAccount_Qry(GROUP_ACCOUNT_Struct *ptRecord)
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0;
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     do
//     {
//         memset(strSql, 0, STR_LEN256);
//         if(0 == strlen(ptRecord->GroupId))
//         {
//             x_WarnLog("error groupid[%s] for query GroupAccount.\n", ptRecord->GroupId);
//             break;
//         }
//         sprintf(strSql, "select * from GROUP_ACCOUNT where GroupId = \'%s\';", ptRecord->GroupId);
//     
//         ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("get GROUP_ACCOUNT failed, groupId[%s], retCode[%d].\n", ptRecord->GroupId, ulReturn);
//             break;
//         }
//     
//         UCHAR i = 1;
//         ptRecord->Indx = atoi(pptRecord[i*nCols+0]); /* 第0行是参数的名称 */
//         memcpy(ptRecord->GroupId,     pptRecord[i*nCols+1], MIN(STR_LEN32, strlen(pptRecord[i*nCols+1])));
//         memcpy(ptRecord->GroupAlias,  pptRecord[i*nCols+2], MIN(STR_LEN32, strlen(pptRecord[i*nCols+2])));
//         memcpy(ptRecord->GroupOwner,  pptRecord[i*nCols+3], MIN(STR_LEN32, strlen(pptRecord[i*nCols+3])));
//         ptRecord->MaxmemberNum   = atoi(pptRecord[i*nCols+4]);
//         x_InfoLog("  %d-%s-%s.\n", ptRecord->Indx, ptRecord->GroupId, ptRecord->GroupAlias);
//     } while(0);
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// UINT Conf_GroupAccount_QryAll(GROUP_ACCOUNT_LIST_Struct *ptRecordList)
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecordList);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0;
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     do
//     {
//         memset(strSql, 0, STR_LEN256);
//         if(strlen(ptRecordList->strGroupInfo[0].GroupId))
//         {
//             sprintf(strSql, "select * from GROUP_ACCOUNT where GroupId = \'%s\';", ptRecordList->strGroupInfo[0].GroupId);
//         }
//         else
//         {
//             strcpy(strSql, "select * from GROUP_ACCOUNT;");
//         }
//     
//         ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("get GROUP_ACCOUNT failed, groupId[%s], retCode[%d].\n", ptRecordList->strGroupInfo[0].GroupId, ulReturn);
//             break;
//         }
//     
//         GROUP_ACCOUNT_Struct *ptRecord = NULL;
//         UCHAR i = 0;
//         for(i=1; i<=nRows && i<GROUP_ACCOUNT_MAX_NUM; i++)
//         {
//             ptRecord = &ptRecordList->strGroupInfo[i-1];
//             ptRecord->Indx = atoi(pptRecord[i*nCols+0]); /* 第0行是参数的名称 */
//             memcpy(ptRecord->GroupId,     pptRecord[i*nCols+1], MIN(STR_LEN32, strlen(pptRecord[i*nCols+1])));
//             memcpy(ptRecord->GroupAlias,  pptRecord[i*nCols+2], MIN(STR_LEN32, strlen(pptRecord[i*nCols+2])));
//             memcpy(ptRecord->GroupOwner,  pptRecord[i*nCols+3], MIN(STR_LEN32, strlen(pptRecord[i*nCols+3])));
//             ptRecord->MaxmemberNum   = atoi(pptRecord[i*nCols+4]);
//     
//     //        x_InfoLog("  %d-%s-%s.\n", ptRecord->Indx, ptRecord->GroupId, ptRecord->GroupAlias);
//         }
//         ptRecordList->uiGroupNum = nRows;
//     } while(0);
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// /*
// sqlite> .schema GROUP_MEMBER
// CREATE TABLE GROUP_MEMBER (
// 'Indx' INTEGER PRIMARY KEY AUTOINCREMENT,
// 'GroupId' TEXT NOT NULL,
// 'XPOCId' TEXT NOT NULL
// );
// */
// UINT Conf_GroupMember_Add(GROUP_MEMBER_Struct *ptRecord)
// {
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     UINT ulReturn = XPOC_ERR_SUCCESS;
//     char strSql[STR_LEN1024];
// 
//     do
//     {
//         if(0 == strlen(ptRecord->GroupId) || 0 == strlen(ptRecord->XPOCId))
//         {
//             x_WarnLog("invalid groupId[%s] or XPOCId[%s].\n", ptRecord->GroupId, ptRecord->XPOCId);
//             ulReturn = XPOC_ERR_FAIL;
//             break;
//         }
// 
//         memset(strSql, 0, STR_LEN1024);
//         sprintf(strSql, "insert into GROUP_MEMBER values(NULL, \'%s\', \'%s\');",
//                         ptRecord->GroupId, ptRecord->XPOCId);
// 
//         ulReturn = udbOprRecord(strSql);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("add GROUP_MEMBER failed. groupId[%s], XPOCId[%s], retCode[%d].\n", 
//                         ptRecord->GroupId, ptRecord->XPOCId, ulReturn);
//             break;
//         }
//     } while(0);
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// UINT Conf_GroupMember_Del(GROUP_MEMBER_Struct *ptRecord)
// {
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     UINT ulReturn = XPOC_ERR_SUCCESS;
//     char strSql[STR_LEN256];
// 
//     do
//     {
//         if(0 == strlen(ptRecord->GroupId) || 0 == strlen(ptRecord->XPOCId))
//         {
//             x_WarnLog("invalid groupId[%s] or XPOCId[%s].\n", ptRecord->GroupId, ptRecord->XPOCId);
//             ulReturn = XPOC_ERR_FAIL;
//             break;
//         }
//     
//         memset(strSql, 0, STR_LEN256);
//         sprintf(strSql, "delete from GROUP_MEMBER where GroupId = \'%s\' and McsId = \'%s\';", ptRecord->GroupId, ptRecord->XPOCId);
// 
//         ulReturn = udbOprRecord(strSql);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("delete GROUP_MEMBER failed. groupId[%s], groupId[%s], retCode[%d].\n", 
//                         ptRecord->GroupId, ptRecord->XPOCId, ulReturn);
//             break;
//         }
//     } while(0);
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// /* 组成员的修改使用 del+add 实现 ,本接口不使用 */
// UINT Conf_GroupMember_Mod(GROUP_MEMBER_Struct *ptRecord)
// {
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     //do nothing
// 
// 
//     XPOC_TRACEFUNC_OUT;
//     return XPOC_ERR_SUCCESS;
// }
// 
// /* 单条记录查询, 该查询只是用于记录存在与否的校验 */
// UINT Conf_GroupMember_Qry(GROUP_MEMBER_Struct *ptRecord)
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecord);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0; 
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     do
//     {
//         memset(strSql, 0, STR_LEN256);
//         if(0 != strlen(ptRecord->GroupId) && 0 != strlen(ptRecord->XPOCId))
//         {
//             sprintf(strSql, "select * from GROUP_MEMBER where GroupId = \'%s\' and McsId = \'%s\';", ptRecord->GroupId, ptRecord->XPOCId);
//         }
//         else if(0 != strlen(ptRecord->GroupId))
//         {
//             sprintf(strSql, "select * from GROUP_MEMBER where GroupId = \'%s\';", ptRecord->GroupId);
//         }
//         else if(0 != strlen(ptRecord->XPOCId))
//         {
//             sprintf(strSql, "select * from GROUP_MEMBER where McsId = \'%s\';", ptRecord->XPOCId);
//         }
//         
//         ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("get GROUP_MEMBER failed, GroupId[%s].\n", ptRecord->GroupId);
//             break;
//         }
// 
// //        ptRecord->Indx = atoi(pptRecord[1*nCols+0]); /* 第0行是参数的名称 */
//         memcpy(ptRecord->GroupId, pptRecord[1*nCols+1], MIN(STR_LEN32, strlen(pptRecord[1*nCols+1])));
//         memcpy(ptRecord->XPOCId, pptRecord[1*nCols+2], MIN(STR_LEN32, strlen(pptRecord[1*nCols+2])));
//     } while(0);
// 
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// UINT Conf_GroupMember_QryByGroup(GROUP_MEMBER_LIST_Struct *ptRecordList)
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecordList);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0; 
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     do
//     {
//         memset(strSql, 0, STR_LEN256);
//         if(0 == strlen(ptRecordList->GroupId))
//         {
//             x_WarnLog("groupid[%s] is invalid for query GROUP_MEMBER.\n", ptRecordList->GroupId);
//             ulReturn = XPOC_ERR_FAIL;
//             break;
//         }
//         sprintf(strSql, "select * from GROUP_MEMBER where GroupId = \'%s\';", ptRecordList->GroupId);
// 
//         ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("get GROUP_MEMBER failed, GroupId[%s].\n", ptRecordList->GroupId);
//             break;
//         }
// 
// //        ptRecord->Indx = atoi(pptRecord[1*nCols+0]); /* 第0行是参数的名称 */
//         memcpy(ptRecordList->GroupId, pptRecord[1*nCols+1], MIN(STR_LEN32, strlen(pptRecord[1*nCols+1])));
//         UCHAR i = 0;
//         for(i=1; i<=nRows; i++ )
//         {
//             memcpy(ptRecordList->XPOCIdList[i-1], pptRecord[i*nCols+2], MIN(STR_LEN32, strlen(pptRecord[i*nCols+2])));
//         }
//         ptRecordList->uiMemberNum = nRows;
// 
//     } while(0);
// 
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 
// /* 用户查找特定XPOCId所在的组 */
// UINT Conf_GroupMember_QryGroupListByXPOCId(XPOCID_GROUP_LIST_Struct *ptRecordList)
// {
//     UINT ulReturn = XPOC_ERR_FAIL;
//     XPOC_TRACEFUNC_IN;
//     X_NULL_POINTER_CHK_ONE_PARA(ptRecordList);
// 
//     char strSql[STR_LEN256];
//     int  nRows    = 0; 
//     int  nCols    = 0;
//     char **pptRecord = NULL;
// 
//     do
//     {
//         memset(strSql, 0, STR_LEN256);
//         if(0 == strlen(ptRecordList->XPOCId))
//         {
//             x_WarnLog("XPOCId[%s] is invalid for query GROUP_MEMBER.\n", ptRecordList->XPOCId);
//             ulReturn = XPOC_ERR_FAIL;
//             break;
//         }
//         sprintf(strSql, "select * from GROUP_MEMBER where McsId = \'%s\';", ptRecordList->XPOCId);
// 
//         ulReturn = udbGetRecord(strSql, &nRows, &nCols, &pptRecord);
//         if(XPOC_ERR_SUCCESS != ulReturn)
//         {
//             x_WarnLog("get GROUP_MEMBER failed, XPOCId[%s].\n", ptRecordList->XPOCId);
//             break;
//         }
// 
// //        ptRecord->Indx = atoi(pptRecord[1*nCols+0]); /* 第0行是参数的名称 */
//         memcpy(ptRecordList->XPOCId, pptRecord[1*nCols+2], MIN(STR_LEN32, strlen(pptRecord[1*nCols+2])));
//         UCHAR i = 0;
//         for(i=1; i<=nRows; i++ )
//         {
//             memcpy(ptRecordList->GroupIdList[i-1], pptRecord[i*nCols+1], MIN(STR_LEN32, strlen(pptRecord[i*nCols+1])));
//         }
//         ptRecordList->uiGroupNum = nRows;
// 
//     } while(0);
// 
// 
//     XPOC_TRACEFUNC_OUT;
//     return ulReturn;
// }
// 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐