This commit is contained in:
yumoqing 2025-07-27 10:40:33 +08:00
parent f3d40b143c
commit 3b7dacc402
6 changed files with 223 additions and 202 deletions

View File

@ -6,15 +6,19 @@ import os
import asyncio import asyncio
from datetime import datetime from datetime import datetime
from appPublic.jsonConfig import getConfig from appPublic.jsonConfig import getConfig
from appPublic.httpclient import HttpClient from appPublic.streamhttpclient import StreamHttpClient
from appPublic.uniqueID import getID from appPublic.uniqueID import getID
from appPublic.log import debug from appPublic.log import debug
from sqlor.dbpools import DBPools from sqlor.dbpools import DBPools
import m3u import m3u
async def download(url): async def download(url):
client = HttpClient() client = StreamHttpClient()
txt = await client.request(url, 'GET') 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) clist = m3u.m3uParser(txt)
return clist return clist

View File

@ -8,6 +8,11 @@ from sqlor.dbpools import DBPools
from ahserver.webapp import webapp from ahserver.webapp import webapp
from downloadchannels import load_url_iptv from downloadchannels import load_url_iptv
from time import time 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): async def get_channel_by_id(id):
db = DBPools() db = DBPools()
@ -21,6 +26,9 @@ async def get_channel_by_id(id):
def init_func(): def init_func():
g = ServerEnv() g = ServerEnv()
load_appbase()
load_rbac()
g.get_module_dbname = get_module_dbname
g.load_url_iptv = load_url_iptv g.load_url_iptv = load_url_iptv
g.get_channel_by_id = get_channel_by_id g.get_channel_by_id = get_channel_by_id

View File

@ -19,7 +19,7 @@
"user":"test", "user":"test",
"db":"iptvdb", "db":"iptvdb",
"password":"QUZVcXg5V1p1STMybG5Ia6mX9D0v7+g=", "password":"QUZVcXg5V1p1STMybG5Ia6mX9D0v7+g=",
"host":"localhost" "host":"db"
} }
} }
}, },
@ -29,7 +29,7 @@
], ],
"client_max_size":10000, "client_max_size":10000,
"host":"0.0.0.0", "host":"0.0.0.0",
"port":10180, "port":9184,
"coding":"utf-8", "coding":"utf-8",
"ssl_gg":{ "ssl_gg":{
"crtfile":"$[workdir]$/conf/www.bsppo.com.pem", "crtfile":"$[workdir]$/conf/www.bsppo.com.pem",
@ -59,15 +59,8 @@
[".dspy","dspy"], [".dspy","dspy"],
[".md","md"] [".md","md"]
], ],
"rsakey":{
"privatekey":"$[workdir]$/conf/rsa_private_key.pem",
"publickey":"$[workdir]$/conf/rsa_public_key.pem"
},
"session_max_time":3000, "session_max_time":3000,
"session_issue_time":2500, "session_issue_time":2500
"session_redis_oops":{
"url":"redis://127.0.0.1:6379"
}
}, },
"langMapping":{ "langMapping":{
"zh-Hans-CN":"zh-cn", "zh-Hans-CN":"zh-cn",

16
initln Executable file
View File

@ -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

View File

@ -1,24 +1,18 @@
-- ./iptvchannels.xlsx -- ./userapp.xlsx
drop table if exists iptvchannels; drop table if exists userapp;
CREATE TABLE iptvchannels CREATE TABLE userapp
( (
`id` VARCHAR(32) comment '编号', `id` VARCHAR(32) comment 'id',
`tv_group` VARCHAR(500) comment '频道组', `userid` VARCHAR(32) DEFAULT '0' comment '用户id',
`tv_name` VARCHAR(500) comment '频道名称', `appname` VARCHAR(99) comment '应用名称',
`logo_url` VARCHAR(1000) comment '台标url', `apikey` VARCHAR(400) comment 'apikey'
`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) ,primary key(id)
@ -27,12 +21,60 @@ CREATE TABLE iptvchannels
) )
engine=innodb engine=innodb
default charset=utf8 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 -- ./userapikey.xlsx
@ -64,45 +106,20 @@ comment '用户api密码表'
CREATE UNIQUE INDEX userapikey_idx1 ON userapikey(providerid,customerid); CREATE UNIQUE INDEX userapikey_idx1 ON userapikey(providerid,customerid);
CREATE INDEX userapikey_idx2 ON userapikey(customerid); CREATE INDEX userapikey_idx2 ON userapikey(customerid);
-- ./userroles.xlsx -- ./playhistory.xlsx
drop table if exists userrole; drop table if exists playhistory;
CREATE TABLE userrole CREATE TABLE playhistory
(
`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
( (
`id` VARCHAR(32) comment 'id', `id` VARCHAR(32) comment 'id',
`parentid` VARCHAR(32) comment 'id', `deviceid` VARCHAR(32) comment '设备id',
`k` VARCHAR(32) comment '', `channelid` VARCHAR(32) comment '频道id',
`v` VARCHAR(255) comment '' `playtime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP comment '开始时间'
,primary key(id) ,primary key(id)
@ -111,52 +128,9 @@ CREATE TABLE appcodes_kv
) )
engine=innodb engine=innodb
default charset=utf8 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 -- ./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'); 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 -- ./permission.xlsx
@ -302,6 +198,31 @@ comment '权限'
CREATE INDEX permission_idx1 ON permission(ptype); CREATE INDEX permission_idx1 ON permission(ptype);
CREATE INDEX permission_idx2 ON permission(parentid); 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 -- ./taging.xlsx
@ -327,20 +248,26 @@ comment '打标签'
; ;
-- ./device.xlsx -- ./iptvchannels.xlsx
drop table if exists device; drop table if exists iptvchannels;
CREATE TABLE device CREATE TABLE iptvchannels
( (
`id` VARCHAR(32) comment 'id', `id` VARCHAR(32) comment '编号',
`name` VARCHAR(255) comment '设备名称', `tv_group` VARCHAR(500) comment '频道组',
`takeover_flg` VARCHAR(1) comment '接管标志', `tv_name` VARCHAR(500) comment '频道名称',
`userid` VARCHAR(32) comment '用户id' `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) ,primary key(id)
@ -349,9 +276,12 @@ CREATE TABLE device
) )
engine=innodb engine=innodb
default charset=utf8 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 -- ./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=='); 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 -- ./channelfailed.xlsx
@ -477,20 +434,20 @@ comment '频道播放失败'
; ;
-- ./playhistory.xlsx -- ./appcodes_kv.xlsx
drop table if exists playhistory; drop table if exists appcodes_kv;
CREATE TABLE playhistory CREATE TABLE appcodes_kv
( (
`id` VARCHAR(32) comment 'id', `id` VARCHAR(32) comment 'id',
`deviceid` VARCHAR(32) comment '设备id', `parentid` VARCHAR(32) comment 'id',
`channelid` VARCHAR(32) comment '频道id', `k` VARCHAR(32) comment '',
`playtime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP comment '开始时间' `v` VARCHAR(255) comment ''
,primary key(id) ,primary key(id)
@ -499,7 +456,50 @@ CREATE TABLE playhistory
) )
engine=innodb engine=innodb
default charset=utf8 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');

View File

@ -8,8 +8,8 @@ try:
"cwidth":21, "cwidth":21,
"cheight":15, "cheight":15,
"archor":"cc", "archor":"cc",
"auto_open":true, "auto_open":True,
"auto_dismiss":true, "auto_dismiss":True,
"title":"Success", "title":"Success",
"message":"add success" "message":"add success"
} }
@ -22,8 +22,8 @@ except Exception as e:
"cwidth":21, "cwidth":21,
"cheight":15, "cheight":15,
"archor":"cc", "archor":"cc",
"auto_open":true, "auto_open":True,
"auto_dismiss":true, "auto_dismiss":True,
"title":"Error", "title":"Error",
"message":str(e) "message":str(e)
} }