@TraceCall @Override public void destroyPage(Context ctx, long pageId, boolean destroyAssociated) { checkUpdatePagePermission(ctx, pageId); String sql; SQLExecutor se = getSqlExecutor(); if (destroyAssociated) { sql = new SQLBuilder.Select() .select("associated_id", "free_circle_ids") .from(pageTable) .where("destroyed_time=0 AND page_id = ${v(page_id)}", "page_id", pageId) .toString(); Record pageRec = se.executeRecord(sql, null); if (MapUtils.isNotEmpty(pageRec)) { long associatedId = pageRec.getInt("associated_id"); long[] freeCircleIds = StringUtils2.splitIntArray(pageRec.getString("free_circle_ids"), ","); long[] allCircleIds = associatedId > 0 ? ArrayUtils.add(freeCircleIds, 0, associatedId) : freeCircleIds; for (long circleId : allCircleIds) { GlobalLogics.getGroup() .updateGroupSimple(ctx, circleId, new Record(), Record.of("page_id", 0L)); } } } sql = new SQLBuilder.Update() .update(pageTable) .value("destroyed_time", DateUtils.nowMillis()) .where("page_id=${v(page_id)}", "page_id", pageId) .toString(); se.executeUpdate(sql); }