/*
 * ********************************************************************************************************************
 *
 *                     :*$@@%$*:                         ;:                ;;    ;;
 *                   :@@%!  :!@@%:                       %!             ;%%@@%$ =@@@@@@@%;     @%@@@%%%%@@@@@
 *                  :@%;       :$=                       %%$$$%$$         ;$$  ;$@=   !@$
 *                  =@!                                  %!              @ $=;%   !@@@%:      !$$$$$$$$$$$$$$=
 *                  =@*                                  %!              @ $= % %@=   =%@!      %=
 *             *$%%! @@=        ;=$%%%$*:                %!              @ $= % =%%%%%%@$      *%:         =%
 *           %@@!:    !@@@%=$@@@@%!  :*@@$:              %!              @ $= % $*     ;@      @*          :%*
 *         ;@@!          ;!!!;:         ;@%:      =======@%========*     @ $$ % $%*****$@     :@$=*********=@$
 *         $@*   ;@@@%=!:                *@*
 *         =@$    ;;;!=%@@@@=!           =@!
 *          %@$:      =@%: :*@@@*       %@=                    Copyright (c) 2016-2019.  北京上格云技术有限公司
 *           ;%@@$=$@@%*       *@@@$=%@@%;
 *              ::;::             ::;::                                              All rights reserved.
 *
 * ********************************************************************************************************************
 */

package com.persagy.server.service.objects

import com.persagy.database.SFilter
import com.persagy.mybatis.SMybatisDao
import com.persagy.server.datacenter.models.entities.objects.GeneralSystem
import com.persagy.server.datacenter.models.entities.rel.RSy2Sp
import com.persagy.server.service.RSyInShService
import com.persagy.server.service.base.Service
import com.persagy.service.SBaseService
import com.persagy.service.SPageContext
import com.persagy.service.models.enums.SResponseType
import com.persagy.service.models.requests.SQueryRequest
import com.persagy.service.models.responses.SQueryResponse


/**
 * 系统信息服务
 *
 * @author 张维新
 */
object GeneralSystemService : Service<GeneralSystem>(SMybatisDao(GeneralSystem::class.java)) {

    val rSy2SpService = SBaseService(SMybatisDao(RSy2Sp::class.java))
    /**
     * 查询没有和当前空间绑定的系统
     *
     * @param   type        空间类型
     * @param   spaceId     空间id
     */
    fun unSpaceSys(type: String, spaceId: String, request: SQueryRequest): SQueryResponse<GeneralSystem> {
        return try {
            val projectId = SPageContext.getHeader("ProjectId")
            val rSyInSpBaseList = rSy2SpService.select(SFilter.eq("Id2", spaceId), SFilter.eq("projectId", projectId!!),SFilter.eq("type", "sy2sp")).exec()
            val list = ArrayList<String>()
            val listf = ArrayList<SFilter>()
            for (rSyInSpBase in rSyInSpBaseList){
                list.add(rSyInSpBase.id1!!)
            }

            if (list.size>0){
                listf.add(SFilter.eq("projectId", projectId!!))
                listf.add(SFilter.not(SFilter.inList("SysID", list)))
            }else{
                listf.add(SFilter.eq("projectId", projectId!!))
            }

            pageQuery(request,listf)


//            val queryBuilder = select(request.filters)
//            queryBuilder.tableName="f_unsys_in_space('$projectId','$type','$spaceId')"
//            if (null != request.projection) {
//                queryBuilder.projection(request.projection!!)
//            }
//            if (null != request.orders) {
//                queryBuilder.order(request.orders!!)
//            }
//            val pageInfo = queryBuilder.pageQuery(request.pageNumber, request.pageSize)
//
//            SQueryResponse(pageInfo)
        } catch (e: Exception) {
            e.printStackTrace()
            SQueryResponse(SResponseType.failure, e.message!!)
        }

    } // Function  unSpaceSys

    /**
     * 查询没有和当前竖井绑定的系统
     *
     * @param   shaftId     竖井id
     */
    fun unShaftSys(shaftId: String, request: SQueryRequest): SQueryResponse<GeneralSystem> {
        return try {
            val projectId = SPageContext.getHeader("ProjectId")
            val rSyInShaftBaseList = RSyInShService.select(SFilter.eq("shaftId", shaftId), SFilter.eq("projectId", projectId!!)).exec()
            val list = ArrayList<String>()
            val listf = ArrayList<SFilter>()
            for (rSyInSpBase in rSyInShaftBaseList){
                list.add(rSyInSpBase.sysId!!)
            }

            if (list.size>0){
                listf.add(SFilter.eq("projectId", projectId!!))
                listf.add(SFilter.not(SFilter.inList("SysID", list)))
            }else{
                listf.add(SFilter.eq("projectId", projectId!!))
            }
            val pageQuery = pageQuery(request, listf)
            pageQuery

        } catch (e: Exception) {
            e.printStackTrace()
            SQueryResponse(SResponseType.failure, e.message!!)
        }

    } // Function  unSpaceSys






} // Object GeneralSystemService