diff --git a/models/ragprogram.xlsx b/models/ragprogram.xlsx new file mode 100644 index 0000000..624b601 Binary files /dev/null and b/models/ragprogram.xlsx differ diff --git a/rag/ragprogram.py b/rag/ragprogram.py new file mode 100644 index 0000000..81605ef --- /dev/null +++ b/rag/ragprogram.py @@ -0,0 +1,46 @@ +from appPublic.timeUtils import curDateString, dateadd +from ahserver.serverenv import get_serverenv + +def set_program(request, program_type, quota): + db = DBPools() + dbname = get_serverenv('get_module_dbname')('rag') + async with db.sqlorContext(dbname) as sor: + u = await get_session_userinfo(request) + sql="select * from ragquote where orgid = ${orgid}$ order by enabled_date" + qs = await sor.sqlExe(sql, {'orgid': u.userorgid}) + today = curDateString() + if len(qs) == 0: + if params_kw.program_type == 'free': + expired_date = dateadd(today, months=1) + else: + expired_date = '9999-12-31' + ns = { + "id": uuid(), + "orgid": u.userorgid, + "enabled_date": today, + "expired_date": expired_date, + 'quota': params_kw.quota + } + await sor.C('ragquota', ns) + else: + lastq = qs[-1] + lastq.expired_date = today + await sor.U('ragquote', lastq.copy()) + ns = { + "id": uuid(), + "orgid": u.userorgid, + "enabled_date": today, + "expired_date": expired_date, + 'quota': params_kw.quota + } + await sor.C('ragquota', ns) + + +def get_programs(request): + db = DBPools() + dbname = get_serverenv('get_module_dbanme')('rag') + async with db.sqlorContext(dbname) as sor: + recs = await sor.R('ragprogram', {}) + return recs + return [] + diff --git a/wwwroot/programs.ui b/wwwroot/programs.ui new file mode 100644 index 0000000..bf22bac --- /dev/null +++ b/wwwroot/programs.ui @@ -0,0 +1,81 @@ +{ + "widgettype":"DynamicColumn", + "options":{ + "width":"100%" + "height":"100%" + }, + "subwidgets":[ +{% for p in get_rag_programs() %} + { + "widgettype":"VBox", + "options":{ + "css":"card", + "width":"25%", + "cheight":10 + }, + "subwidgets":[ + { + "widgettype":"Title5", + "options":{ + "otext":"{{p.name}}" + "i18n":true, + "wrap":true, + "halign":"center", + "cheight":2 + } + }, + { + "widgettype":"text", + "options":{ + "otext":"{{p.description}}", + "i18n":true, + "wrap":true, + "halign":"left", + "cheight":2 + } + }, + { + "widgettype":"HBox", + "options":{ + "height":1.5 + }, + "subwidgets":[ + { + "widgettype":"text", + "options":{ + "otext":"可用磁盘容量", + "i18n":true + } + }, + { + "widgettype":"text", + "options":{ + "text":"{{p.quota / 1000000}}M" + } + } + ] + } + ], + "binds":[ + { + "wid":"self", + "event":"click", + "actiontype":"urlwidget", + "target":"PopupWindow", + "popup_options":{ + "anchor":"cc", + "width":"60%", + "height":"60%" + } + "options":{ + "params":{ + "selected_program":"p.id" + }, + "url":"{{entire_url('./program_selected.dspy')}}" + } + } + ] + } +{% endfor %} + ] +}