From 3b7dacc40225349649f11c2cd3ea67fafeb6a304 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sun, 27 Jul 2025 10:40:33 +0800 Subject: [PATCH] bugfix --- app/downloadchannels.py | 10 +- app/iptv.py | 8 + conf/config.json | 13 +- initln | 16 ++ models/mysql.ddl.sql | 370 +++++++++++++++++++------------------- wwwroot/add_channels.dspy | 8 +- 6 files changed, 223 insertions(+), 202 deletions(-) create mode 100755 initln diff --git a/app/downloadchannels.py b/app/downloadchannels.py index cc28148..73b6c2f 100644 --- a/app/downloadchannels.py +++ b/app/downloadchannels.py @@ -6,15 +6,19 @@ import os import asyncio from datetime import datetime from appPublic.jsonConfig import getConfig -from appPublic.httpclient import HttpClient +from appPublic.streamhttpclient import StreamHttpClient from appPublic.uniqueID import getID from appPublic.log import debug from sqlor.dbpools import DBPools import m3u async def download(url): - client = HttpClient() - txt = await client.request(url, 'GET') + client = StreamHttpClient() + bin = await client.request('GET', url) + if bin is None: + debug(f'request {url=} error') + return None + txt = bin.decode('utf-8') clist = m3u.m3uParser(txt) return clist diff --git a/app/iptv.py b/app/iptv.py index e28720e..343f929 100644 --- a/app/iptv.py +++ b/app/iptv.py @@ -8,6 +8,11 @@ from sqlor.dbpools import DBPools from ahserver.webapp import webapp from downloadchannels import load_url_iptv from time import time +from appbase.init import load_appbase +from rbac.init import load_rbac + +def get_module_dbname(m): + return 'iptvdb' async def get_channel_by_id(id): db = DBPools() @@ -21,6 +26,9 @@ async def get_channel_by_id(id): def init_func(): g = ServerEnv() + load_appbase() + load_rbac() + g.get_module_dbname = get_module_dbname g.load_url_iptv = load_url_iptv g.get_channel_by_id = get_channel_by_id diff --git a/conf/config.json b/conf/config.json index 3167b78..bbcd097 100755 --- a/conf/config.json +++ b/conf/config.json @@ -19,7 +19,7 @@ "user":"test", "db":"iptvdb", "password":"QUZVcXg5V1p1STMybG5Ia6mX9D0v7+g=", - "host":"localhost" + "host":"db" } } }, @@ -29,7 +29,7 @@ ], "client_max_size":10000, "host":"0.0.0.0", - "port":10180, + "port":9184, "coding":"utf-8", "ssl_gg":{ "crtfile":"$[workdir]$/conf/www.bsppo.com.pem", @@ -59,15 +59,8 @@ [".dspy","dspy"], [".md","md"] ], - "rsakey":{ - "privatekey":"$[workdir]$/conf/rsa_private_key.pem", - "publickey":"$[workdir]$/conf/rsa_public_key.pem" - }, "session_max_time":3000, - "session_issue_time":2500, - "session_redis_oops":{ - "url":"redis://127.0.0.1:6379" - } + "session_issue_time":2500 }, "langMapping":{ "zh-Hans-CN":"zh-cn", diff --git a/initln b/initln new file mode 100755 index 0000000..2df516b --- /dev/null +++ b/initln @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +cdir=$(pwd) +mdir=~/py +for m in appbase rbac +do + cd $mdir/$m + git pull + pip install + cd models + xls2ddl mysql . > mysql.ddl.sql + mysql -h db -utest -ptest123 iptvdb < mysql.ddl.sql + cd ../json + ./build.sh + ln -s $mdir/$m/wwwroot $cdir/wwwroot/$m +done + diff --git a/models/mysql.ddl.sql b/models/mysql.ddl.sql index 1c2df07..0ceb25a 100644 --- a/models/mysql.ddl.sql +++ b/models/mysql.ddl.sql @@ -1,24 +1,18 @@ --- ./iptvchannels.xlsx +-- ./userapp.xlsx -drop table if exists iptvchannels; -CREATE TABLE iptvchannels +drop table if exists userapp; +CREATE TABLE userapp ( - `id` VARCHAR(32) comment '编号', - `tv_group` VARCHAR(500) comment '频道组', - `tv_name` VARCHAR(500) comment '频道名称', - `logo_url` VARCHAR(1000) comment '台标url', - `url` VARCHAR(1000) comment 'url', - `media_type` VARCHAR(100) comment '媒体类型', - `download_date` VARCHAR(10) comment '下载日期', - `channel_delay` int comment '频道延迟', - `channel_grade` int comment '频道等级', - `del_flg` VARCHAR(1) comment '删除标志' + `id` VARCHAR(32) comment 'id', + `userid` VARCHAR(32) DEFAULT '0' comment '用户id', + `appname` VARCHAR(99) comment '应用名称', + `apikey` VARCHAR(400) comment 'apikey' ,primary key(id) @@ -27,12 +21,60 @@ CREATE TABLE iptvchannels ) engine=innodb default charset=utf8 -comment 'IPTV频道清单' +comment '用户应用' +; + + +-- ./userroles.xlsx + + + + + +drop table if exists userrole; +CREATE TABLE userrole +( + + `id` VARCHAR(32) comment '用户id', + `userid` VARCHAR(32) comment '用户id', + `roleid` VARCHAR(32) comment '角色id' + + +,primary key(id) + + +) +engine=innodb +default charset=utf8 +comment '用户角色' +; + + +-- ./device.xlsx + + + + + +drop table if exists device; +CREATE TABLE device +( + + `id` VARCHAR(32) comment 'id', + `name` VARCHAR(255) comment '设备名称', + `takeover_flg` VARCHAR(1) comment '接管标志', + `userid` VARCHAR(32) comment '用户id' + + +,primary key(id) + + +) +engine=innodb +default charset=utf8 +comment '设备表' ; -CREATE INDEX iptvchannels_idx1 ON iptvchannels(tv_group); -CREATE INDEX iptvchannels_idx2 ON iptvchannels(tv_name); -CREATE UNIQUE INDEX iptvchannels_idx3 ON iptvchannels(url); -- ./userapikey.xlsx @@ -64,45 +106,20 @@ comment '用户api密码表' CREATE UNIQUE INDEX userapikey_idx1 ON userapikey(providerid,customerid); CREATE INDEX userapikey_idx2 ON userapikey(customerid); --- ./userroles.xlsx +-- ./playhistory.xlsx -drop table if exists userrole; -CREATE TABLE userrole -( - - `id` VARCHAR(32) comment '用户id', - `userid` VARCHAR(32) comment '用户id', - `roleid` VARCHAR(32) comment '角色id' - - -,primary key(id) - - -) -engine=innodb -default charset=utf8 -comment '用户角色' -; - - --- ./appcodes_kv.xlsx - - - - - -drop table if exists appcodes_kv; -CREATE TABLE appcodes_kv +drop table if exists playhistory; +CREATE TABLE playhistory ( `id` VARCHAR(32) comment 'id', - `parentid` VARCHAR(32) comment '父id', - `k` VARCHAR(32) comment '键', - `v` VARCHAR(255) comment '值' + `deviceid` VARCHAR(32) comment '设备id', + `channelid` VARCHAR(32) comment '频道id', + `playtime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP comment '开始时间' ,primary key(id) @@ -111,52 +128,9 @@ CREATE TABLE appcodes_kv ) engine=innodb default charset=utf8 -comment '编码键值表' +comment '播放历史' ; -CREATE UNIQUE INDEX appcodes_kv_idx1 ON appcodes_kv(parentid,k); -CREATE INDEX appcodes_kv_idx2 ON appcodes_kv(parentid); -insert into appcodes_kv (id,parentid,k,v) values ('code0001','resp_mode','0','stream'); -insert into appcodes_kv (id,parentid,k,v) values ('code0002','resp_mode','1','sync'); -insert into appcodes_kv (id,parentid,k,v) values ('code0003','resp_mode','2','async'); -insert into appcodes_kv (id,parentid,k,v) values ('code0004','params_type','0','model'); -insert into appcodes_kv (id,parentid,k,v) values ('code0005','params_type','1','modelinstance'); -insert into appcodes_kv (id,parentid,k,v) values ('code0006','params_type','2','user'); -insert into appcodes_kv (id,parentid,k,v) values ('code0007','params_type','3','session'); -insert into appcodes_kv (id,parentid,k,v) values ('code0008','code_hierarchy','0','one l'); -insert into appcodes_kv (id,parentid,k,v) values ('code0009','code_hierarchy','1','hierarchy'); -insert into appcodes_kv (id,parentid,k,v) values ('code0010','minimax_acc_status','0','enabled'); -insert into appcodes_kv (id,parentid,k,v) values ('code0011','minimax_acc_status','2','disabled'); -insert into appcodes_kv (id,parentid,k,v) values ('code0012','datatype','str','str'); -insert into appcodes_kv (id,parentid,k,v) values ('code0013','datatype','char','char'); -insert into appcodes_kv (id,parentid,k,v) values ('code0014','datatype','short','short'); -insert into appcodes_kv (id,parentid,k,v) values ('code0015','datatype','long','long'); -insert into appcodes_kv (id,parentid,k,v) values ('code0016','datatype','llong','llong'); -insert into appcodes_kv (id,parentid,k,v) values ('code0017','datatype','date','date'); -insert into appcodes_kv (id,parentid,k,v) values ('code0018','datatype','time','time'); -insert into appcodes_kv (id,parentid,k,v) values ('code0019','datatype','timestamp','timestamp'); -insert into appcodes_kv (id,parentid,k,v) values ('code0020','datatype','float','float'); -insert into appcodes_kv (id,parentid,k,v) values ('code0021','datatype','double','double'); -insert into appcodes_kv (id,parentid,k,v) values ('code0022','datatype','ddouble','ddouble'); -insert into appcodes_kv (id,parentid,k,v) values ('code0023','datatype','decimal','decimal'); -insert into appcodes_kv (id,parentid,k,v) values ('code0024','uitype','str','str'); -insert into appcodes_kv (id,parentid,k,v) values ('code0025','uitype','text','text'); -insert into appcodes_kv (id,parentid,k,v) values ('code0026','uitype','date','date'); -insert into appcodes_kv (id,parentid,k,v) values ('code0027','uitype','int','int'); -insert into appcodes_kv (id,parentid,k,v) values ('code0028','uitype','float','float'); -insert into appcodes_kv (id,parentid,k,v) values ('code0029','uitype','file','file'); -insert into appcodes_kv (id,parentid,k,v) values ('code0030','uitype','email','email'); -insert into appcodes_kv (id,parentid,k,v) values ('code0031','uitype','tel','tel'); -insert into appcodes_kv (id,parentid,k,v) values ('code0032','uitype','audiotext','audiotext'); -insert into appcodes_kv (id,parentid,k,v) values ('code0033','uitype','password','password'); -insert into appcodes_kv (id,parentid,k,v) values ('code0034','uitype','checkbox','checkbox'); -insert into appcodes_kv (id,parentid,k,v) values ('code0035','uitype','check','check'); -insert into appcodes_kv (id,parentid,k,v) values ('code0036','uitype','code','code'); -insert into appcodes_kv (id,parentid,k,v) values ('code0037','yesno','1','yes'); -insert into appcodes_kv (id,parentid,k,v) values ('code0038','yesno','0','no'); -insert into appcodes_kv (id,parentid,k,v) values ('code0039','org_type','0','personal'); -insert into appcodes_kv (id,parentid,k,v) values ('code0040','org_type','1','organization'); - -- ./appcodes.xlsx @@ -192,84 +166,6 @@ insert into appcodes (id,name,hierarchy_flg) values ('yesno','是否选项','0') insert into appcodes (id,name,hierarchy_flg) values ('org_type','机构类型','0'); --- ./userdepartment.xlsx - - - - - -drop table if exists userdepartment; -CREATE TABLE userdepartment -( - - `id` VARCHAR(32) comment 'id', - `userid` VARCHAR(32) comment '用户id', - `depid` VARCHAR(32) comment '部门id', - `del_flg` VARCHAR(1) DEFAULT '0' comment '删除标志', - `create_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP comment '创建时间戳' - - -,primary key(id) - - -) -engine=innodb -default charset=utf8 -comment '用户部门表' -; - - --- ./tags.xlsx - - - - - -drop table if exists tags; -CREATE TABLE tags -( - - `id` VARCHAR(32) comment 'id', - `userid` VARCHAR(32) comment '用户id', - `tag` VARCHAR(400) comment '标签名称' - - -,primary key(id) - - -) -engine=innodb -default charset=utf8 -comment '标签表' -; - - --- ./userapp.xlsx - - - - - -drop table if exists userapp; -CREATE TABLE userapp -( - - `id` VARCHAR(32) comment 'id', - `userid` VARCHAR(32) DEFAULT '0' comment '用户id', - `appname` VARCHAR(99) comment '应用名称', - `apikey` VARCHAR(400) comment 'apikey' - - -,primary key(id) - - -) -engine=innodb -default charset=utf8 -comment '用户应用' -; - - -- ./permission.xlsx @@ -302,6 +198,31 @@ comment '权限' CREATE INDEX permission_idx1 ON permission(ptype); CREATE INDEX permission_idx2 ON permission(parentid); +-- ./tags.xlsx + + + + + +drop table if exists tags; +CREATE TABLE tags +( + + `id` VARCHAR(32) comment 'id', + `userid` VARCHAR(32) comment '用户id', + `tag` VARCHAR(400) comment '标签名称' + + +,primary key(id) + + +) +engine=innodb +default charset=utf8 +comment '标签表' +; + + -- ./taging.xlsx @@ -327,20 +248,26 @@ comment '打标签' ; --- ./device.xlsx +-- ./iptvchannels.xlsx -drop table if exists device; -CREATE TABLE device +drop table if exists iptvchannels; +CREATE TABLE iptvchannels ( - `id` VARCHAR(32) comment 'id', - `name` VARCHAR(255) comment '设备名称', - `takeover_flg` VARCHAR(1) comment '接管标志', - `userid` VARCHAR(32) comment '用户id' + `id` VARCHAR(32) comment '编号', + `tv_group` VARCHAR(500) comment '频道组', + `tv_name` VARCHAR(500) comment '频道名称', + `logo_url` VARCHAR(1000) comment '台标url', + `url` VARCHAR(1000) comment 'url', + `media_type` VARCHAR(100) comment '媒体类型', + `download_date` VARCHAR(10) comment '下载日期', + `channel_delay` int comment '频道延迟', + `channel_grade` int comment '频道等级', + `del_flg` VARCHAR(1) comment '删除标志' ,primary key(id) @@ -349,9 +276,12 @@ CREATE TABLE device ) engine=innodb default charset=utf8 -comment '设备表' +comment 'IPTV频道清单' ; +CREATE INDEX iptvchannels_idx1 ON iptvchannels(tv_group); +CREATE INDEX iptvchannels_idx2 ON iptvchannels(tv_name); +CREATE UNIQUE INDEX iptvchannels_idx3 ON iptvchannels(url); -- ./users.xlsx @@ -451,6 +381,33 @@ insert into users (id,username,password) values (' KindDove258',' KindDove258',' insert into users (id,username,password) values (' GentleBear159',' GentleBear159','QUZVcXg5V1p1STMybG5Ia+zDtngv7A=='); +-- ./userdepartment.xlsx + + + + + +drop table if exists userdepartment; +CREATE TABLE userdepartment +( + + `id` VARCHAR(32) comment 'id', + `userid` VARCHAR(32) comment '用户id', + `depid` VARCHAR(32) comment '部门id', + `del_flg` VARCHAR(1) DEFAULT '0' comment '删除标志', + `create_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP comment '创建时间戳' + + +,primary key(id) + + +) +engine=innodb +default charset=utf8 +comment '用户部门表' +; + + -- ./channelfailed.xlsx @@ -477,20 +434,20 @@ comment '频道播放失败' ; --- ./playhistory.xlsx +-- ./appcodes_kv.xlsx -drop table if exists playhistory; -CREATE TABLE playhistory +drop table if exists appcodes_kv; +CREATE TABLE appcodes_kv ( `id` VARCHAR(32) comment 'id', - `deviceid` VARCHAR(32) comment '设备id', - `channelid` VARCHAR(32) comment '频道id', - `playtime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP comment '开始时间' + `parentid` VARCHAR(32) comment '父id', + `k` VARCHAR(32) comment '键', + `v` VARCHAR(255) comment '值' ,primary key(id) @@ -499,7 +456,50 @@ CREATE TABLE playhistory ) engine=innodb default charset=utf8 -comment '播放历史' +comment '编码键值表' ; +CREATE UNIQUE INDEX appcodes_kv_idx1 ON appcodes_kv(parentid,k); +CREATE INDEX appcodes_kv_idx2 ON appcodes_kv(parentid); +insert into appcodes_kv (id,parentid,k,v) values ('code0001','resp_mode','0','stream'); +insert into appcodes_kv (id,parentid,k,v) values ('code0002','resp_mode','1','sync'); +insert into appcodes_kv (id,parentid,k,v) values ('code0003','resp_mode','2','async'); +insert into appcodes_kv (id,parentid,k,v) values ('code0004','params_type','0','model'); +insert into appcodes_kv (id,parentid,k,v) values ('code0005','params_type','1','modelinstance'); +insert into appcodes_kv (id,parentid,k,v) values ('code0006','params_type','2','user'); +insert into appcodes_kv (id,parentid,k,v) values ('code0007','params_type','3','session'); +insert into appcodes_kv (id,parentid,k,v) values ('code0008','code_hierarchy','0','one l'); +insert into appcodes_kv (id,parentid,k,v) values ('code0009','code_hierarchy','1','hierarchy'); +insert into appcodes_kv (id,parentid,k,v) values ('code0010','minimax_acc_status','0','enabled'); +insert into appcodes_kv (id,parentid,k,v) values ('code0011','minimax_acc_status','2','disabled'); +insert into appcodes_kv (id,parentid,k,v) values ('code0012','datatype','str','str'); +insert into appcodes_kv (id,parentid,k,v) values ('code0013','datatype','char','char'); +insert into appcodes_kv (id,parentid,k,v) values ('code0014','datatype','short','short'); +insert into appcodes_kv (id,parentid,k,v) values ('code0015','datatype','long','long'); +insert into appcodes_kv (id,parentid,k,v) values ('code0016','datatype','llong','llong'); +insert into appcodes_kv (id,parentid,k,v) values ('code0017','datatype','date','date'); +insert into appcodes_kv (id,parentid,k,v) values ('code0018','datatype','time','time'); +insert into appcodes_kv (id,parentid,k,v) values ('code0019','datatype','timestamp','timestamp'); +insert into appcodes_kv (id,parentid,k,v) values ('code0020','datatype','float','float'); +insert into appcodes_kv (id,parentid,k,v) values ('code0021','datatype','double','double'); +insert into appcodes_kv (id,parentid,k,v) values ('code0022','datatype','ddouble','ddouble'); +insert into appcodes_kv (id,parentid,k,v) values ('code0023','datatype','decimal','decimal'); +insert into appcodes_kv (id,parentid,k,v) values ('code0024','uitype','str','str'); +insert into appcodes_kv (id,parentid,k,v) values ('code0025','uitype','text','text'); +insert into appcodes_kv (id,parentid,k,v) values ('code0026','uitype','date','date'); +insert into appcodes_kv (id,parentid,k,v) values ('code0027','uitype','int','int'); +insert into appcodes_kv (id,parentid,k,v) values ('code0028','uitype','float','float'); +insert into appcodes_kv (id,parentid,k,v) values ('code0029','uitype','file','file'); +insert into appcodes_kv (id,parentid,k,v) values ('code0030','uitype','email','email'); +insert into appcodes_kv (id,parentid,k,v) values ('code0031','uitype','tel','tel'); +insert into appcodes_kv (id,parentid,k,v) values ('code0032','uitype','audiotext','audiotext'); +insert into appcodes_kv (id,parentid,k,v) values ('code0033','uitype','password','password'); +insert into appcodes_kv (id,parentid,k,v) values ('code0034','uitype','checkbox','checkbox'); +insert into appcodes_kv (id,parentid,k,v) values ('code0035','uitype','check','check'); +insert into appcodes_kv (id,parentid,k,v) values ('code0036','uitype','code','code'); +insert into appcodes_kv (id,parentid,k,v) values ('code0037','yesno','1','yes'); +insert into appcodes_kv (id,parentid,k,v) values ('code0038','yesno','0','no'); +insert into appcodes_kv (id,parentid,k,v) values ('code0039','org_type','0','personal'); +insert into appcodes_kv (id,parentid,k,v) values ('code0040','org_type','1','organization'); + diff --git a/wwwroot/add_channels.dspy b/wwwroot/add_channels.dspy index 5148b3a..630d003 100644 --- a/wwwroot/add_channels.dspy +++ b/wwwroot/add_channels.dspy @@ -8,8 +8,8 @@ try: "cwidth":21, "cheight":15, "archor":"cc", - "auto_open":true, - "auto_dismiss":true, + "auto_open":True, + "auto_dismiss":True, "title":"Success", "message":"add success" } @@ -22,8 +22,8 @@ except Exception as e: "cwidth":21, "cheight":15, "archor":"cc", - "auto_open":true, - "auto_dismiss":true, + "auto_open":True, + "auto_dismiss":True, "title":"Error", "message":str(e) }