async def report_disengaged(ns={}): """ 统计空闲 :param ns: :return: """ db = DBPools() async with db.sqlorContext('kboss') as sor: ns["select_date"] = ns.get("select_date", datetime.datetime.now().strftime("%Y-%m-%d")) sql = "SELECT d.store_name,d.id,d.product_name,IFNULL(DATEDIFF(s.lease_end_time, ${select_date}$ ),DATEDIFF(s.create_at,${select_date}$ )) AS d FROM lease_server_status s LEFT JOIN lease_server_data d ON s.server_id=d.id WHERE s.del_flg=0 AND d.store_name is not NULL AND s.end_date>=CURDATE() HAVING d<=0" data = await sor.sqlExe(sql, ns) resp_data = {} for i in data: a = {i["product_name"]: resp_data.get(i["store_name"], {}).get(i["product_name"], [])} a[i["product_name"]].append(i["d"]) resp_data.setdefault(i["store_name"], {}).update(a) return {"status": True, "data": resp_data} ret = await report_disengaged(params_kw) return ret