package com.lanyuanxiaoyao.digtal.market.runner

import com.lanyuanxiaoyao.digtal.market.ArticleRepository
import com.lanyuanxiaoyao.digtal.market.sender.DingtalkSender
import com.lanyuanxiaoyao.digtal.market.sender.WxPusherSender
import jakarta.annotation.Resource
import org.slf4j.LoggerFactory
import org.springframework.data.domain.Sort
import org.springframework.scheduling.annotation.Scheduled
import org.springframework.stereotype.Service

@Service
class PushRunner : Runner {
    private val logger = LoggerFactory.getLogger(javaClass)

    @Resource
    private lateinit var articleRepository: ArticleRepository

    @Scheduled(cron = "0 30 9,12,15,18,21 * * ?")
    override fun run() {
        val articles = articleRepository.findAll({ root, _, builder ->
            builder.or(
                builder.equal(root.get<Boolean>("pushed"), false),
                builder.isNull(root.get<Boolean>("pushed")),
            )
        }, Sort.by(Sort.Direction.DESC, "createTime"))
        try {
            DingtalkSender().send("近期要闻", mapOf("articles" to articles.take(10)))
            WxPusherSender().send("近期发生的数据要素新闻", mapOf("articles" to articles.take(10)))
            articles.forEach { articleRepository.updatePushedById(it.id, true) }
        } catch (e: RuntimeException) {
            logger.error("发送失败", e)
        }
    }
}