package com.persagy.meiku.services

import com.persagy.meiku.models.entities.PipelineCategory
import com.sybotan.database.SFilter
import com.sybotan.mybatis.SMybatisDao
import com.sybotan.service.SObjectService
import com.sybotan.service.models.enums.SResponseType
import com.sybotan.service.models.responses.SQueryResponse
import java.util.*

/**
 * 管线服务
 *
 * @author wx  <zhangweixin@sagacloud.com>
 * @date  2020/11/5 10:17
 */
object PipelineCategoryService: SObjectService<PipelineCategory>(SMybatisDao(PipelineCategory::class.java)) {

    /**
     * 查询管线类型
     *
     * @return 返回结果
     */
    fun categoryQuery(): SQueryResponse<PipelineCategory> {
        return try {
            /** 返回对象 */
            val sQueryResponse = SQueryResponse<PipelineCategory>()
            // 不是此原因导致的查询慢，数据量有限，原查询1秒可以接受，暂不调整了，代码先留着
//            /** 查询所有类型 */
//            val pipelineCategoryList = selectAll().exec();
//            val categoryMap = pipelineCategoryList!!.associateBy({it.id},{t -> t});
//            // 转换为树型
//            val rsList = ArrayList<PipelineCategory>()
//            for (data in pipelineCategoryList) {
//                val parentId = data.parentId;
//                // 如果找不到上级节点，直接添加到结果列表中
//                if (parentId == null || categoryMap[parentId] == null) {
//                    rsList.add(data)
//                    continue
//                }
//                // 能找到上级节点，则放入上级节点的子节点列表中
//                val parent = categoryMap[parentId];
//                if(parent!!.categoryList == null) {
//                    parent.categoryList = ArrayList<PipelineCategory>();
//                }
//                parent.categoryList!!.add(data)
//            }
//            /** 类型列表 */
//            sQueryResponse.content = rsList
//            /** 类型长度 */
//            sQueryResponse.total = rsList.size.toLong()
            /** 查询一级节点 */
            val pipelineCategoryList = select(SFilter.isNull("parentId")).exec()
            /** 遍历节点 */
            for (pipelineCategory in pipelineCategoryList){
                /** 查询子节点 */
                pipelineCategory.categoryList = select(SFilter.eq("parentId",pipelineCategory.id!!)).exec()
            }

            /** 类型列表 */
            sQueryResponse.content = pipelineCategoryList
            /** 类型长度 */
            sQueryResponse.total = pipelineCategoryList.size.toLong()
            /** 类型标志 */
            sQueryResponse.result = SResponseType.success
            /** 返回的对象 */
            sQueryResponse
        } catch (e: Exception) {
            e.printStackTrace()
            SQueryResponse(SResponseType.failure,e.message!!)
        }
    }

    /**
     * 创建之前操作
     *
     * @param entity    管线类型对象
     * @return 是否执行
     */
    override fun onCreateBefore(entity: PipelineCategory): Boolean {
        /** id 为空赋值 */
        if (entity.id.isNullOrEmpty()){
            entity.id = UUID.randomUUID().toString().replace("-", "")
        }
        return super.onCreateBefore(entity)
    }

}