
local key = KEYS[1]
local batchKey = KEYS[2]
local startTimeKey = KEYS[3]
local scriptTotalKey = KEYS[4]
local waitKey = KEYS[5]
local runKey = KEYS[6]

local status = KEYS[12]
local scriptStatusKey = KEYS[13]
local scriptId = KEYS[14]
local scriptStatus = KEYS[15]

local batch = ARGV[1]
local startTime = ARGV[2]
local scriptTotal = ARGV[3]
local scriptStatus = ARGV[9]

-- 判断批次脚本统计数据是否存在
-- 判断缓存是否存在
if(redis.call('exists', key) > 0) then
    -- 所有任务重试，则等待状态+1，否则运行状态+1
    if scriptStatus == '0' then
        redis.call('hincrby', key, waitKey, 1);
    else
        redis.call('hincrby', key, runKey, 1);
    end
else
    -- 不存在加载批次的统计数据
    -- 加载批次号，开始时间，脚本总数
    redis.call('HSET', key, batchKey, batch, scriptTotalKey, scriptTotal);
    -- 全部任务重试，不缓存开始时间
    if startTime ~= '0' then
        redis.call('HSET', key, startTimeKey, startTime);
    end
    -- 所有任务重试，则等待状态+1，否则运行状态+1
    if scriptStatus == '0' then
        -- 等待状态存在则+1，否则设置值为1
        if(redis.call('hexists', key, waitKey) > 0) then
            redis.call('hincrby', key, waitKey, 1);
        else
            redis.call('hset', key, waitKey, 1)
        end
        -- 执行中状态不存在则设置为0
        if(redis.call('hexists', key, runKey) <= 0) then
            redis.call('hset', key, runKey, 0)
        end
    else
        if(redis.call('hexists', key, waitKey) <= 0) then
            redis.call('hset', key, waitKey, 0)
        end
        if(redis.call('hexists', key, runKey) > 0) then
            redis.call('hincrby', key, runKey, 1);
        else
            redis.call('hset', key, runKey, 1)
        end
    end

    -- keys第7个参数开始，分别是执行成功，执行失败，断言失败，取消，超时
    -- ARGV第5个参数开始，分别是执行成功，执行失败，断言失败，取消，超时的总数
    -- 相应状态不存在则设置对应的总数
    for i=2, 6 do
    	if(redis.call('hexists', key, KEYS[5 + i]) <= 0) then
        	redis.call('hset', key, KEYS[5 + i], ARGV[2 + i])
    	end
    end


end
-- 原状态数量-1
redis.call('hincrby', key, status, -1);

-- 加载批次脚本状态
redis.call('hset', scriptStatusKey, scriptId, scriptStatus)

return true