feiyu02
2024-11-19 752e00503f672ddfe2066afb6c235721a3a912b5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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)
        }
    }
}