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
95
96
97
98
99
100
101
102
103
104
105
106
package cn.flightfeather.supervision.business.report.cols
 
import cn.flightfeather.supervision.business.report.BaseCols
import cn.flightfeather.supervision.business.report.DataSource
import cn.flightfeather.supervision.common.utils.Constant
import cn.flightfeather.supervision.common.utils.ExcelUtil
import java.time.Duration
import java.time.LocalDateTime
import java.time.ZoneId
 
class ColStrategy : BaseCols() {
    override fun onHeads(dataSource: DataSource): MutableList<MutableList<ExcelUtil.MyCell>> {
        return mutableListOf(mutableListOf(
            ExcelUtil.MyCell("整改跟踪提醒")
        ))
    }
 
    override fun onOneRow(rowData: DataSource.RowData): List<Any> {
        if (rowData.problems.isEmpty()) return listOf("")
 
        val strategyList = listOf(
            "1、存在问题超期3天不满7天未整改,由系统推送整改提醒;",
            "2、存在问题超期7天未整改,由技术服务部线上督促;",
            "3、巡查后10天或月末前3天,问题整改率低于50%,由数据应用部一对一督促,并于主管部门联动;",
            "4、问题审核或整改审核未开展或问题审核较巡查时间延后24小时以上或问题与整改时间间隔超过一周,项目管理人员应及时开展审核或后续应提升审核时效性;",
            "5、台账未按时提交,由技术服务部一对一督促;",
            "6、台账已部分提交,提交比例不足100%的,由数据应用部一对一督促;",
            "7、当月问题数超3个且全部未整改或连续两月问题整改率低于50%的场景,列为重点监管,由技术服务部当月增加不少于一次现场复核;",
            "8、连续两月台账提交比例低于50%的,由技术服务部当月增加一次现场或线上操作指导;",
            "9、台账审核较提交时间延后5日以上或月末前3日仍未审核的,由数据应用部及时开展;"
        )
 
        var result = ""
        val now = LocalDateTime.now()
 
        var cPros = 0//整改总数
        for (p in rowData.problems) {
            if (p.ischanged == true) {
                cPros++
                continue
            }
            val pTime = LocalDateTime.ofInstant(p.time?.toInstant(), ZoneId.systemDefault())
            val duration = Duration.between(pTime.toLocalDate(), now)
            val day = duration.toDays()
 
            when {
                day in 3..6 -> {
                    result += strategyList[0] + "\n"
                    break
                }
                day > 6 -> {
                    result += strategyList[1] + "\n"
                    break
                }
            }
        }
        //整改率
        val cPer = cPros.toDouble() / rowData.problems.size
        //巡查时间
        val sTime = LocalDateTime.ofInstant(rowData.subTask?.planstarttime?.toInstant(), ZoneId.systemDefault())
        val day1 = Duration.between(sTime.toLocalDate(), now).toDays()
        val lastDayOfMon = now.plusMonths(1).withDayOfMonth(1).minusDays(1)
        val day2 = Duration.between(lastDayOfMon.toLocalDate(), now.toLocalDate()).toDays()
        if (cPer < .5 && (day1 >= 10 || day2 <= 3)) result += strategyList[2] + "\n"
 
        //审核
        for (p in rowData.problems) {
            //问题审核或整改审核未开展
            when (p.extension3) {
                Constant.PROBLEM_UNCHECKED,
                Constant.CHANGE_UNCHECKED -> {
                    result += strategyList[3] + "\n"
                    break
                }
            }
            //问题审核较巡查时间延后24小时以上
            // TODO: 2022/7/20
 
            //问题与整改时间间隔超过一周
            if (p.changedtime != null) {
                val ct = LocalDateTime.ofInstant(p.changedtime?.toInstant(), ZoneId.systemDefault())
                val pt = LocalDateTime.ofInstant(p.time?.toInstant(), ZoneId.systemDefault())
                if (Duration.between(pt.toLocalDate(), ct.toLocalDate()).toDays() > 7) {
                    result += strategyList[3] + "\n"
                    break
                }
            }
 
 
        }
 
        //台账
        val rNum = rowData.ledgerRecords.size
        if (rNum == 0) result += strategyList[4] + "\n"
        if (rNum != 0 && rNum < rowData.ledgerCount) result += strategyList[5] + "\n"
 
        //7、当月问题数超3个且全部未整改或连续两月问题整改率低于50%的场景,列为重点监管,由技术服务部当月增加不少于一次现场复核;
        if (rowData.problems.size > 3 && cPros == 0) {
        }
 
        //8、连续两月台账提交比例低于50%的,由技术服务部当月增加一次现场或线上操作指导;
        //9、台账审核较提交时间延后5日以上或月末前3日仍未审核的,由数据应用部及时开展;
 
        return strategyList
    }
}