67 lines
2.4 KiB
Plaintext
67 lines
2.4 KiB
Plaintext
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 |