

import cgi
import time
import redis
import traceback
from hsql import TMySql
from mylog import Log


bai_rds = redis.Redis(host="172.28.159.189", port=8172, charset="utf-8", decode_responses=True)
kkb_conf_rds = redis.Redis(host="172.28.159.189", port=8150, charset="utf-8", decode_responses=True)

def release_one_kkb(code):
    Log.info("release_one_kkb")

    conn = TMySql('rm-wz9f14168f1p67yzi.mysql.rds.aliyuncs.com', 3306, 'userdb00002', 'D33lkfj93dkcuDk3ldee', 'kkb2_db')
    conn.connect()

    con_count = int(kkb_conf_rds.get("con_count"))

    if con_count == 0:
        Log.error('con count 不能为空')
        return -1
    mcode = code
    sql = "select distinct phone from t_bindContract where mcode = '%s' and used = 1 and bstate = 1" % mcode
    res = conn.select(sql)
    cnt = len(res)
    
    if cnt == 0:
        Log.error('合约未绑定')
        #exit(-1)

    phones = []
    for r in res:
        phones.append(r[0])

    Log.info(mcode)
    Log.info(phones)

    for phone in phones:
        #查询该设备下的合约数
        sql = "select ccode from t_bindContract where phone = '%s' and mcode = '%s' and used = 1 and bstate = 1" % (phone,mcode)
        res = conn.select(sql)

        cnt = 0
        if res :
            cnt = len(res)
        else:
            Log.error('查询出错')
            exit(-1)

        #if cnt != con_count:
        #    print('有合约转出')
        #    #exit(-1)
        rds_key = "%s_bindcon" % phone
        Log.info(rds_key)
        for i in range(cnt):
            ccode = res[i][0]
            update_sql = "update t_bindContract set used = 0, modifyTime = now() where phone = '%s' and ccode = '%s'" % (phone,ccode)
            Log.info(update_sql)
            conn.multiexec(update_sql)
            Log.info("srem [%s] [%s]" % (rds_key, ccode))
            bai_rds.srem(rds_key, ccode)

        conn.multicommit()

    sql = "select phone from t_bindInfo where mcode = '%s' and used = 1 and bstate = 1" % mcode
    res = conn.select(sql)
    
    cnt = len(res)
    
    if cnt != 1:
        Log.error('该设备未绑定')
        #exit(-1)
    
    phone = res[0][0]

    Log.info(mcode)
    Log.info(phone)

    Log.info('release phone: [%s], mcode:[%s]' % (phone,mcode))

    sql = "update t_bindInfo set used = 0, modifyTime = now() where phone = '%s' and mcode = '%s' " % (phone,mcode)
    conn.execute(sql)

    rds_key = "%s_bindkkb" % phone
    Log.info("srem [%s] [%s]" % (rds_key, mcode))
    bai_rds.srem(rds_key,mcode)

    rds_key = "%s_kkbby" % mcode
    Log.info("delete [%s]" % (rds_key))
    bai_rds.delete(rds_key)

    conn.close()
    return 0

        
def print_http_result(ret, state):
    result = """
    Content-type:text/html\r\n\r\n
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>test</title>
    </head>
    <body>
    <br />
    <p>%s</p>
    <br />
    <p>%s</p>
    </body>
    </html>
    """ % (str(ret), str(state))
    print(result)
def print_http_result_v2(ret, state):
    print("Content-type:text/html\r\n\r\n")
    print(str(ret) + "    ")
    print(str(state) + "    ")
if __name__ == '__main__':
    try:
        form = cgi.FieldStorage()
        code = form["code"].value
        #code = '47401532364015300'
        ret = release_one_kkb(code)
        if ret == 0:
            print_http_result_v2(ret, "success")
        else:
            print_http_result_v2(ret, "fail")
    except:
        ex_type, ex_val, ex_stack = sys.exc_info()
        logger.error(ex_type)
        logger.error(ex_val)
        for stack in traceback.extract_tb(ex_stack):
            logger.error(stack)
