// 此文件为注册码相关操作

// 创建数据库
功能 sqlCreatDataBase()
    变量 返回数组,ret
    // id 数据库的自增编号
    // regcode 注册码
    // begintime 开始时间
    // endtime 结束时间
    // bindDevicesName 绑定的机器码
    // isbind  是否绑定
    // isFrozen  是否冻结
    // type   注册码类型
    // isactive 注册码是否启动
    ret = sqlite数据库执行返回数组("regtest.db","create table IF NOT EXISTS regManager(id integer primary key autoincrement,regcode,begintime,endtime,bindDevicesName,isbind,isFrozen,type,isactive);",返回数组)//创建表
    如果(!ret)
        发送文本消息("创建表失败:"& 获取错误信息(1))
        返回 假
    否则
        返回 真
    结束
结束


// 生成注册码功能
功能 sql创建新注册码(param)
    变量 timestr = 获取系统时间()
    变量 md5str = md5(timestr)
    变量 retArray = null,inserText
    选择(param)
        条件 "ji"
        inserText = 字符串格式化("insert into regManager(regcode,begintime,endtime,bindDevicesName,isbind,isFrozen,type,isactive) values('%s','','','','false','false','ji','false');",md5str)
        
        条件 "mouth"
        inserText = 字符串格式化("insert into regManager(regcode,begintime,endtime,bindDevicesName,isbind,isFrozen,type,isactive) values('%s','','','','false','false','mouth','false');",md5str)
        
        条件 "week"
        inserText = 字符串格式化("insert into regManager(regcode,begintime,endtime,bindDevicesName,isbind,isFrozen,type,isactive) values('%s','','','','false','false','week','false');",md5str)
        
        条件 "day"
        inserText = 字符串格式化("insert into regManager(regcode,begintime,endtime,bindDevicesName,isbind,isFrozen,type,isactive) values('%s','','','','false','false','day','false');",md5str)
    结束
    
    变量 ret = sqlite数据库执行返回json("regtest.db",inserText,retArray)
    
    变量 selectStr = 字符串格式化("select * from regManager where regcode='%s';",md5str)
    ret = sqlite数据库执行返回json("regtest.db",selectStr,retArray)
    如果(ret)
        发送文本消息("生成注册码["&md5str&"]成功")
        返回 retArray
    否则
        发送文本消息("生成注册码["&md5str&"]失败")
        返回 retArray
    结束
结束

// 解绑注册码
功能 sql解绑注册码(regKey)
    变量 返回数组,ret
    变量 sqlstr = 字符串格式化("select * from regManager where regcode='%s';",regKey)
    ret = sqlite数据库执行返回数组("regtest.db",sqlstr,返回数组)
    如果(ret && 数组大小(返回数组) > 0)
        sqlstr = 字符串格式化("update regManager set isbind='false' where regcode='%s';",regKey)    
        ret = sqlite数据库执行返回json("regtest.db",sqlstr,返回数组)
        发送文本消息("sql解绑注册码成功")
        返回 真
    否则
        发送文本消息("sql解绑注册码失败")
        返回 假
    结束    
结束


// 冻结注册码
功能 sql冻结注册码(regKey)
    变量 返回数组,ret
    变量 sqlstr = 字符串格式化("select * from regManager where regcode='%s';",regKey)
    ret = sqlite数据库执行返回数组("regtest.db",sqlstr,返回数组)
    如果(ret && 数组大小(返回数组) > 0)
        sqlstr = 字符串格式化("update regManager set isFrozen='true' where regcode='%s';",regKey)
        ret = sqlite数据库执行返回json("regtest.db",sqlstr,返回数组)
        发送文本消息("sql冻结注册码成功")
        返回 真
    否则
        发送文本消息("sql冻结注册码失败")
        返回 假
    结束
结束


// 解冻注册码
功能 sql解冻注册码(regKey)
    变量 返回数组,ret
    变量 sqlstr = 字符串格式化("select * from regManager where regcode='%s';",regKey)
    ret = sqlite数据库执行返回数组("regtest.db",sqlstr,返回数组)
    如果(ret && 数组大小(返回数组) > 0)
        sqlstr = 字符串格式化("update regManager set isFrozen='false' where regcode='%s';",regKey)
        ret = sqlite数据库执行返回json("regtest.db",sqlstr,返回数组)
        发送文本消息("sql解冻注册码成功")
        返回 真
    否则
        发送文本消息("sql解冻注册码失败")
        返回 假
    结束
结束

// 删除注册码
功能 sql删除注册码(regKey)
    变量 返回数组,ret
    变量 sqlstr = 字符串格式化("select * from regManager where regcode='%s';",regKey)
    ret = sqlite数据库执行返回数组("regtest.db",sqlstr,返回数组)
    如果(ret && 数组大小(返回数组) > 0)
        sqlstr = 字符串格式化("delete from regManager where regcode='%s';",regKey)
        ret = sqlite数据库执行返回json("regtest.db",sqlstr,返回数组)
        发送文本消息("sql删除注册码成功")
        返回 真
    否则
        发送文本消息("sql删除注册码失败")
        返回 假
    结束
结束

// sql续费注册码
功能 sql续费注册码(regKey,type)
    变量 返回数组,ret
    变量 sqlstr = 字符串格式化("select * from regManager where regcode='%s';",regKey)
    ret = sqlite数据库执行返回数组("regtest.db",sqlstr,返回数组)
    如果(ret && 数组大小(返回数组) > 0)
        变量 end1Time1 = 返回数组[0]["endtime"]
        变量 endtime = 0
        选择(type)
            条件 "ji"
            endtime = 指定时间("m",3,end1Time1)
            
            条件 "mouth"
            endtime = 指定时间("m",1,end1Time1)
            
            条件 "week"
            endtime = 指定时间("d",7,end1Time1)
            
            条件 "day"
            endtime = 指定时间("d",1,end1Time1)
        结束
        sqlstr = 字符串格式化("update regManager set endtime='%s' where regcode='%s';",endtime,regKey)
        发送文本消息(sqlstr)
        ret = sqlite数据库执行返回json("regtest.db",sqlstr,返回数组)
        发送文本消息("sql续费注册码成功")
        返回 真
    否则
        发送文本消息("sql续费注册码失败")
        返回 假
    结束
结束


// 判断登录者是否可以验证通过
功能 sqlCheckLoginInfo(pcID,regKey)
    变量 sqlstr = 字符串格式化("select * from regManager where regcode='%s';",regKey)
    变量 返回数组,ret,retmsg="登录失败:未知错误"
    ret = sqlite数据库执行返回数组("regtest.db",sqlstr,返回数组)
    发送文本消息("机器码: " & pcID&" 注册码: " & regKey) //如果相同的机器码与注册码访问频繁，可以考虑是否有人在破解软件
    发送文本消息("sqlCheckLoginInfo: " & 返回数组) 
    如果(数组大小(返回数组) > 0)
        // 判断注册码是否冻结了
        如果(返回数组[0]["isFrozen"] == "true")
            retmsg = "登录失败:注册码已经冻结"
            返回 retmsg
        结束
        
        // 判断注册码是否已经绑定了本机器
        变量 bindDevicesName = 返回数组[0]["bindDevicesName"]
        
        // 第一次登录
        如果(bindDevicesName == "")
            变量 begintime = 当前时间()
            变量 endtime = 0
            
            选择(返回数组[0]["type"])
                条件 "ji"
                endtime = 指定时间("m",3,begintime)
                
                条件 "mouth"
                endtime = 指定时间("m",1,begintime)
                
                条件 "week"
                endtime = 指定时间("d",7,begintime)
                
                条件 "day"
                endtime = 指定时间("d",1,begintime)
            结束
            
            变量 update = 字符串格式化("update regManager set bindDevicesName='%s',begintime='%s',endtime='%s',isbind='true',isactive='true' where regcode='%s';",pcID,begintime,endtime,regKey)
            发送文本消息("SQL: "&update)
            ret = sqlite数据库执行返回数组("regtest.db",update,返回数组)
            
            变量 min = 时间间隔("n",begintime,endtime)
            如果(min>0)
                retmsg = "登录成功:剩余时间=" & min & "分钟"
            结束
            
        否则如果(bindDevicesName != "" && bindDevicesName == pcID)  // 机器码相同的话,就直接返回剩余时间
            变量 begintime = 返回数组[0]["begintime"]
            变量 endtime = 返回数组[0]["endtime"]
            变量 nowtime = 当前时间()
            变量 min = 时间间隔("n",nowtime,endtime)
            如果(min>0)
                retmsg = "登录成功:剩余时间=" & min & "分钟"
            否则
                retmsg = "登录失败:注册码已经过期"
            结束
            
        否则如果(bindDevicesName != "" && bindDevicesName != pcID)  // 机器码不同的就判断是否绑定了
            变量 isBind = 返回数组[0]["isbind"]
            如果(isBind == "true")
                retmsg = "登录失败:注册码已经绑定其他机器"
            否则
                变量 update = 字符串格式化("update regManager set bindDevicesName='%s',isbind='true' where regcode='%s';",pcID,regKey)
                发送文本消息("更换绑定机器码: "&update)
                ret = sqlite数据库执行返回数组("regtest.db",update,返回数组)
                
                变量 endtime = 返回数组[0]["endtime"]
                变量 nowtime = 当前时间()
                变量 min = 时间间隔("n",nowtime,endtime)
                如果(min>0)
                    retmsg = "登录成功:剩余时间=" & min & "分钟"
                否则
                    retmsg = "登录失败:注册码已经过期"
                结束
            结束
        结束
    否则
        发送文本消息("查询失败:"&获取错误信息(1))
        retmsg = "登录失败:注册码不存在"
    结束
    
    返回 retmsg
结束

// 查询注册码使用时间
功能 sql查询注册码使用时间(pcID,regKey)
    
    变量 sqlstr = 字符串格式化("select * from regManager where regcode='%s' and bindDevicesName='%s'",regKey,pcID)
    变量 返回数组,ret,retMsg
    ret = sqlite数据库执行返回数组("regtest.db",sqlstr,返回数组)
    如果(数组大小(返回数组) <=0)
        retMsg = "查询失败:查询失败."
    否则如果(返回数组[0]["isFrozen"] == "true")
        retMsg = "查询失败:注册码已经冻结."
    否则
        发送文本消息("isFrozen:"&返回数组[0]["isFrozen"])
        变量 begintime = 返回数组[0]["begintime"]
        变量 endtime = 返回数组[0]["endtime"]
        变量 nowtime = 当前时间()
        变量 min = 时间间隔("n",nowtime,endtime)
        
        retMsg = min
    结束
    
    返回 retMsg
结束

// 返回所有注册码信息
功能 sql获取注册码所有信息()    
    变量 sqlstr = "select * from regManager"
    变量 返回数组,ret
    ret = sqlite数据库执行返回json("regtest.db",sqlstr,返回数组)
    如果(!ret)
        发送文本消息("查询失败:"&获取错误信息(1))
        返回 ""   
    否则
        发送文本消息("获取所有注册码："&返回数组)
        返回 返回数组    
    结束
结束