package cn.flightfeather.supervision.bgtask
|
|
import cn.flightfeather.supervision.domain.entity.LedgerMediaFile
|
import cn.flightfeather.supervision.domain.entity.LedgerRecord
|
import cn.flightfeather.supervision.domain.mapper.LedgerMediaFileMapper
|
import cn.flightfeather.supervision.domain.mapper.LedgerRecordMapper
|
import cn.flightfeather.supervision.infrastructure.utils.UUIDGenerator
|
import org.slf4j.Logger
|
import org.slf4j.LoggerFactory
|
import org.springframework.stereotype.Component
|
import tk.mybatis.mapper.entity.Example
|
import java.time.LocalDateTime
|
import java.time.ZoneId
|
import java.util.*
|
|
/**
|
* 台账自动复制任务
|
*/
|
@Component
|
class TaskLedgerCopy(
|
private val ledgerRecordMapper: LedgerRecordMapper,
|
private val ledgerMediaFileMapper: LedgerMediaFileMapper
|
) : BaseTimingTask() {
|
|
private val LOGGER: Logger? = LoggerFactory.getLogger(TaskLedgerCopy::class.java)
|
|
//台账复制的日期
|
var copyDay = 11
|
|
override val period: Long
|
get() = 1440L
|
|
override fun doTask(localtime: LocalDateTime) {
|
//1. 查询每个激活状态的用户需要复制的每种台账的最新一条记录;
|
ledgerRecordMapper.setRowNumber()
|
ledgerRecordMapper.setGroup()
|
val records = ledgerRecordMapper.getNeedCopyLedgers()
|
if (records.isEmpty()) return
|
|
LOGGER?.info("===========开始执行台账复制任务===============")
|
LOGGER?.info("=> 需复制的台账总数为:${records.size}")
|
var count = 0
|
val year = localtime.year
|
val month = localtime.monthValue
|
val day = localtime.dayOfMonth
|
records.forEach { lr ->
|
//台账去重判断
|
val r = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply {
|
createCriteria().andEqualTo("lrYear", year)
|
.andEqualTo("lrMonth", month)
|
.andEqualTo("lsSubtypeid", lr.lsSubtypeid)
|
.andEqualTo("lrSubmitid", lr.lrSubmitid)
|
})
|
if (r.isNotEmpty()) return@forEach
|
|
//获取记录对应的文件信息
|
val fileList = ledgerMediaFileMapper.selectByExample(Example(LedgerMediaFile::class.java).apply {
|
createCriteria().andEqualTo("lrGuid", lr.lrGuid)
|
})
|
if (fileList.size == 0) return@forEach
|
val file = fileList[0] ?: return@forEach
|
|
//修改记录信息,复制为新的台账
|
lr.lrGuid = UUIDGenerator.generate16ShortUUID()
|
lr.lrYear = year
|
lr.lrMonth = month.toByte()
|
lr.lrDay = day.toByte()
|
lr.lrIssubmitontime = true
|
lr.lrSubmitdate = Date.from(localtime.atZone(ZoneId.systemDefault()).toInstant())
|
lr.lrExtension2 = "copy"//表明是复制的台账
|
ledgerRecordMapper.insert(lr)
|
|
//修改对应的文件信息
|
file.apply {
|
mfGuid = UUIDGenerator.generate16ShortUUID()
|
lrGuid = lr.lrGuid
|
mfSavetime = Date()
|
}
|
count += ledgerMediaFileMapper.insert(file)
|
}
|
|
LOGGER?.info("=> 成功复制的台账数:${count}")
|
LOGGER?.info("===========台账复制任务完成===============")
|
}
|
|
/**
|
* 台账自动复制任务定为每月11号早上1点,(每月的10号为台账及时提交的最后期限)
|
*/
|
override fun execute(localtime: LocalDateTime) {
|
if (localtime.dayOfMonth == copyDay && localtime.hour == 1 && localtime.minute == 0) {
|
doTask(localtime)
|
}
|
}
|
}
|