package com.persagy.server.service.base


import com.persagy.database.SAbstractDao
import com.persagy.database.extensions.keyValue
import com.persagy.server.datacenter.models.entities.base.BaseInfo
import com.persagy.server.synchronize.MessageHandler
import com.persagy.service.SObjectService
import com.persagy.service.SPageContext
import com.persagy.service.utils.SSpringContextUtil
import org.json.JSONArray
import org.json.JSONObject
import org.slf4j.LoggerFactory

/**
 * 服务基类
 *
 * @author 张维新
 */
open class Service<ENTITY : BaseInfo>(daoClass: SAbstractDao<ENTITY>) : SObjectService<ENTITY>(daoClass) {
    companion object {
        /** 日志 */
        private val logger = LoggerFactory.getLogger(Service::class.java)

        /** MQ消息对象 */
       val messageHandler by lazy {
            SSpringContextUtil.getBean(MessageHandler::class.java) as MessageHandler
        }
    } // Companion object

    /**
     * 创建成功回调函数
     *
     * @param   entityList          创建成功对象
     */
    override fun onCreateSuccess(entityList: ArrayList<ENTITY>) {
        val projectId = SPageContext.getHeader("ProjectId")
        entityList.forEach {
            val jsonObject = JSONObject()
            jsonObject.put("type", "1")
            jsonObject.put("projectId",projectId)
            jsonObject.put("id", it.keyValue("id"))
            /** 发送消息 */
            messageHandler!!.sendMessage(jsonObject.toString())
        }
        logger.debug("创建完成 =******************************************************************")
        return
    } // Function onCreateSuccess()

    /**
     * 更新成功能回调函数
     *
     * @param   entityList      更新成功对象列表
     */
    override fun onUpdateSuccess(entityList: ArrayList<ENTITY>) {
        val projectId = SPageContext.getHeader("ProjectId")
        val jsonObject = JSONObject()
        jsonObject.put("type", "7")
        jsonObject.put("projectId", projectId)
        val jsonArray = JSONArray()
        for (entity in entityList) {
            val jsonInfos = JSONObject()
            jsonInfos.put("id", entity.keyValue("id"))
            jsonArray.put(jsonInfos)
        }
        jsonObject.put("infos", jsonArray)
        logger.debug("修改发送消息$jsonObject")
        /** 发送消息 */
        messageHandler!!.sendMessage(jsonObject.toString())

        return
    } // Function onUpdateSuccess()

} // Class Service
