package com.persagy.server.service.labsl

import com.persagy.database.SFilter
import com.persagy.mybatis.SMybatisDao
import com.persagy.server.datacenter.models.entities.dictnew.DefClass
import com.persagy.server.datacenter.models.entities.dictnew.DictMajor
import com.persagy.server.datacenter.models.entities.dictnew.DictProject
import com.persagy.server.models.labsl.EquipTypeLabsl
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.responses.SQueryResponse

/**
 * 设备服务
 * @author wx  <zhangweixin@sagacloud.com>
 * @date  2020/10/21 14:41
 */
object EquipTypeLabslService: Service<EquipTypeLabsl>(SMybatisDao(EquipTypeLabsl::class.java)) {

    /** 字典项目服务 */
    private val dictProjectService = SBaseService(SMybatisDao(DictProject::class.java))
    /** 对象类型 */
    private val defClassService = SBaseService(SMybatisDao(DefClass::class.java))
    /** 字典专业*/
    private val dictMajorService = SBaseService(SMybatisDao(DictMajor::class.java))

    /**
     * 设备对应的专业
     *
     * @param idList    id 列表
     * @return 返回结果
     */
    fun  equipMajor(idList: ArrayList<String>): SQueryResponse<DefClass> {
        try {
            /** 返回对象 */
            val sQueryResponse = SQueryResponse<DefClass>()
            /** 返回标记 */
            sQueryResponse.result = SResponseType.success
            if (idList.size>0){
                /** 项目 id */
                val projectId = SPageContext.getHeader("projectId")
                val equipList = select(SFilter.eq("projectId", projectId!!), SFilter.inList("id", idList)).exec()
                val setType = HashSet<String>()
                for (equip in equipList){
                    setType.add(equip.classCode!!)
                }
                /** 查询项目对应的集团 */
                val dictProject = dictProjectService.select(SFilter.eq("id", projectId!!)).entity()

                /** 查询类型信息 */
                val defClassList =
                    defClassService.select(
                        SFilter.eq("type", "group"),
                        SFilter.eq("groupCode", dictProject!!.groupCode!!),
                        SFilter.inList("code", setType.toList())
                    ).exec()
                val setMajor = HashSet<String>()
                for (defClass in defClassList){
                    setMajor.add(defClass.majorCode!!)
                }
                /** 专业类型列表 */
                val majorCodeList =
                    dictMajorService.select(
                        SFilter.inList("code", setMajor.toList())
                    ).exec()
                val majorList = ArrayList<DefClass>()
                for (majorCode in majorCodeList) {
                    val defClass = DefClass()
                    defClass.code = majorCode.code
                    defClass.name = majorCode.name
                    defClass.aliasCode = majorCode.aliasCode
                    defClass.aliasName = majorCode.aliasName
                    for (def in defClassList) {
                        if (def.majorCode == majorCode.code ) {
                            if (defClass.children.isNullOrEmpty()) {
                                defClass.children = ArrayList<DefClass>()
                            }
                            defClass.children!!.add(def)
                        }
                    }
                    majorList.add(defClass)
                }
                /** 返回的对象列表 */
                sQueryResponse.content = majorList
                /** 总数量 */
                sQueryResponse.total = majorList.size.toLong()
            } else {
                sQueryResponse.result = SResponseType.failure
                sQueryResponse.message = "项目下没有设备类型"
            }
            return  sQueryResponse
        } catch (e: Exception) {
            e.printStackTrace()
            return SQueryResponse(SResponseType.failure,e.message!!)
        }
    }



}