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
|
import java.time.temporal.ChronoUnit
|
|
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.noRecord()) 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 day = pTime.toLocalDate().until(now.toLocalDate(), ChronoUnit.DAYS)
|
|
when {
|
//1、存在问题超期3天不满7天未整改,由系统推送整改提醒;
|
day in 3..6 -> {
|
result += strategyList[0] + "\n"
|
break
|
}
|
//2、存在问题超期7天未整改,由技术服务部线上督促;
|
day > 6 -> {
|
result += strategyList[1] + "\n"
|
break
|
}
|
}
|
}
|
//3、巡查后10天或月末前3天,问题整改率低于50%,由数据应用部一对一督促,并于主管部门联动;
|
//整改率
|
val cPer = cPros.toDouble() / rowData.problems.size
|
//巡查时间
|
val sTime = LocalDateTime.ofInstant(rowData.subTask?.planstarttime?.toInstant(), ZoneId.systemDefault())
|
val day1 = sTime.toLocalDate().until(now.toLocalDate(), ChronoUnit.DAYS)
|
val lastDayOfMon = now.plusMonths(1).withDayOfMonth(1).minusDays(1)
|
val day2 = lastDayOfMon.toLocalDate().until(now.toLocalDate(), ChronoUnit.DAYS)
|
if (cPer < .5 && (day1 >= 10 || day2 <= 3)) result += strategyList[2] + "\n"
|
|
//4、问题审核或整改审核未开展或问题审核较巡查时间延后24小时以上或问题与整改时间间隔超过一周,项目管理人员应及时开展审核或后续应提升审核时效性;
|
//审核
|
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 (pt.toLocalDate().until(ct.toLocalDate(), ChronoUnit.DAYS) > 7) {
|
result += strategyList[3] + "\n"
|
break
|
}
|
}
|
|
|
}
|
|
//5、台账未按时提交,由技术服务部一对一督促;
|
//台账
|
val rNum = rowData.ledgerRecords.size
|
if (rNum == 0) result += strategyList[4] + "\n"
|
//6、台账已部分提交,提交比例不足100%的,由数据应用部一对一督促;
|
if (rNum != 0 && rNum < rowData.ledgerCount) result += strategyList[5] + "\n"
|
|
//7、当月问题数超3个且全部未整改或连续两月问题整改率低于50%的场景,列为重点监管,由技术服务部当月增加不少于一次现场复核;
|
val lastMonData = rowData.lastOne()
|
if (rowData.problems.size > 3 && cPros == 0) {
|
result += strategyList[6] + "\n"
|
} else if (cPer < .5) {
|
if (!lastMonData.noRecord()) {
|
var lastCPer = 0
|
lastMonData.problems.forEach {
|
if (it.ischanged == true) {
|
lastCPer++
|
}
|
}
|
if (lastMonData.problems.size != 0 && (lastCPer.toDouble() / lastMonData.problems.size > .5)) {
|
result += strategyList[6] + "\n"
|
}
|
}
|
}
|
|
//8、连续两月台账提交比例低于50%的,由技术服务部当月增加一次现场或线上操作指导;
|
val thisMonLedgerPer = rowData.ledgerRecords.size.toDouble() / rowData.ledgerCount
|
if (thisMonLedgerPer < .5) {
|
val lastMonLedgerPer = lastMonData.ledgerRecords.size.toDouble() / lastMonData.ledgerCount
|
if (lastMonLedgerPer < .5) {
|
result += strategyList[7] + "\n"
|
}
|
}
|
//9、台账审核较提交时间延后5日以上或月末前3日仍未审核的,由数据应用部及时开展;
|
// TODO: 2022/7/26
|
|
if (result.isNotEmpty()) {
|
result = result.substring(0, result.length - 2)
|
}
|
|
return listOf(result)
|
}
|
}
|