async def lock_server(ns={}): """ 锁定设备 :param ns: :return: """ data = {} d = -1 msg = "sql error" try: data["productid"] = ns['productid'] data['lease_start_time'] = ns['lease_start_time'] data['lease_end_time'] = ns['lease_end_time'] data['count'] = int(ns['count']) data['update_time'] = datetime.datetime.now() except Exception as e: return {"status": False, "msg": f"get key error, please check key:{str(e)}"} if data['count'] <= 0: return {"status": False, "msg": "count must be greater than 0"} db = DBPools() async with db.sqlorContext('kboss') as sor: sql = "UPDATE lease_server_status SET `status` = 1 ,update_time = ${update_time}$, lease_start_time=${lease_start_time}$,lease_end_time=${lease_end_time}$ WHERE `status`=0 AND del_flg=0 AND end_date >= ${lease_end_time}$ AND productid=${productid}$ limit ${count}$" d = await sor.sqlExe(sql, data) if d == data['count']: sql = "update lease_server_data set stock=stock-${count}$,update_time = ${update_time}$ where productid=${productid}$ AND (stock - ${count}$) >= 0;" dd = await sor.sqlExe(sql, data) if dd: return {"status": True, "msg": f"success update number:{d}"} else: msg = "库存数量有误,请联系管理员核对库存数量" raise Exception(msg) else: if d: msg = f"目前只有{d}台机器,请重新填入购买数量" else: msg = "目前没有可用的机器" raise Exception(msg) return {"status": False, "msg": msg, "number": d} ret = await lock_server(params_kw) return ret