kboss/b/cntoai/model_management_move_down.dspy
2026-05-21 20:55:47 +08:00

67 lines
2.4 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

def _escape(value):
if value is None:
return None
return str(value).replace("'", "''")
async def model_management_move_down(ns={}):
"""
下移:与排序上的下一条记录交换 sort_order已在最后则提示
必填参数:
id (int|str) 模型主键
"""
model_id = ns.get('id')
if not model_id:
return {'status': False, 'msg': 'id is required'}
db = DBPools()
async with db.sqlorContext('kboss') as sor:
try:
current_sql = """
SELECT id, sort_order FROM model_management WHERE id = '%s' LIMIT 1;
""" % _escape(model_id)
current = await sor.sqlExe(current_sql, {})
if not current:
return {'status': False, 'msg': 'model not found'}
cur = current[0]
cur_order = int(cur.get('sort_order') or 0)
cur_id = int(cur.get('id'))
next_sql = """
SELECT id, sort_order FROM model_management
WHERE (sort_order > %s) OR (sort_order = %s AND id > %s)
ORDER BY sort_order ASC, id ASC
LIMIT 1;
""" % (cur_order, cur_order, cur_id)
next_row = await sor.sqlExe(next_sql, {})
if not next_row:
return {'status': True, 'msg': 'already at bottom', 'data': {'sort_order': cur_order}}
nxt = next_row[0]
nxt_order = int(nxt.get('sort_order') or 0)
nxt_id = _escape(nxt.get('id'))
swap_cur_sql = """
UPDATE model_management SET sort_order = %s WHERE id = '%s';
""" % (nxt_order, _escape(model_id))
swap_nxt_sql = """
UPDATE model_management SET sort_order = %s WHERE id = '%s';
""" % (cur_order, nxt_id)
await sor.sqlExe(swap_cur_sql, {})
await sor.sqlExe(swap_nxt_sql, {})
return {
'status': True,
'msg': 'move down success',
'data': {
'id': model_id,
'sort_order': nxt_order,
'swapped_with_id': nxt.get('id'),
},
}
except Exception as e:
await sor.rollback()
return {'status': False, 'msg': 'move down failed, %s' % str(e)}
ret = await model_management_move_down(params_kw)
return ret