Commit f58ebb7a authored by 周尚's avatar 周尚

pay_vipcard_amt 错误修复

日志记录转由ngx.log
数据库参数写入init.lua
parent b0640587
......@@ -35,11 +35,11 @@ http {
lua_package_path "/Users/zhoush/openresty/nginx/lua/luabiz/?.lua;;";
init_by_lua_file "lua/luainit/init.lua";
# init_worker_by_lua_file "luabiz/settle/settle.lua";
init_worker_by_lua_file "lua/luabiz/settle.lua";
#gzip on;
server {
listen 7777 ;
listen 8080;
server_name localhost;
......@@ -70,12 +70,48 @@ http {
root html;
index index.html index.htm;
lua_code_cache on;
log_by_lua_block {
local logger = require("socket")
if not logger.initted() then
local ok, err = logger.init {
host = '127.0.0.1',
port = 1234,
flush_limit = 4096
}
if not ok then
ngx.log(ngx.ERR, "failed to initialize the logger: ", err)
return
end
end
-- construct the custom access log message in
-- the Lua variable "msg"
local bytes, err = logger.log(msg)
if err then
ngx.log(ngx.ERR, "failed to log message: ", err)
return
end
}
}
location /regex {
content_by_lua_block {
local str = '2018-08-15'
local regex = [[(\d+)-(\d+)-(\d+)]]
local r = ngx.re.match(str, regex, 'jo')
if r then
ngx.say(r[1], r[2], r[3])
else
ngx.say('no matched')
end
}
}
location /test {
location /settle {
content_by_lua_block {
local tk_sdt = loadmod("tk_sdt")
tk_sdt:run()
local settle = loadmod("settle")
settle:run()
}
}
......
......@@ -52,7 +52,7 @@ local function async_db(ins_sql)
}
if not ok then
zx_base:log("ASYNC_DB", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("ASYNC_DB", err, ": ", errcode, " ", sqlstate)
return
end
......
......@@ -18,7 +18,7 @@ local function asb_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -31,7 +31,7 @@ local function asb_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_ASB]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_ASB]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -93,7 +93,7 @@ local function dispatch()
end
function _ASB.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
......
......@@ -19,7 +19,7 @@ local function asbdetail_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -32,7 +32,7 @@ local function asbdetail_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_ASBDETAIL]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_ASBDETAIL]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -94,7 +94,7 @@ local function dispatch()
end
function _ASBDETAIL.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
......
local _NC = {}
local NODE_CARD = {}
local mysql = loadmod("resty.mysql")
local zx_base = loadmod("zx_base")
local json = loadmod('cjson')
local db_conf = "tk7_dbs.json"
local zx_base = loadmod("zx_base")
local M = string.format("%-16s", "<NODE_CARD>")
-- local json = loadmod('cjson')
-- local db_conf = "tk7_dbs.json"
local tasks = {}
local function card_sql(db_st)
local log = ngx.log
local ERR = ngx.ERR
local function card_sql(db_st, total_time)
ngx.log(ngx.NOTICE, "-----------------------> START")
local db, err = mysql:new()
if not db then
zx_base:log("S", "[CARD]:", "failed to instantiate mysql: ", err)
ngx.log(ngx.ERR, "failed to instantiate mysql: ", err)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -34,7 +33,7 @@ local function card_sql(db_st)
}
if not ok then
zx_base:log("S", "[NODE_CARD]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
ngx.log(ngx.ERR, err, ": ", errcode, " ", sqlstate)
return
end
......@@ -42,47 +41,52 @@ local function card_sql(db_st)
-- local sql_delete = [[DELETE FROM node_card WHERE (card_status != 0 AND card_status !=1) or now() > card_exp]]
local sql_update = [[UPDATE node_card SET card_status = 8 WHERE now() > card_exp]]
local res, err, errcode, sqlstate = db:query(sql_update)
ngx.log(ngx.NOTICE, sql_update)
if not res then
zx_base:log("S", "[NODE_CARD]:", "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
zx_base:log("NODE_CARD", sql_update)
ngx.log(ngx.ERR, "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
return
end
-- SET yesterday's balance
local sql_update = [[UPDATE node_card SET card_lbal_amt = card_cbal_amt, card_lbal_count = card_cbal_count]]
local res, err, errcode, sqlstate = db:query(sql_update)
ngx.log(ngx.NOTICE, sql_update)
if not res then
zx_base:log("S", "[NODE_CARD]:", "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
zx_base:log("NODE_CARD", sql_update)
ngx.log(ngx.ERR, "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
return
end
-- INSERT INTO history table
local sql_insert = string.format([[INSERT INTO node_card_his SELECT * FROM node_card WHERE DATE(`create_time`) < DATE('%s')]], os.date("%Y%m%d%H%M%S"))
local sql_insert = string.format([[INSERT INTO node_card_his SELECT * FROM node_card ]]..
[[WHERE DATE(`create_time`) < DATE('%s')]],
os.date("%Y%m%d%H%M%S", total_time - 24 * 60 * 60))
ngx.log(ngx.NOTICE, sql_insert)
local res, err, errcode, sqlstate = db:query(sql_insert)
if not res then
zx_base:log("S", "[NODE_CARD]:", "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
zx_base:log("NODE_CARD", sql_insert)
ngx.log(ngx.ERR, "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
return
end
-- DELETE current tables record
local sql_delete = string.format([[DELETE FROM node_card WHERE DATE(`create_time`) < DATE('%s')]], os.date("%Y%m%d%H%M%S"))
local sql_delete = string.format([[DELETE FROM node_card WHERE DATE(`create_time`) < DATE('%s')]],
os.date("%Y%m%d%H%M%S", total_time - 24 * 60 * 60 ))
ngx.log(ngx.NOTICE, sql_delete)
local res, err, errcode, sqlstate = db:query(sql_delete)
if not res then
zx_base:log("S", "[NODE_CARD]:", "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
zx_base:log("NODE_CARD", sql_delete)
ngx.log(ngx.ERR, "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
return
end
ngx.log(ngx.NOTICE, "-----------------------> END")
zx_base:close_db(db)
end
local function async(i)
local function async(i, total_time)
local co = coroutine.wrap(
function()
card_sql(i)
card_sql(i, total_time)
end
)
table.insert(tasks, co)
......@@ -108,12 +112,13 @@ local function dispatch()
end
end
function _NC.run()
local dbs_st = zx_base:db_read(db_conf)
function NODE_CARD.run(self, total_time)
-- -- local dbs_st = zx_base:db_read(db_conf)
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i])
-- async(dbs_st.tk_biz[i])
card_sql(dbs_st.tk_biz[i], total_time)
end
dispatch()
end
return _NC
return NODE_CARD
......@@ -21,7 +21,7 @@ local function chgrule_sql(db_st)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -34,7 +34,7 @@ local function chgrule_sql(db_st)
}
if not ok then
zx_base:log("S", "[NODE_CHGRULE]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_CHGRULE]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -81,7 +81,7 @@ local function dispatch()
end
function _CR.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i])
end
......
......@@ -6,6 +6,7 @@ local NODE_CS = {}
local mysql = loadmod("resty.mysql")
local zx_base = loadmod('zx_base')
local db_conf = "tk7_dbs.json"
local MODULE = "S"
local tasks = {}
......@@ -15,11 +16,11 @@ local function cs_sql(db_st, interval)
local db, err = mysql:new()
if not db then
zx_base:log("S", "[CS]:", "failed to instantiate mysql: ", err)
zx_base:log(MODULE, "[CS]:", "failed to instantiate mysql: ", err)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -32,7 +33,7 @@ local function cs_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_CS]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log(MODULE, "[NODE_CS]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -43,8 +44,8 @@ local function cs_sql(db_st, interval)
local res, err, errcode, sqlstate = db:query(sql_update)
if not res then
zx_base:log("S", "[NODE_CS]:", "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
zx_base:log("NODE_CS", sql_update)
zx_base:log(MODULE, "[NODE_CS]:", "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
zx_base:log(MODULE, "[NODE_CS]", sql_update)
return
end
......@@ -57,8 +58,8 @@ local function cs_sql(db_st, interval)
local res, err, errcode, sqlstate = db:query(sql_delete)
if not res then
zx_base:log("S", "[NODE_CS]:", "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
zx_base:log("NODE_CS", sql_delete)
zx_base:log(MODULE, "[NODE_CS]:", "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
zx_base:log(MODULE, "[NODE_CS]", sql_delete)
return
end
......@@ -99,10 +100,11 @@ local function dispatch()
end
function NODE_CS.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
cs_sql(dbs_st.tk_biz[i], interval)
-- async(dbs_st.tk_biz[i], interval)
end
dispatch()
end
......
......@@ -21,7 +21,7 @@ local function csdetail_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -34,7 +34,7 @@ local function csdetail_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_CSDETAIL]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_CSDETAIL]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -96,7 +96,7 @@ local function dispatch()
end
function _CSDETAIL.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
......
......@@ -19,7 +19,7 @@ local function ms_sql(db_st)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -32,7 +32,7 @@ local function ms_sql(db_st)
}
if not ok then
zx_base:log("S", "[NODE_MS]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_MS]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -79,7 +79,7 @@ local function dispatch()
end
function _MS.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i])
end
......
......@@ -21,7 +21,7 @@ local function payment_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -34,7 +34,7 @@ local function payment_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_PAYMENT]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_PAYMENT]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -96,7 +96,7 @@ local function dispatch()
end
function _PAYMENT.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
......
......@@ -20,7 +20,7 @@ local function psb_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -33,7 +33,7 @@ local function psb_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_PSB]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_PSB]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -97,7 +97,7 @@ end
function _PSB.run()
local zx_base = loadmod('zx_base')
local json = loadmod('cjson')
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
......
......@@ -20,7 +20,7 @@ local function psbdetail_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -33,7 +33,7 @@ local function psbdetail_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_PSBDETAIL]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_PSBDETAIL]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -97,7 +97,7 @@ end
function _PSBDETAIL.run()
local zx_base = loadmod('zx_base')
local json = loadmod('cjson')
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
......
......@@ -20,7 +20,7 @@ local function rchg_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -33,7 +33,7 @@ local function rchg_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_RCHG]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_RCHG]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -92,7 +92,7 @@ local function dispatch()
end
function _RCHG.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3
for i = 1, #dbs_st.tk_biz do
......
......@@ -20,7 +20,7 @@ local function rchgdetail_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -33,7 +33,7 @@ local function rchgdetail_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_RCHGDETAIL]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_RCHGDETAIL]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -95,7 +95,7 @@ local function dispatch()
end
function _RCHGDETAIL.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
......
......@@ -21,7 +21,7 @@ local function saledetail_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -34,7 +34,7 @@ local function saledetail_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_SALEDETAIL]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_SALEDETAIL]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -96,7 +96,7 @@ local function dispatch()
end
function _SALEDETAIL.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
......
......@@ -19,7 +19,7 @@ local function saleorder_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -32,7 +32,7 @@ local function saleorder_sql(db_st, interval)
}
if not ok then
zx_base:log(MODULE, "[NODE_SALEORDER]", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log(MODULE, "[NODE_SALEORDER]", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -96,7 +96,7 @@ local function dispatch()
end
function _SALEORDER.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
......
......@@ -21,7 +21,7 @@ local function shift_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -34,7 +34,7 @@ local function shift_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_SHIFT]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_SHIFT]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -96,7 +96,7 @@ local function dispatch()
end
function _SHIFT.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
......
......@@ -21,7 +21,7 @@ local function sku_sql(db_st)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -34,7 +34,7 @@ local function sku_sql(db_st)
}
if not ok then
zx_base:log("S", "[NODE_SKU]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_SKU]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -82,7 +82,7 @@ local function dispatch()
end
function _SKU.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i])
end
......
......@@ -21,7 +21,7 @@ local function sms_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -34,7 +34,7 @@ local function sms_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_SMS]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_SMS]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -96,7 +96,7 @@ local function dispatch()
end
function _SMS.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
......
......@@ -21,7 +21,7 @@ local function smsvip_sql(db_st, interval)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -34,7 +34,7 @@ local function smsvip_sql(db_st, interval)
}
if not ok then
zx_base:log("S", "[NODE_SMSVIP]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_SMSVIP]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -96,7 +96,7 @@ local function dispatch()
end
function _SMSVIP.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local interval = 3 -- the month interval
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], interval)
......
local _NT = {}
local NODE_TICKET = {}
local mysql = loadmod("resty.mysql")
local mysql = loadmod("resty.mysql")
local zx_base = loadmod('zx_base')
local db_conf = "tk7_dbs.json"
local M = string.format("%-16s", "<NODE_TICKET>")
local tasks = {}
local db_conf = "tk7_dbs.json"
local function ticket_sql(db_st)
local log = ngx.log
local ERR = ngx.ERR
local function ticket_sql(db_st, total_time)
ngx.log(ngx.NOTICE, "-----------------------> START")
local db, err = mysql:new()
if not db then
zx_base:log("S", "[TICKET]:", "failed to instantiate mysql: ", err)
ngx.log(ngx.ERR, "failed to instantiate mysql: ", err)
return false
end
db:SET_timeout(1000) -- 1 sec
db:set_timeout(1000) -- 1 sec
local ok, err, errcode, sqlstate = db:connect{
host = db_st['host'],
......@@ -33,46 +30,52 @@ local function ticket_sql(db_st)
}
if not ok then
zx_base:log("S", "[NODE_TICKET]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
ngx.log(ngx.ERR, err, ": ", errcode, " ", sqlstate)
return
end
-- DELETE invalid rows
-- local sql_delete = [[DELETE FROM node_ticket WHERE (ticket_status != 0 AND ticket_status !=1) or now() > ticket_exp]]
local sql_update = [[UPDATE node_ticket SET ticket_status = 8 WHERE now() > ticket_exp]]
ngx.log(ngx.NOTICE, sql_update)
local res, err, errcode, sqlstate = db:query(sql_update)
if not res then
zx_base:log("S", "[NODE_TICKET]:", "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
zx_base:log("NODE_TICKET", sql_update)
ngx.log(ngx.ERR, "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
return
end
-- INSERT INTO history table
local sql_insert = string.format([[INSERT INTO node_ticket_his SELECT * FROM node_ticket WHERE DATE(`create_time`) < DATE('%s')]], os.date("%Y%m%d%H%M%S"))
local sql_insert = string.format([[INSERT INTO node_ticket_his SELECT * FROM node_ticket WHERE ]]..
[[DATE(`create_time`) < DATE('%s')]],
os.date("%Y%m%d%H%M%S", total_time - 24 * 60 * 60))
ngx.log(ngx.NOTICE, sql_insert)
local res, err, errcode, sqlstate = db:query(sql_insert)
if not res then
zx_base:log("S", "[NODE_TICKET]:", "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
zx_base:log("NODE_TICKET", sql_insert)
ngx.log(ngx.ERR, "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
return
end
-- DELETE current tables record
local sql_delete = string.format([[DELETE FROM node_ticket WHERE DATE(`create_time`) < DATE('%s')]], os.date("%Y%m%d%H%M%S"))
local sql_delete = string.format([[DELETE FROM node_ticket WHERE DATE(`create_time`) < DATE('%s')]],
os.date("%Y%m%d%H%M%S", total_time - 24 * 60 * 60))
ngx.log(ngx.NOTICE, sql_delete)
local res, err, errcode, sqlstate = db:query(sql_delete)
if not res then
zx_base:log("S", "[NODE_TICKET]:", "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
zx_base:log("NODE_TICKET", sql_delete)
ngx.log(ngx.ERR, "bad result: ", err, ": ", errcode, ": ", sqlstate, ".")
return
end
ngx.log(ngx.NOTICE, "-----------------------> END")
zx_base:close_db(db)
end
local function async(i)
local function async(i, total_time)
local co = coroutine.wrap(
function()
ticket_sql(i)
ticket_sql(i, total_time)
end
)
table.insert(tasks, co)
......@@ -98,14 +101,14 @@ local function dispatch()
end
end
function _NT.run()
local zx_base = loadmod('zx_base')
local json = loadmod('cjson')
local dbs_st = zx_base:db_read(db_conf)
function NODE_TICKET.run(self, total_time)
-- local json = loadmod('cjson')
-- -- local dbs_st = zx_base:db_read(db_conf)
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i])
-- async(dbs_st.tk_biz[i])
ticket_sql(dbs_st.tk_biz[i], total_time)
end
dispatch()
end
return _NT
return NODE_TICKET
......@@ -46,7 +46,7 @@ local function vipacct_sql(db_st)
charset = 'utf8'
}
if not ok then
zx_base:log("S", "[NODE_VIPACCT]:", "failed to connect: ", err, ": ", errcode, " ", sqlstate)
zx_base:log("S", "[NODE_VIPACCT]:", err, ": ", errcode, " ", sqlstate)
return
end
......@@ -136,7 +136,7 @@ end
function _VIPACCT.run()
local zx_base = loadmod('zx_base')
local json = loadmod('cjson')
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i])
end
......
-- Settle modules
local zx_base = loadmod('zx_base')
-- local node_asb = loadmod('node_asb')
-- local node_asbdetail = loadmod('node_asbdetail')
-- local node_card = loadmod('node_card')
local node_card = loadmod('node_card')
-- local node_chgrule = loadmod('node_chgrule')
-- local node_cs = loadmod('node_cs')
-- local node_csdetail = loadmod('node_csdetail')
......@@ -17,47 +18,58 @@
-- local node_sku = loadmod('node_sku')
-- local node_sms = loadmod('node_sms')
-- local node_smsvip = loadmod('node_smsvip')
-- local node_ticket = loadmod('node_ticket')
local node_ticket = loadmod('node_ticket')
-- local node_vipacct = loadmod('node_vipacct')
local tk_sdt = loadmod('tk_sdt')
local tk_sync = loadmod('tk_sync')
local delay = 5 -- delaytime
local interval_time = '1500' -- time to run, here is 12:00 for each day
local interval_time = '0100' -- time to run, here is 12:00 for each day
-- local settledate = "2018-08-16"
local settledate = os.date('%Y-%m-%d', os.time())
local settletime = zx_base:date2time(settledate)
local handler
handler = function(premature, interval_time)
handler = function(premature, interval_time, settletime)
if not premature then
local nowtime = os.date("%H%M")
if nowtime == interval_time then
-- settle features start
-- node_asb: run()
-- node_asbdetail: run()
-- node_card: run()
-- node_chgrule: run()
-- node_cs: run()
-- node_csdetail: run()
-- node_ms: run()
-- node_payment: run()
-- node_psb: run()
-- node_psbdetail: run()
-- node_rchg: run()
-- node_rchgdetail: run()
-- node_saledetail: run()
-- node_saleorder: run()
-- node_shift: run()
-- node_sku: run()
-- node_sms: run()
-- node_smsvip: run()
-- node_ticket: run()
-- node_vipacct: run()
tk_sdt: run()
-- node_asb: run()
-- node_asbdetail: run()
-- node_chgrule: run()
-- node_cs: run()
-- node_csdetail: run()
-- node_ms: run()
-- node_payment: run()
-- node_psb: run()
-- node_psbdetail: run()
-- node_rchg: run()
-- node_rchgdetail: run()
-- node_saledetail: run()
-- node_saleorder: run()
-- node_shift: run()
-- node_sku: run()
-- node_sms: run()
-- node_smsvip: run()
-- node_vipacct: run()
tk_sync: run()
node_card: run(settletime)
node_ticket: run(settletime)
tk_sdt: run(settletime)
-- reset interval_time
interval_time = tostring(tonumber(interval_time) - 1)
-- reset settle time
settledate = os.date('%Y-%m-%d', os.time())
settletime = zx_base:date2time(settledate)
end
local ok, err = ngx.timer.at(delay, handler, interval_time)
local ok, err = ngx.timer.at(delay, handler, interval_time, settletime)
if not ok then
ngx.log(ngx.ERR, "failed to create the timer:", err)
return
......@@ -66,9 +78,45 @@ handler = function(premature, interval_time)
end
if ngx.worker.id() == 1 then
local ok, err = ngx.timer.at(delay, handler, interval_time)
local ok, err = ngx.timer.at(delay, handler, interval_time, settletime)
if not ok then
ngx.log(ngx.ERR, "failed to create the timer:", err)
return
end
end
local SETTLE = {}
function SETTLE.run()
local args = ngx.req.get_uri_args()
for k, v in pairs(args) do
if k == "total_date" then
local t = zx_base:date2time(v)
-- settle features start
-- node_asb: run()
-- node_asbdetail: run()
-- node_chgrule: run()
-- node_cs: run()
-- node_csdetail: run()
-- node_ms: run()
-- node_payment: run()
-- node_psb: run()
-- node_psbdetail: run()
-- node_rchg: run()
-- node_rchgdetail: run()
-- node_saledetail: run()
-- node_saleorder: run()
-- node_shift: run()
-- node_sku: run()
-- node_sms: run()
-- node_smsvip: run()
-- node_vipacct: run()
tk_sync: run()
node_card: run(t)
node_ticket: run(t)
tk_sdt: run(t)
end
end
end
return SETTLE
local TK_SDT = {}
local MODULE="S" -- Settle
-- 加载模块
local mysql = loadmod("resty.mysql")
local zx_base = loadmod("zx_base")
local json = loadmod('cjson')
local db_conf = "tk7_dbs.json"
-- 协程组
......@@ -18,18 +16,18 @@ local tasks = {}
-- table tk_control 总控机数据库对象
-- table tk_database 数据同步数据库名
-- @return nil
local function sdt_sql(tk_biz, tk_control)
zx_base:log(MODULE, "-----------------------> START[TK_SDT]")
local function sdt_sql(tk_biz, tk_control, total_time)
ngx.log(ngx.NOTICE, "-----------------------> START")
-- 新建mysql连接
local db_biz, err = mysql:new()
if not db_biz then
zx_base:log(MODULE, "[TK_SDT]", "failed to instantiate mysql: ", err)
ngx.log(ngx.ERR, "failed to instantiate mysql: ", err)
return false
end
-- 超时设置
db_biz:set_timeout(1000) -- 1 sec
db_biz:set_timeout(1000)
-- 连接tk_biz
local ok, err, errcode, sqlstate = db_biz:connect{
......@@ -42,19 +40,19 @@ local function sdt_sql(tk_biz, tk_control)
charset = 'utf8'
}
if not ok then
zx_base:log(MODULE, "[TK_SDT]", "failed to connect:", json.encode(tk_biz), ":", errcode, sqlstate)
ngx.log(ngx.ERR, json.encode(tk_biz), ":", err, errcode, sqlstate)
return
end
-- 新建mysql连接
local db_control, err = mysql:new()
if not db_control then
zx_base:log(MODULE, "[TK_SDT]", "failed to instantiate mysql: ", err)
ngx.log(ngx.ERR, "failed to instantiate mysql: ", err)
return false
end
-- 超时设置
db_control:set_timeout(1000) -- 1 sec
db_control:set_timeout(1000)
-- 连接tk_control
local ok, err, errcode, sqlstate = db_control:connect{
......@@ -67,427 +65,441 @@ local function sdt_sql(tk_biz, tk_control)
charset = 'utf8'
}
if not ok then
zx_base:log(MODULE, "[TK_SDT]", "failed to connect:", json.encode(tk_control), ":", errcode, sqlstate)
ngx.log(ngx.ERR, json.encode(tk_control), ":", err, errcode, sqlstate)
return
end
-- GET shop_map_id list
local shops
local sql_select = 'SELECT DISTINCT shop_map_id FROM node_saleorder UNION SELECT DISTINCT shop_map_id FROM node_rchg'
local sql_select = 'SELECT DISTINCT shop_map_id FROM node_saleorder UNION SELECT DISTINCT shop_map_id FROM node_rchg;'
shops, err, errcode, sqlstate = db_biz:query(sql_select)
ngx.log(ngx.NOTICE, sql_select)
if not shops then
zx_base:log("S", "[TK_SDT]", "failed to query:", json.encode(tk_biz), ":", err, ":", errcode, ":", sqlstate, ".")
zx_base:log("S", "[TK_SDT]", sql_select)
ngx.log(ngx.ERR, "failed to query:", json.encode(tk_biz), ":", err, ":", errcode, ":", sqlstate, ".")
return
end
for i=1, #shops do
local shop = shops[i]
local res
-- CHECK if exists
local sql = string.format(
[[SELECT * FROM tk_sdt WHERE DATE(total_date) = DATE('%s') ]]..
[[AND shop_map_id = %s]],
os.date('%Y%m%d',os.time()),
tostring(shop.shop_map_id))
res, err, errcode, sqlstate = db_biz:query(sql)
if not res then
zx_base:log("S", "[TK_SDT]", "failed to connect:", json.encode(tk_biz), ":", err, ":", errcode, ":", sqlstate, ".")
zx_base:log("S", "[TK_SDT]", sql)
return
end
if #res ~= 0 then
zx_base:log("S", "[TK_SDT]", "finished already")
return
end
-- GET summary
sql = string.format(
[[SELECT op_map_id, mer_map_id, shop_map_id, city_county_id, ]]..
[[IFNULL(COUNT(*), 0) t_order_cnt, ]]..
[[IFNULL(SUM(amt_pay), 0) t_order_amt, ]]..
[[IFNULL(SUM(amt_profit), 0) t_order_profit, ]]..
[[IFNULL(SUM(amt_point_num), 0) t_point_use_cnt, ]]..
[[IFNULL(SUM(amt_point), 0) t_point_use_amt, ]]..
[[IFNULL(SUM(amt_ticket_num), 0) t_ticket_use_cnt, ]]..
[[IFNULL(SUM(amt_ticket), 0) t_ticket_use_amt ]]..
[[FROM node_saleorder ]]..
[[WHERE date(`create_time`) = date('%s') ]]..
[[AND shop_map_id = %s ]]..
[[GROUP BY op_map_id, mer_map_id, shop_map_id, city_county_id;]],
os.date("%Y%m%d", os.time()-24*60*60),
tostring(shop.shop_map_id))
-- GET online records
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) t_order_on_cnt, IFNULL(SUM(amt_pay), 0) t_order_on_amt ]]..
[[FROM node_saleorder ]]..
[[WHERE date(`create_time`) = date('%s') ]]..
[[AND shop_map_id = %s ]]..
[[AND order_source > 0 ]]..
[[GROUP BY op_map_id, mer_map_id, shop_map_id, city_county_id;]],
os.date("%Y%m%d", os.time()-24*60*60),
tostring(shop.shop_map_id))
-- GET VIP/NOVIP records
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) t_order_vip_cnt, IFNULL(SUM(amt_pay), 0) t_order_vip_amt ]]..
[[FROM node_saleorder ]]..
[[WHERE date(`create_time`) = date('%s') ]]..
[[AND shop_map_id = %s ]]..
[[AND vip_map_id != 0 ]]..
[[GROUP BY op_map_id, mer_map_id, shop_map_id, city_county_id;]],
os.date("%Y%m%d", os.time()-24*60*60),
tostring(shop.shop_map_id))
-- GET MS records
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) t_order_ms_cnt ]]..
[[FROM node_saleorder ]]..
[[WHERE date(`create_time`) = date('%s') ]]..
[[AND shop_map_id = %s ]]..
[[AND AMT_PROMOTE != 0 ]]..
[[GROUP BY op_map_id, mer_map_id, shop_map_id, city_county_id;]],
os.date("%Y%m%d", os.time()-24*60*60),
tostring(shop.shop_map_id))
-- GET 0000-0900 order
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_0009, IFNULL(SUM(amt_pay), 0) time_amt_0009 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d000000', os.time()),
os.date('%Y%m%d090000', os.time()))
-- GET 0900-1100 order
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_0911, IFNULL(SUM(amt_pay), 0) time_amt_0911 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d090000', os.time()),
os.date('%Y%m%d110000', os.time()))
-- GET 1100-1300 order
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_1113, IFNULL(SUM(amt_pay), 0) time_amt_1113 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d110000', os.time()),
os.date('%Y%m%d130000', os.time()))
-- GET 1300-1500 order
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_1315, IFNULL(SUM(amt_pay), 0) time_amt_1315 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d130000', os.time()),
os.date('%Y%m%d150000', os.time()))
-- GET 1500-1700 order
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_1517, IFNULL(SUM(amt_pay), 0) time_amt_1517 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d150000', os.time()),
os.date('%Y%m%d170000', os.time()))
-- GET 1700-1900 order
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_1719, IFNULL(SUM(amt_pay), 0) time_amt_1719 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d170000', os.time()),
os.date('%Y%m%d190000', os.time()))
-- GET 1900-2100 order
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_1921, IFNULL(SUM(amt_pay), 0) time_amt_1921 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d190000', os.time()),
os.date('%Y%m%d210000', os.time()))
-- GET 2100-2400 order
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_2124, IFNULL(SUM(amt_pay), 0) time_amt_2124 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d210000', os.time()),
os.date('%Y%m%d235959', os.time()))
-- GET VIP cnt
sql = sql..string.format(
[[SELECT IFNULL(COUNT(vip_map_id), 0) t_vip_cnt ]]..
[[FROM node_vipacct ]]..
[[WHERE shop_map_id IN ]]..
[[(SELECT shop_map_id FROM tk_shop ]]..
[[WHERE shop_grp_id IN ]]..
[[(SELECT shop_grp_id FROM node_shopgrp ]]..
[[WHERE mer_map_id = (SELECT mer_map_id FROM tk_shop WHERE shop_map_id = %s)));]],
tostring(shop['shop_map_id']))
-- GET VIP new cnt
sql = sql..string.format(
[[SELECT IFNULL(COUNT(vip_map_id), 0) t_vip_newcnt ]]..
[[FROM node_vipacct ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND shop_map_id IN ]]..
[[(SELECT shop_map_id FROM tk_shop ]]..
[[WHERE shop_grp_id IN ]]..
[[(SELECT shop_grp_id FROM node_shopgrp ]]..
[[WHERE mer_map_id = (SELECT mer_map_id FROM tk_shop WHERE shop_map_id = %s)));]],
os.date("%Y%m%d", os.time()-24*60*60),
tostring(shop['shop_map_id']))
-- GET charge summary
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) t_charge_cnt, IFNULL(SUM(pay_amt), 0) t_charge_amt ]]..
[[FROM node_rchg ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND shop_map_id = %s]],
os.date("%Y%m%d", os.time()-24*60*60),
tostring(shop.shop_map_id))
-- GET cash summary
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) pay_cash_cnt, IFNULL(SUM(pay_amt), 0) pay_cash_amt ]]..
[[FROM node_payment ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND pay_type_id = 1 ]].. -- paytype
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", os.time()-24*60*60),
tostring(shop.shop_map_id))
-- GET WeiXin summary
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) pay_wx_cnt, IFNULL(SUM(pay_amt), 0) pay_wx_amt ]]..
[[FROM node_payment ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND pay_type_id = 2 ]].. -- paytype
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", os.time()-24*60*60),
tostring(shop.shop_map_id))
-- GET AliPay summary
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) pay_alipay_cnt, IFNULL(SUM(pay_amt), 0) pay_alipay_amt ]]..
[[FROM node_payment ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND pay_type_id = 3 ]].. -- paytype
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", os.time()-24*60*60),
tostring(shop.shop_map_id))
-- GET bank summary
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) pay_bank_cnt, IFNULL(SUM(pay_amt), 0) pay_bank_amt ]]..
[[FROM node_payment ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND pay_type_id = 4 ]].. -- paytype
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", os.time()-24*60*60),
tostring(shop.shop_map_id))
-- GET vipcard summary
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) pay_vipcard_cnt, IFNULL(SUM(pay_amt), 0) pay_vipcard_amt ]]..
[[FROM node_payment ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND (pay_type_id = 5 OR pay_type_id = 6) ]].. -- paytype
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", os.time()-24*60*60),
tostring(shop.shop_map_id))
-- GET othpay summary
sql = sql..string.format(
[[SELECT IFNULL(COUNT(*), 0) pay_othpay_cnt, IFNULL(SUM(pay_amt), 0) pay_vipcard_amt ]]..
[[FROM node_payment ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND pay_type_id = 9 ]].. -- paytype
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", os.time()-24*60*60),
tostring(shop.shop_map_id))
res, err, errcode, sqlstate = db_biz:query(sql)
if not res then
zx_base:log("S", "[TK_SDT]", "failed to query:", json.encode(tk_biz), ":", err, ":", errcode, ":", sqlstate, ".")
zx_base:log("S", "[TK_SDT]", sql)
return
end
if #res ~= 0 then
for k, v in pairs(res[1]) do
shop[k] = v
end
end
while err == "again" do
res, err, errcode, sqlstate = db_biz:read_result()
for i=1, #shops do
while true do
local shop
local sql = {}
local res
shop = shops[i]
-- GET summary
table.insert(sql, string.format(
[[SELECT op_map_id, mer_map_id, shop_map_id, city_county_id, ]]..
[[IFNULL(COUNT(*), 0) t_order_cnt, ]]..
[[IFNULL(SUM(amt_pay), 0) t_order_amt, ]]..
[[IFNULL(SUM(amt_profit), 0) t_order_profit, ]]..
[[IFNULL(SUM(amt_point_num), 0) t_point_use_cnt, ]]..
[[IFNULL(SUM(amt_point), 0) t_point_use_amt, ]]..
[[IFNULL(SUM(amt_ticket_num), 0) t_ticket_use_cnt, ]]..
[[IFNULL(SUM(amt_ticket), 0) t_ticket_use_amt ]]..
[[FROM node_saleorder ]]..
[[WHERE date(`create_time`) = date('%s') ]]..
[[AND order_status = 0 ]]..
[[AND shop_map_id = %s ]]..
[[GROUP BY op_map_id, mer_map_id, shop_map_id, city_county_id;]],
os.date("%Y%m%d", total_time-24*60*60),
tostring(shop.shop_map_id))
)
-- GET online records
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) t_order_on_cnt, IFNULL(SUM(amt_pay), 0) t_order_on_amt ]]..
[[FROM node_saleorder ]]..
[[WHERE date(`create_time`) = date('%s') ]]..
[[AND shop_map_id = %s ]]..
[[AND order_source > 0 ]]..
[[GROUP BY op_map_id, mer_map_id, shop_map_id, city_county_id;]],
os.date("%Y%m%d", total_time-24*60*60),
tostring(shop.shop_map_id))
)
-- GET VIP/NOVIP records
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) t_order_vip_cnt, IFNULL(SUM(amt_pay), 0) t_order_vip_amt ]]..
[[FROM node_saleorder ]]..
[[WHERE date(`create_time`) = date('%s') ]]..
[[AND shop_map_id = %s ]]..
[[AND vip_map_id != 0 ]]..
[[GROUP BY op_map_id, mer_map_id, shop_map_id, city_county_id;]],
os.date("%Y%m%d", total_time-24*60*60),
tostring(shop.shop_map_id))
)
-- GET MS records
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) t_order_ms_cnt ]]..
[[FROM node_saleorder ]]..
[[WHERE date(`create_time`) = date('%s') ]]..
[[AND shop_map_id = %s ]]..
[[AND AMT_PROMOTE != 0 ]]..
[[GROUP BY op_map_id, mer_map_id, shop_map_id, city_county_id;]],
os.date("%Y%m%d", total_time-24*60*60),
tostring(shop.shop_map_id))
)
-- GET 0000-0900 order
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_0009, IFNULL(SUM(amt_pay), 0) time_amt_0009 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d000000', total_time),
os.date('%Y%m%d090000', total_time))
)
-- GET 0900-1100 order
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_0911, IFNULL(SUM(amt_pay), 0) time_amt_0911 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d090000', total_time),
os.date('%Y%m%d110000', total_time))
)
-- GET 1100-1300 order
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_1113, IFNULL(SUM(amt_pay), 0) time_amt_1113 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d110000', total_time),
os.date('%Y%m%d130000', total_time))
)
-- GET 1300-1500 order
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_1315, IFNULL(SUM(amt_pay), 0) time_amt_1315 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d130000', total_time),
os.date('%Y%m%d150000', total_time))
)
-- GET 1500-1700 order
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_1517, IFNULL(SUM(amt_pay), 0) time_amt_1517 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d150000', total_time),
os.date('%Y%m%d170000', total_time))
)
-- GET 1700-1900 order
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_1719, IFNULL(SUM(amt_pay), 0) time_amt_1719 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d170000', total_time),
os.date('%Y%m%d190000', total_time))
)
-- GET 1900-2100 order
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_1921, IFNULL(SUM(amt_pay), 0) time_amt_1921 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d190000', total_time),
os.date('%Y%m%d210000', total_time))
)
-- GET 2100-2400 order
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) time_cnt_2124, IFNULL(SUM(amt_pay), 0) time_amt_2124 ]]..
[[FROM node_saleorder ]]..
[[WHERE shop_map_id = %s ]]..
[[AND `create_time` > '%s' AND `create_time` < '%s'; ]],
tostring(shop.shop_map_id),
os.date('%Y%m%d210000', total_time),
os.date('%Y%m%d235959', total_time))
)
-- get VIP cnt
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(vip_map_id), 0) t_vip_cnt ]]..
[[FROM node_vipacct ]]..
[[WHERE shop_map_id IN ]]..
[[(SELECT shop_map_id FROM tk_shop ]]..
[[WHERE shop_grp_id IN ]]..
[[(SELECT shop_grp_id FROM node_shopgrp ]]..
[[WHERE mer_map_id = (SELECT mer_map_id FROM tk_shop WHERE shop_map_id = %s)));]],
tostring(shop['shop_map_id']))
)
-- GET VIP new cnt
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(vip_map_id), 0) t_vip_newcnt ]]..
[[FROM node_vipacct ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND shop_map_id IN ]]..
[[(SELECT shop_map_id FROM tk_shop ]]..
[[WHERE shop_grp_id IN ]]..
[[(SELECT shop_grp_id FROM node_shopgrp ]]..
[[WHERE mer_map_id = (SELECT mer_map_id FROM tk_shop WHERE shop_map_id = %s)));]],
os.date("%Y%m%d", total_time-24*60*60),
tostring(shop['shop_map_id']))
)
-- GET charge summary
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) t_charge_cnt, IFNULL(SUM(pay_amt), 0) t_charge_amt ]]..
[[FROM node_rchg ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", total_time-24*60*60),
tostring(shop.shop_map_id))
)
-- GET cash summary
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) pay_cash_cnt, IFNULL(SUM(pay_amt), 0) pay_cash_amt ]]..
[[FROM node_payment ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND pay_type_id = 1 ]].. -- paytype
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", total_time-24*60*60),
tostring(shop.shop_map_id))
)
-- GET WeiXin summary
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) pay_wx_cnt, IFNULL(SUM(pay_amt), 0) pay_wx_amt ]]..
[[FROM node_payment ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND pay_type_id = 2 ]].. -- paytype
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", total_time-24*60*60),
tostring(shop.shop_map_id))
)
-- GET AliPay summary
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) pay_alipay_cnt, IFNULL(SUM(pay_amt), 0) pay_alipay_amt ]]..
[[FROM node_payment ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND pay_type_id = 3 ]].. -- paytype
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", total_time-24*60*60),
tostring(shop.shop_map_id))
)
-- GET bank summary
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) pay_bank_cnt, IFNULL(SUM(pay_amt), 0) pay_bank_amt ]]..
[[FROM node_payment ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND pay_type_id = 4 ]].. -- paytype
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", total_time-24*60*60),
tostring(shop.shop_map_id))
)
-- GET vipcard summary
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) pay_vipcard_cnt, IFNULL(SUM(pay_amt), 0) pay_vipcard_amt ]]..
[[FROM node_payment ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND (pay_type_id = 5 OR pay_type_id = 6) ]].. -- paytype
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", total_time-24*60*60),
tostring(shop.shop_map_id))
)
-- GET othpay summary
table.insert(sql, string.format(
[[SELECT IFNULL(COUNT(*), 0) pay_othpay_cnt, IFNULL(SUM(pay_amt), 0) pay_othpay_amt ]]..
[[FROM node_payment ]]..
[[WHERE DATE(create_time) = DATE('%s') ]]..
[[AND pay_type_id = 9 ]].. -- paytype
[[AND shop_map_id = %s;]],
os.date("%Y%m%d", total_time-24*60*60),
tostring(shop.shop_map_id))
)
ngx.log(ngx.NOTICE, sql[1])
res, err, errcode, sqlstate = db_biz:query(table.concat(sql))
if not res then
zx_base:log(MODULE, "[TK_SDT]", "bad result #", i, ": ", err, ": ", errcode, ": ", sqlstate, ".")
return ngx.exit(500)
ngx.log(ngx.ERR, "failed to query:", json.encode(tk_biz), ":", err, ":", errcode, ":", sqlstate, ".")
return
end
if #res ~= 0 then
for k, v in pairs(res[1]) do
shop[k] = v
end
end
local j = 2
while err == "again" do
ngx.log(ngx.NOTICE, sql[j])
res, err, errcode, sqlstate = db_biz:read_result()
if not res then
ngx.log(ngx.ERR, "bad result #", j, ": ", err, ": ", errcode, ": ", sqlstate, ".")
return ngx.exit(500)
end
i = i + 1
if #res ~= 0 then
for k, v in pairs(res[1]) do
shop[k] = v
end
j = j + 1
end
end
end
-- SET total_date
shop['total_date'] = zx_base:tonumber(os.date('%Y%m%d', total_time))
-- INSERT INTO tk_sdt
local str = zx_base:sql_concate('duplicate', 'tk_sdt', shop)
-- Convert type
shop['op_map_id'] = zx_base:tonumber(shop['op_map_id'])
shop['mer_map_id'] = zx_base:tonumber(shop['mer_map_id'])
shop['shop_map_id'] = zx_base:tonumber(shop['shop_map_id'])
shop['total_date'] = zx_base:tonumber(shop['total_date'])
shop['city_county_id'] = zx_base:tonumber(shop['city_county_id'])
shop['t_order_cnt'] = zx_base:tonumber(shop['t_order_cnt'])
shop['t_order_amt'] = zx_base:tonumber(shop['t_order_amt'])
shop['t_order_on_cnt'] = zx_base:tonumber(shop['t_order_on_cnt'])
shop['t_order_on_amt'] = zx_base:tonumber(shop['t_order_on_amt'])
shop['t_order_off_cnt'] = zx_base:tonumber(shop['t_order_off_cnt'])
shop['t_order_off_amt'] = zx_base:tonumber(shop['t_order_off_amt'])
shop['t_order_vip_cnt'] = zx_base:tonumber(shop['t_order_vip_cnt'])
shop['t_order_vip_amt'] = zx_base:tonumber(shop['t_order_vip_amt'])
shop['t_order_novip_cnt'] = zx_base:tonumber(shop['t_order_novip_cnt'])
shop['t_order_novip_amt'] = zx_base:tonumber(shop['t_order_novip_amt'])
shop['t_order_ms_cnt'] = zx_base:tonumber(shop['t_order_ms_cnt'])
shop['t_order_avg_price'] = zx_base:tonumber(shop['t_order_avg_price'])
shop['t_order_profit'] = zx_base:tonumber(shop['t_order_profit'])
shop['t_order_profit_per'] = zx_base:tonumber(shop['t_order_profit_per'])
shop['t_vip_cnt'] = zx_base:tonumber(shop['t_vip_cnt'])
shop['t_vip_newcnt'] = zx_base:tonumber(shop['t_vip_newcnt'])
shop['t_charge_cnt'] = zx_base:tonumber(shop['t_charge_cnt'])
shop['t_charge_amt'] = zx_base:tonumber(shop['t_charge_amt'])
shop['t_point_use_cnt'] = zx_base:tonumber(shop['t_point_use_cnt'])
shop['t_point_use_amt'] = zx_base:tonumber(shop['t_point_use_amt'])
shop['t_ticket_use_cnt'] = zx_base:tonumber(shop['t_ticket_use_cnt'])
shop['t_ticket_use_amt'] = zx_base:tonumber(shop['t_ticket_use_amt'])
shop['t_point_send_cnt'] = zx_base:tonumber(shop['t_point_send_cnt'])
shop['t_point_send_amt'] = zx_base:tonumber(shop['t_point_send_amt'])
shop['t_ticket_send_cnt'] = zx_base:tonumber(shop['t_ticket_send_cnt'])
shop['t_ticket_send_amt'] = zx_base:tonumber(shop['t_ticket_send_amt'])
shop['pay_cash_cnt'] = zx_base:tonumber(shop['pay_cash_cnt'])
shop['pay_cash_amt'] = zx_base:tonumber(shop['pay_cash_amt'])
shop['pay_bank_cnt'] = zx_base:tonumber(shop['pay_bank_cnt'])
shop['pay_bank_amt'] = zx_base:tonumber(shop['pay_bank_amt'])
shop['pay_vipcard_cnt'] = zx_base:tonumber(shop['pay_vipcard_cnt'])
shop['pay_vipcard_amt'] = zx_base:tonumber(shop['pay_vipcard_amt'])
shop['pay_wx_cnt'] = zx_base:tonumber(shop['pay_wx_cnt'])
shop['pay_wx_amt'] = zx_base:tonumber(shop['pay_wx_amt'])
shop['pay_alipay_cnt'] = zx_base:tonumber(shop['pay_alipay_cnt'])
shop['pay_alipay_amt'] = zx_base:tonumber(shop['pay_alipay_amt'])
shop['pay_othpay_cnt'] = zx_base:tonumber(shop['pay_othpay_cnt'])
shop['pay_othpay_amt'] = zx_base:tonumber(shop['pay_othpay_amt'])
shop['time_cnt_0009'] = zx_base:tonumber(shop['time_cnt_0009'])
shop['time_amt_0009'] = zx_base:tonumber(shop['time_amt_0009'])
shop['time_avg_price_0009'] = zx_base:tonumber(shop['time_avg_price_0009'])
shop['time_profit_0009'] = zx_base:tonumber(shop['time_profit_0009'])
shop['time_profit_per_0009'] = zx_base:tonumber(shop['time_profit_per_0009'])
shop['time_cnt_0911'] = zx_base:tonumber(shop['time_cnt_0911'])
shop['time_amt_0911'] = zx_base:tonumber(shop['time_amt_0911'])
shop['time_avg_price_0911'] = zx_base:tonumber(shop['time_avg_price_0911'])
shop['time_profit_0911'] = zx_base:tonumber(shop['time_profit_0911'])
shop['time_profit_per_0911'] = zx_base:tonumber(shop['time_profit_per_0911'])
shop['time_cnt_1113'] = zx_base:tonumber(shop['time_cnt_1113'])
shop['time_amt_1113'] = zx_base:tonumber(shop['time_amt_1113'])
shop['time_avg_price_1113'] = zx_base:tonumber(shop['time_avg_price_1113'])
shop['time_profit_1113'] = zx_base:tonumber(shop['time_profit_1113'])
shop['time_profit_per_1113'] = zx_base:tonumber(shop['time_profit_per_1113'])
shop['time_cnt_1315'] = zx_base:tonumber(shop['time_cnt_1315'])
shop['time_amt_1315'] = zx_base:tonumber(shop['time_amt_1315'])
shop['time_avg_price_1315'] = zx_base:tonumber(shop['time_avg_price_1315'])
shop['time_profit_1315'] = zx_base:tonumber(shop['time_profit_1315'])
shop['time_profit_per_1315'] = zx_base:tonumber(shop['time_profit_per_1315'])
shop['time_cnt_1517'] = zx_base:tonumber(shop['time_cnt_1517'])
shop['time_amt_1517'] = zx_base:tonumber(shop['time_amt_1517'])
shop['time_avg_price_1517'] = zx_base:tonumber(shop['time_avg_price_1517'])
shop['time_profit_1517'] = zx_base:tonumber(shop['time_profit_1517'])
shop['time_profit_per_1517'] = zx_base:tonumber(shop['time_profit_per_1517'])
shop['time_cnt_1719'] = zx_base:tonumber(shop['time_cnt_1719'])
shop['time_amt_1719'] = zx_base:tonumber(shop['time_amt_1719'])
shop['time_avg_price_1719'] = zx_base:tonumber(shop['time_avg_price_1719'])
shop['time_profit_1719'] = zx_base:tonumber(shop['time_profit_1719'])
shop['time_profit_per_1719'] = zx_base:tonumber(shop['time_profit_per_1719'])
shop['time_cnt_1921'] = zx_base:tonumber(shop['time_cnt_1921'])
shop['time_amt_1921'] = zx_base:tonumber(shop['time_amt_1921'])
shop['time_avg_price_1921'] = zx_base:tonumber(shop['time_avg_price_1921'])
shop['time_profit_1921'] = zx_base:tonumber(shop['time_profit_1921'])
shop['time_profit_per_1921'] = zx_base:tonumber(shop['time_profit_per_1921'])
shop['time_cnt_2124'] = zx_base:tonumber(shop['time_cnt_2124'])
shop['time_amt_2124'] = zx_base:tonumber(shop['time_amt_2124'])
shop['time_avg_price_2124'] = zx_base:tonumber(shop['time_avg_price_2124'])
shop['time_profit_2124'] = zx_base:tonumber(shop['time_profit_2124'])
shop['time_profit_per_2124'] = zx_base:tonumber(shop['time_profit_per_2124'])
-- Calculate
shop['t_order_off_amt'] = shop['t_order_amt'] - shop['t_order_on_amt']
shop['t_order_off_cnt'] = shop['t_order_cnt'] - shop['t_order_on_cnt']
shop['t_order_novip_amt'] = shop['t_order_amt'] - shop['t_order_vip_amt']
shop['t_order_novip_cnt'] = shop['t_order_cnt'] - shop['t_order_vip_cnt']
if shop['t_order_amt'] == 0 or shop['t_order_cnt'] == 0 then
shop['t_order_avg_price'] = 0
shop['t_order_profit_per'] = 0
else
shop['t_order_avg_price'] = shop['t_order_amt'] / shop['t_order_cnt']
shop['t_order_profit_per'] = shop['t_order_profit'] / shop['t_order_amt'] * 10000
end
-- SET total_date
shop['total_date'] = zx_base:tonumber(os.date('%Y%m%d', os.time()))
-- Convert type
shop['op_map_id'] = zx_base:tonumber(shop['op_map_id'])
shop['mer_map_id'] = zx_base:tonumber(shop['mer_map_id'])
shop['shop_map_id'] = zx_base:tonumber(shop['shop_map_id'])
shop['total_date'] = zx_base:tonumber(shop['total_date'])
shop['city_county_id'] = zx_base:tonumber(shop['city_county_id'])
shop['t_order_cnt'] = zx_base:tonumber(shop['t_order_cnt'])
shop['t_order_amt'] = zx_base:tonumber(shop['t_order_amt'])
shop['t_order_on_cnt'] = zx_base:tonumber(shop['t_order_on_cnt'])
shop['t_order_on_amt'] = zx_base:tonumber(shop['t_order_on_amt'])
shop['t_order_off_cnt'] = zx_base:tonumber(shop['t_order_off_cnt'])
shop['t_order_off_amt'] = zx_base:tonumber(shop['t_order_off_amt'])
shop['t_order_vip_cnt'] = zx_base:tonumber(shop['t_order_vip_cnt'])
shop['t_order_vip_amt'] = zx_base:tonumber(shop['t_order_vip_amt'])
shop['t_order_novip_cnt'] = zx_base:tonumber(shop['t_order_novip_cnt'])
shop['t_order_novip_amt'] = zx_base:tonumber(shop['t_order_novip_amt'])
shop['t_order_ms_cnt'] = zx_base:tonumber(shop['t_order_ms_cnt'])
shop['t_order_avg_price'] = zx_base:tonumber(shop['t_order_avg_price'])
shop['t_order_profit'] = zx_base:tonumber(shop['t_order_profit'])
shop['t_order_profit_per'] = zx_base:tonumber(shop['t_order_profit_per'])
shop['t_vip_cnt'] = zx_base:tonumber(shop['t_vip_cnt'])
shop['t_vip_newcnt'] = zx_base:tonumber(shop['t_vip_newcnt'])
shop['t_charge_cnt'] = zx_base:tonumber(shop['t_charge_cnt'])
shop['t_charge_amt'] = zx_base:tonumber(shop['t_charge_amt'])
shop['t_point_use_cnt'] = zx_base:tonumber(shop['t_point_use_cnt'])
shop['t_point_use_amt'] = zx_base:tonumber(shop['t_point_use_amt'])
shop['t_ticket_use_cnt'] = zx_base:tonumber(shop['t_ticket_use_cnt'])
shop['t_ticket_use_amt'] = zx_base:tonumber(shop['t_ticket_use_amt'])
shop['t_point_send_cnt'] = zx_base:tonumber(shop['t_point_send_cnt'])
shop['t_point_send_amt'] = zx_base:tonumber(shop['t_point_send_amt'])
shop['t_ticket_send_cnt'] = zx_base:tonumber(shop['t_ticket_send_cnt'])
shop['t_ticket_send_amt'] = zx_base:tonumber(shop['t_ticket_send_amt'])
shop['pay_cash_cnt'] = zx_base:tonumber(shop['pay_cash_cnt'])
shop['pay_cash_amt'] = zx_base:tonumber(shop['pay_cash_amt'])
shop['pay_bank_cnt'] = zx_base:tonumber(shop['pay_bank_cnt'])
shop['pay_bank_amt'] = zx_base:tonumber(shop['pay_bank_amt'])
shop['pay_vipcard_cnt'] = zx_base:tonumber(shop['pay_vipcard_cnt'])
shop['pay_vipcard_amt'] = zx_base:tonumber(shop['pay_vipcard_amt'])
shop['pay_wx_cnt'] = zx_base:tonumber(shop['pay_wx_cnt'])
shop['pay_wx_amt'] = zx_base:tonumber(shop['pay_wx_amt'])
shop['pay_alipay_cnt'] = zx_base:tonumber(shop['pay_alipay_cnt'])
shop['pay_alipay_amt'] = zx_base:tonumber(shop['pay_alipay_amt'])
shop['pay_othpay_cnt'] = zx_base:tonumber(shop['pay_othpay_cnt'])
shop['pay_othpay_amt'] = zx_base:tonumber(shop['pay_othpay_amt'])
shop['time_cnt_0009'] = zx_base:tonumber(shop['time_cnt_0009'])
shop['time_amt_0009'] = zx_base:tonumber(shop['time_amt_0009'])
shop['time_avg_price_0009'] = zx_base:tonumber(shop['time_avg_price_0009'])
shop['time_profit_0009'] = zx_base:tonumber(shop['time_profit_0009'])
shop['time_profit_per_0009'] = zx_base:tonumber(shop['time_profit_per_0009'])
shop['time_cnt_0911'] = zx_base:tonumber(shop['time_cnt_0911'])
shop['time_amt_0911'] = zx_base:tonumber(shop['time_amt_0911'])
shop['time_avg_price_0911'] = zx_base:tonumber(shop['time_avg_price_0911'])
shop['time_profit_0911'] = zx_base:tonumber(shop['time_profit_0911'])
shop['time_profit_per_0911'] = zx_base:tonumber(shop['time_profit_per_0911'])
shop['time_cnt_1113'] = zx_base:tonumber(shop['time_cnt_1113'])
shop['time_amt_1113'] = zx_base:tonumber(shop['time_amt_1113'])
shop['time_avg_price_1113'] = zx_base:tonumber(shop['time_avg_price_1113'])
shop['time_profit_1113'] = zx_base:tonumber(shop['time_profit_1113'])
shop['time_profit_per_1113'] = zx_base:tonumber(shop['time_profit_per_1113'])
shop['time_cnt_1315'] = zx_base:tonumber(shop['time_cnt_1315'])
shop['time_amt_1315'] = zx_base:tonumber(shop['time_amt_1315'])
shop['time_avg_price_1315'] = zx_base:tonumber(shop['time_avg_price_1315'])
shop['time_profit_1315'] = zx_base:tonumber(shop['time_profit_1315'])
shop['time_profit_per_1315'] = zx_base:tonumber(shop['time_profit_per_1315'])
shop['time_cnt_1517'] = zx_base:tonumber(shop['time_cnt_1517'])
shop['time_amt_1517'] = zx_base:tonumber(shop['time_amt_1517'])
shop['time_avg_price_1517'] = zx_base:tonumber(shop['time_avg_price_1517'])
shop['time_profit_1517'] = zx_base:tonumber(shop['time_profit_1517'])
shop['time_profit_per_1517'] = zx_base:tonumber(shop['time_profit_per_1517'])
shop['time_cnt_1719'] = zx_base:tonumber(shop['time_cnt_1719'])
shop['time_amt_1719'] = zx_base:tonumber(shop['time_amt_1719'])
shop['time_avg_price_1719'] = zx_base:tonumber(shop['time_avg_price_1719'])
shop['time_profit_1719'] = zx_base:tonumber(shop['time_profit_1719'])
shop['time_profit_per_1719'] = zx_base:tonumber(shop['time_profit_per_1719'])
shop['time_cnt_1921'] = zx_base:tonumber(shop['time_cnt_1921'])
shop['time_amt_1921'] = zx_base:tonumber(shop['time_amt_1921'])
shop['time_avg_price_1921'] = zx_base:tonumber(shop['time_avg_price_1921'])
shop['time_profit_1921'] = zx_base:tonumber(shop['time_profit_1921'])
shop['time_profit_per_1921'] = zx_base:tonumber(shop['time_profit_per_1921'])
shop['time_cnt_2124'] = zx_base:tonumber(shop['time_cnt_2124'])
shop['time_amt_2124'] = zx_base:tonumber(shop['time_amt_2124'])
shop['time_avg_price_2124'] = zx_base:tonumber(shop['time_avg_price_2124'])
shop['time_profit_2124'] = zx_base:tonumber(shop['time_profit_2124'])
shop['time_profit_per_2124'] = zx_base:tonumber(shop['time_profit_per_2124'])
-- Calculate
shop['t_order_off_amt'] = shop['t_order_amt'] - shop['t_order_on_amt']
shop['t_order_off_cnt'] = shop['t_order_cnt'] - shop['t_order_on_cnt']
shop['t_order_novip_amt'] = shop['t_order_amt'] - shop['t_order_vip_amt']
shop['t_order_novip_cnt'] = shop['t_order_cnt'] - shop['t_order_vip_cnt']
if shop['t_order_amt'] == 0 or shop['t_order_cnt'] == 0 then
shop['t_order_avg_price'] = 0
shop['t_order_profit_per'] = 0
else
shop['t_order_avg_price'] = shop['t_order_amt'] / shop['t_order_cnt']
shop['t_order_profit_per'] = shop['t_order_profit'] / shop['t_order_amt'] * 10000
end
if shop['t_order_cnt'] == 0 then
break
end
-- INSERT INTO tk_biz database
res, err, errcode, sqlstate = db_biz:query(str)
ngx.log(ngx.NOTICE, str)
if not res then
ngx.log(ngx.ERR, "failed to query:", json.encode(tk_biz),
":", err, ":", errcode, ":", sqlstate, ".")
return
end
-- INSERT INTO tk_sdt
local str = zx_base:sql_concate('insert into', 'tk_sdt', shop)
-- INSERT INTO tk_control database
res, err, errcode, sqlstate = db_control:query(str)
ngx.log(ngx.NOTICE, str)
if not res then
ngx.log(ngx.ERR, "failed to query:", json.encode(tk_control),
":", err, ":", errcode, ":", sqlstate, ".")
return
end
-- INSERT INTO tk_biz database
res, err, errcode, sqlstate = db_biz:query(str)
if not res then
zx_base:log("S", "[TK_SDT]", "failed to query:", json.encode(tk_biz),
":", err, ":", errcode, ":", sqlstate, ".")
zx_base:log("S", "[TK_SDT]", str)
return
end
-- INSERT INTO tk_control database
res, err, errcode, sqlstate = db_control:query(str)
if not res then
zx_base:log("S", "[TK_SDT]", "failed to query:", json.encode(tk_control),
":", err, ":", errcode, ":", sqlstate, ".")
zx_base:log("S", "[TK_SDT]", str)
return
-- table.insert(shops, shop)
break
end
table.insert(shops, shop)
end
ngx.say(json.encode({shops=shops}))
zx_base:log(MODULE, "-----------------------> END[TK_SDT]")
zx_base:close_db(db_biz)
zx_base:close_db(db_control)
ngx.log(ngx.NOTICE, "-----------------------> END")
end
......@@ -497,16 +509,15 @@ end
-- table tk_control 总控机数据库对象
-- table tk_database 数据同步数据库名
-- @return nil
local function async(tk_biz, tk_control, tk_database)
local function async(tk_biz, tk_control, total_time)
local co = coroutine.wrap(
function()
sdt_sql(tk_biz, tk_control, tk_database)
sdt_sql(tk_biz, tk_control, total_time)
end
)
table.insert(tasks, co)
end
-- 协程调度
-- @param nil
-- @return nil
......@@ -529,16 +540,16 @@ local function dispatch()
end
end
-- 跑批业务处理
-- @param nil
-- @return nil
function TK_SDT.run()
local dbs_st = zx_base:db_read(db_conf)
function TK_SDT.run(self, total_time)
-- local dbs_st = zx_base:db_read(db_conf)
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], dbs_st.tk_control)
-- async(dbs_st.tk_biz[i], dbs_st.tk_control, total_time)
sdt_sql(dbs_st.tk_biz[i], dbs_st.tk_control, total_time)
end
dispatch()
-- dispatch()
end
return TK_SDT
......@@ -14,73 +14,66 @@ local tasks = {}
local function EOF()
zx_base:log(MODULE, "-----------------------> END[TK_SYNC]")
ngx.eof()
end
-- 表信息
-- @param table tk_biz 节点机数据库对象
-- table tk_control 总控机数据库对象
-- table tk_database 数据同步数据库名
-- table tk_table 数据同步表名
-- @return nil
local function sync_sql(tk_biz, tk_control, tk_database, tk_table)
zx_base:log(MODULE, "-----------------------> START[TK_SYNC]")
local function sync_sql(tk_biz, tk_control, tk_table)
ngx.log(ngx.NOTICE, "-----------------------> START")
-- 新建mysql连接
local db, err = mysql:new()
if not db then
zx_base:log(MODULE, "[TK_SYNC]", "failed to instantiate mysql: ", err)
ngx.log(ngx.ERR, "failed to instantiate mysql: ", err)
return false
end
db:set_timeout(1000) -- 1 sec
-- 连接节点机MySQL
local ok, err, errcode, sqlstate = db:connect{
host = tk_biz['host'],
port = tk_biz['port'],
database = tk_database,
database = tk_biz['database'],
user = tk_biz['user'],
password = tk_biz['password'],
timeout = tk_biz['timeout'],
charset = 'utf8'
}
if not ok then
zx_base:log(MODULE, "[TK_SYNC]", "failed to connect:", json.encode(tk_biz), ":",
err, ":", errcode, sqlstate)
ngx.log(ngx.ERR, json.encode(tk_biz), ":", err, errcode, sqlstate)
return
end
-- 查询节点机
local sql = string.format([[SELECT * FROM %s where update_time > %s]],
-- os.date("%Y%m%d000000", os.time()-24*60*60)
tk_table,
"20180716000000"
os.date("%Y%m%d000000", os.time()-24*60*60)
)
ngx.log(ngx.NOTICE, sql)
local syncs
syncs, err, errcode, sqlstate = db:query(sql)
if not syncs then
zx_base:log(MODULE, "[TK_SYNC]", sql)
zx_base:log(MODULE, "[TK_SYNC]", "failed to query:", json.encode(tk_biz), ":",
ngx.log(ngx.ERR, "failed to query:", json.encode(tk_biz), ":",
err, ":", errcode, ":", sqlstate, ".")
return
end
if #syncs == 0 then
ngx.say("no syncs found")
ngx.eof()
return
return "00", "SUCCESS"
end
-- 重置MySQL连接
zx_base:close_db(db)
db, err = mysql:new()
if not db then
zx_base:log(MODULE, "[TK_SYNC]", "failed to instantiate mysql: ", err)
return false
ngx.log(ngx.ERR, "failed to instantiate mysql: ", err)
return
end
db:set_timeout(1000)
-- 连接总控机MySQL
ok, err, errcode, sqlstate = db:connect{
host = tk_control['host'],
......@@ -92,7 +85,7 @@ local function sync_sql(tk_biz, tk_control, tk_database, tk_table)
charset = 'utf8'
}
if not ok then
zx_base:log(MODULE, "[TK_SYNC]", "failed to connect:", json.encode(tk_biz), ":", errcode, sqlstate)
ngx.log(ngx.ERR, json.encode(tk_control), ":", err, errcode, sqlstate)
return
end
......@@ -101,17 +94,15 @@ local function sync_sql(tk_biz, tk_control, tk_database, tk_table)
for i = 1, #syncs do
local sync = syncs[i]
local sql_result = zx_base:sql_concate("duplicate", tk_table, sync)
ngx.log(ngx.NOTICE, sql_result)
ok, err, errcode, sqlstate = db:query(sql_result)
if not ok then
zx_base:log(MODULE, "[TK_SYNC]", sql_result)
zx_base:log(MODULE, "[TK_SYNC]", "failed to query:", json.encode(tk_control), ":",
ngx.log(ngx.ERR, "failed to query:", json.encode(tk_control), ":",
err, ":", errcode, ":", sqlstate, ".")
end
end
ngx.say("SUCCESS")
EOF()
ngx.log(ngx.NOTICE, "-----------------------> END")
end
......@@ -119,13 +110,12 @@ end
-- 异步运行
-- @param table tk_biz 节点机数据库对象
-- table tk_control 总控机数据库对象
-- table tk_database 数据同步数据库名
-- table tk_table 数据同步表名
-- @return nil
local function async(tk_biz, tk_control, tk_database, tk_table)
local function async(tk_biz, tk_control, tk_table)
local co = coroutine.wrap(
function()
sync_sql(tk_biz, tk_control, tk_database, tk_table)
sync_sql(tk_biz, tk_control, tk_table)
end
)
table.insert(tasks, co)
......@@ -159,10 +149,10 @@ end
-- @param nil
-- @return nil
function TK_SYNC.run()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
for i = 1, #dbs_st.tk_biz do
async(dbs_st.tk_biz[i], dbs_st.tk_control, dbs_st.tk_biz[i].database, "tk_shop")
async(dbs_st.tk_biz[i], dbs_st.tk_control, dbs_st.tk_biz[i].database, "tk_casher")
async(dbs_st.tk_biz[i], dbs_st.tk_control, "tk_shop")
async(dbs_st.tk_biz[i], dbs_st.tk_control, "tk_casher")
end
dispatch()
end
......@@ -172,7 +162,7 @@ end
-- @param nil
-- @return ngx.say
local function tk_sync()
local dbs_st = zx_base:db_read(db_conf)
-- local dbs_st = zx_base:db_read(db_conf)
local code
local mesg
......@@ -200,7 +190,8 @@ local function tk_sync()
return code, mesg
else
async(dbs_st.tk_biz[i], dbs_st.tk_control, dbs_st.tk_biz[i].database, data.dbTable)
-- async(dbs_st.tk_biz[i], dbs_st.tk_control, data.dbTable)
sync_sql(dbs_st.tk_biz[i], dbs_st.tk_control, data.dbTable)
code = "00"
mesg = "SUCCESS"
......@@ -223,7 +214,9 @@ function TK_SYNC.sync()
ngx.say(json.encode({mesgRetCode=code, mesgRetDesc=mesg}))
ngx.eof()
ngx.log(ngx.ERR, ngx.var.request_body)
end
return TK_SYNC
local _BASE = {}
local ZX_BASE = {__index=_G}
local json = loadmod ('cjson')
function _BASE.__FILE__ () return debug.getinfo(2,'S').source end
function _BASE.__LINE__ () return debug.getinfo(2,'l').currentline end
function ZX_BASE.__FILE__ () return debug.getinfo(2,'S').source end
function ZX_BASE.__LINE__ () return debug.getinfo(2,'l').currentline end
function _BASE.log(self, fname, ...)
function ZX_BASE.log(self, fname, ...)
local fpath = string.format("%s/%s_%s.log", ngx.var.logs_path, tostring(fname), os.date("%Y%m%d"))
local f = io.open(fpath, "a+")
local str = ""
......@@ -15,13 +15,12 @@ function _BASE.log(self, fname, ...)
str = string.format("%s %s", str, tmp)
end
f:write(os.date("<%Y-%m-%d %H:%M:%S> "))
-- f:write(...)
f:write(str)
f:write("\n")
f:close()
end
function _BASE.db_read(self, dbpath)
function ZX_BASE.db_read(self, dbpath)
local f = io.open(ngx.var.conf_path.."/"..dbpath, "r")
local tmp = f:read("a*")
local db_st = json.decode(tmp)
......@@ -29,19 +28,18 @@ function _BASE.db_read(self, dbpath)
return db_st
end
function _BASE.close_db(self, db)
function ZX_BASE.close_db(self, db)
if not db then
return
end
local ok, err = db:close()
if not ok then
_BASE.log("failed to close:", err)
ZX_BASE.log("failed to close:", err)
end
return
end
function _BASE.sql_concate(self, operate, tb_name, tb_data)
function ZX_BASE.sql_concate(self, operate, tb_name, tb_data)
local sub = ""
for k, v in pairs(tb_data) do
if v ~= nil and v ~= "" then
......@@ -67,7 +65,7 @@ function _BASE.sql_concate(self, operate, tb_name, tb_data)
end
function _BASE.tonumber(self, str)
function ZX_BASE.tonumber(self, str)
if str == nil or str == "" then
return 0
else
......@@ -75,4 +73,12 @@ function _BASE.tonumber(self, str)
end
end
return _BASE
function ZX_BASE.date2time(self, settletime)
local regex = [[(%d+)-(%d+)-(%d+)]]
local y, m, d = settletime:match(regex)
local time = os.time({year = y, month = m, day = d})
return time
end
return ZX_BASE
......@@ -44,3 +44,36 @@ function _G.loadmod(namespace)
-- 模块加载失败
error(module, 2)
end
-- _G.fpath = string.format("/var/log/www/S_%s.log", os.date("%Y%m%d"))
-- _G.f = io.open(_G.fpath, "a+")
-- 唐库 7 数据库文件
_G.dbs_st = {
tk_sku = {
host = "192.168.254.100",
port = 3306,
database = "tk_sku",
user = "root",
password = "",
timeout = 30
},
tk_control = {
host = "rm-bp1u9rp1p216nb15f.mysql.rds.aliyuncs.com",
port = 3306,
database = "tk_control",
user = "tk_control_user",
password = "KJjsdn%zx3@jr#y57dhh20drYT!z",
timeout = 30
},
tk_biz = {
{
host = "rm-bp1rob0a7ry7zmc0n.mysql.rds.aliyuncs.com",
port = 3306,
database = "tk_biz",
user = "tk_node_user",
password = "KJjsnc%gs5@jr#y789sajkshdrYT!z",
timeout = 30
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment