Clojure--叶子节点根据parent_id获取所有父节点

需求:获取红色领带品类的所有父节点

品类级别:
男装(根节点)–>领带&口袋巾–>领带–>尖角领带–>红色领带

思路:

  1. 接受两个参数,第一个参数为叶子节点category_id,第二个参数为父节点初始值ids
  2. 根据parent_id获取父节点,把父节点id放入ids中
  3. 判断父节点是否存在,若不存在返回 nil
  4. 若父节点存在,判断节点是否为根节点,若为根节点则把数据进行反转,然后返回数据
  5. 若父节点不为根节点,则根据parent_id继续向上查找

在service层增加一个方法,递归获取category_ids:

+				(defn get-category-ids
+				  "根据catgoryid获取父级的categoryids"
+				  [categroy-id ids]
+				  (let [parent-catgory (catergory-db/get-parent-id {:category_id categroy-id})
+				        ids (conj ids (:category_id parent-catgory))]
+				    (if (seq parent-catgory)
+				      (if (= "0" (:parent_id parent-catgory))
+				      ;;把数据反转,根节点在前,叶子节点在后
+				        (identity (reverse ids))
+				        (get-category-ids (:category_id parent-catgory )ids))
+				      (identity nil))))

controller层:

;;获取品类详情
 (defn craftwork-admin-routes []
   ["/craftwork"
   {:swagger {:tags ["后台-品类接口"]}
    :middleware [craftwork-error-middleware]}
     ["/detail/:category_id"
      {:get {:summary "品类详情"
             :parameters {:path {:category_id string?}}
             :handler (fn [{{{:keys [category_id]}:path}:parameters
                            {:keys [company_id]}:current-user}]
                        (-> (category-service/check-category-by-id category_id company_id)
                            (category-service/get-category-detail)
                            (success)))}}]
])
(defn get-category-detail
  "获取品类详情"
  [params]
  (let [categroy (catergory-db/find-category-by-id params)
  		category_id	(:category_id categroy)]
    (assoc categroy :update_time (utils/get-timestamp (:update_time categroy))
           :create_time (utils/get-timestamp (:create_time categroy))
+           ;;调用get-categroy-ids方法,第二个参数为[]
+           :category_ids (get-category-ids category_id  []))))

返回结果

{
  "code": 0,
  "msg": "操作成功",
  "data": {
    "update_time": 1568022259,
    "show_order": null,
    "create_user_id": null,
    "remark": null,
    "category_ids": [
      "1001",
      "1008",
      "1023",
    ],
    "image_url": null,
    "company_id": "1",
    "category_name": "dsfw",
    "parent_id": "221640856061386752",
    "create_time": 1568022259,
    "delete_flag": "0",
    "update_user_id": null,
    "category_code": null,
    "category_intro": null,
    "category_id": "1432543154"
  }
}
若想把叶子节点的id也放入到catgory_ids中,怎么办?

service层:
在方法中增加catgory_ids返回值:category_ids,

(defn get-category-detail
  "获取品类详情"
  [params]
  (let [categroy (catergory-db/find-category-by-id params)
  		category_id	(:category_id categroy)]
    (assoc categroy :update_time (utils/get-timestamp (:update_time categroy))
           :create_time (utils/get-timestamp (:create_time categroy))
           
+           ;;调用get-categroy-ids方法,第二个参数为[ category_id]
+           :category_ids (get-category-ids category_id  [category_id]))))

运行结果:

  1. category_ids 为所有父节点id+叶子节点id
{
  "code": 0,
  "msg": "操作成功",
  "data": {
    "update_time": 1568022259,
    "show_order": null,
    "create_user_id": null,
    "remark": null,
    "category_ids": [
      "1001",
      "1008",
      "1023",
      "221640856061386752"      ;;把叶子节点也返回了
    ],
    "image_url": null,
    "company_id": "1",
    "category_name": "dsfw",
    "parent_id": "221640856061386752",
    "create_time": 1568022259,
    "delete_flag": "0",
    "update_user_id": null,
    "category_code": null,
    "category_intro": null,
    "category_id": "1432543154"
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值