public OpRes reqGenGiftCode(ParamGenGiftCode param)
    {
        int state = getRemoteServerState(0);

        if (state == StateMgr.state_closed)
        {
            return(OpRes.op_res_export_excel_not_open);
        }

        try
        {
            ServersEngine e       = m_serversEngines[0];
            int           retCode = e.reqService(param, ServiceType.serviceTypeGiftCode);

            if (retCode == (int)RetCodeRemote.ret_error)
            {
                return(OpRes.op_res_failed);
            }

            if (retCode == (int)RetCodeRemote.ret_busy)
            {
                return(OpRes.op_res_export_service_busy);
            }

            return(OpRes.opres_success);
        }
        catch (System.Exception ex)
        {
        }
        return(OpRes.op_res_failed);
    }
    private void genGiftCode(ParamGenGiftCode codeParam, DateTime now)
    {
        int i = 0, j = 0;
        List <Dictionary <string, object> > docList = new List <Dictionary <string, object> >();

        int serverId = DBMgr.getInstance().getDbId(codeParam.m_dbServerIP);

        if (serverId == -1)
        {
            return;
        }

        for (i = 0; i < codeParam.m_codeList.Count; i++)
        {
            GiftCodeInfo info = codeParam.m_codeList[i];

            for (j = 0; j < info.m_count; j++)
            {
                Dictionary <string, object> ret = createOneCode(info.m_giftId, info.m_plat, now);
                docList.Add(ret);

                if (docList.Count > 5000)
                {
                    DBMgr.getInstance().insertData(TableName.GIFT_CODE, docList, serverId, DbName.DB_ACCOUNT);
                    docList.Clear();
                }
            }
        }

        if (docList.Count > 0)
        {
            DBMgr.getInstance().insertData(TableName.GIFT_CODE, docList, serverId, DbName.DB_ACCOUNT);
        }
    }
    public override int doService(ServiceParam param)
    {
        if (param == null || m_thread == null)
        {
            return((int)RetCode.ret_error);
        }

        ParamGenGiftCode p = (ParamGenGiftCode)param;

        lock (m_lockObj)
        {
            m_taskQue.Enqueue(p);
            m_curState = ThreadState.state_busy;
        }
        return((int)RetCode.ret_success);
    }
    private void run()
    {
        while (m_run)
        {
            switch (m_curState)
            {
            case ThreadState.state_idle:
            {
                Thread.Sleep(5000);
            }
            break;

            case ThreadState.state_busy:
            {
                ParamGenGiftCode data = null;
                DateTime         now  = DateTime.Now;
                while (m_taskQue.Count > 0)
                {
                    lock (m_lockObj)
                    {
                        data = m_taskQue.Dequeue();
                    }

                    if (!m_run)
                    {
                        break;
                    }

                    if (data != null)
                    {
                        genGiftCode(data, now);
                    }
                }
                m_curState = ThreadState.state_idle;
            }
            break;
            }
        }
    }