| | |
| | | package cn.flightfeather.supervision.lightshare.service.impl |
| | | |
| | | import cn.flightfeather.supervision.business.AutoScore2 |
| | | import cn.flightfeather.supervision.business.autooutput.AopTaskCtrl |
| | | import cn.flightfeather.supervision.business.bgtask.AopTaskCtrl |
| | | import cn.flightfeather.supervision.business.autooutput.score.AopEvaluation |
| | | import cn.flightfeather.supervision.common.executor.BackgroundTaskCtrl |
| | | import cn.flightfeather.supervision.business.bgtask.ReportTaskCtrl |
| | | import cn.flightfeather.supervision.business.report.DataSource |
| | | import cn.flightfeather.supervision.business.report.DbMapper |
| | | import cn.flightfeather.supervision.business.report.file.ReportOne |
| | | import cn.flightfeather.supervision.business.report.file.ReportThree |
| | | import cn.flightfeather.supervision.business.report.file.ReportTwo |
| | | import cn.flightfeather.supervision.common.exception.ResponseErrorException |
| | | import cn.flightfeather.supervision.common.executor.BgTaskStatus |
| | | import cn.flightfeather.supervision.common.executor.BgTaskType |
| | | import cn.flightfeather.supervision.domain.ds1.entity.Domainitem |
| | | import cn.flightfeather.supervision.domain.ds1.entity.Evaluation |
| | | import cn.flightfeather.supervision.domain.ds1.entity.Subtask |
| | |
| | | import cn.flightfeather.supervision.common.utils.DateUtil |
| | | import cn.flightfeather.supervision.common.utils.Domain |
| | | import cn.flightfeather.supervision.domain.ds1.repository.EvaluationRep |
| | | import cn.flightfeather.supervision.domain.ds1.repository.TaskRep |
| | | import cn.flightfeather.supervision.lightshare.service.EvaluationService |
| | | import cn.flightfeather.supervision.lightshare.service.SearchService |
| | | import cn.flightfeather.supervision.lightshare.service.SubtaskService |
| | | import cn.flightfeather.supervision.lightshare.vo.AreaVo |
| | | import cn.flightfeather.supervision.lightshare.vo.AutoScoreResultVo |
| | | import cn.flightfeather.supervision.lightshare.vo.BaseResponse |
| | | import cn.flightfeather.supervision.lightshare.vo.* |
| | | import org.springframework.beans.factory.annotation.Autowired |
| | | import org.springframework.beans.factory.annotation.Value |
| | | import org.springframework.stereotype.Service |
| | | import tk.mybatis.mapper.entity.Example |
| | | import java.io.File |
| | | import java.net.URLEncoder |
| | | import java.util.* |
| | | import javax.servlet.http.HttpServletResponse |
| | | import kotlin.Comparator |
| | | |
| | | @Service |
| | | class EvaluationServiceImpl( |
| | | private val evaluationMapper: EvaluationMapper, |
| | | private val evaluationRep: EvaluationRep, |
| | | private val taskRep: TaskRep, |
| | | private val aopTaskCtrl: AopTaskCtrl, |
| | | private val searchService: SearchService, |
| | | private val dbMapper: DbMapper, |
| | | @Value("\${filePath}") private val filePath: String, |
| | | private val reportTaskCtrl: ReportTaskCtrl, |
| | | ) : EvaluationService { |
| | | |
| | | @Autowired |
| | | lateinit var subtaskService: SubtaskService |
| | | |
| | | @Autowired |
| | | lateinit var domainitemMapper: DomainitemMapper |
| | | |
| | | @Autowired |
| | | lateinit var subtaskMapper: SubtaskMapper |
| | | |
| | | @Autowired |
| | | lateinit var aopEvaluation: AopEvaluation |
| | | private var isAutoScoreRunning = false |
| | | |
| | | //获取某顶层任务下某个场景的街道评分排名 |
| | | override fun getRankOfTown(tguid: String, scensetypeid: String?): List<AreaVo> { |
| | | override fun getRankOfTown(tguid: String, scensetypeid: String?): List<EvaluateResVo> { |
| | | val evaluationlist = getRankInfo(tguid, scensetypeid, null) |
| | | var areaVolist = mutableListOf<AreaVo>() |
| | | var areaVolist = mutableListOf<EvaluateResVo>() |
| | | //考核类型是规范考核 |
| | | if (evaluationlist.isNotEmpty() && |
| | | Objects.equals(evaluationlist.get(0).ertype, Constant.RuleType.STANDARD.value)) { |
| | | Objects.equals(evaluationlist.get(0).ertype, Constant.RuleType.STANDARD.value) |
| | | ) { |
| | | //获取规范考核的考核界限(问题数量) |
| | | val example = Example(Domainitem::class.java) |
| | | val criteria = example.createCriteria() |
| | | criteria.andEqualTo("dcguid", Domain.STANDARDLEVEL.value) |
| | | val standardlevel:String? = domainitemMapper.selectByExample(example).get(0).value |
| | | val standardlevel: String? = domainitemMapper.selectByExample(example).get(0).value |
| | | //按街镇计算严重不规范场景数量并按百分比排序 |
| | | while (evaluationlist.isNotEmpty()) { |
| | | val tmplist = mutableListOf<Evaluation>() |
| | |
| | | val iterator: MutableIterator<Evaluation> = tmplist.iterator() |
| | | |
| | | val evaluation = evaluationlist.get(0)//获取一种街镇 |
| | | var areaVo = AreaVo() |
| | | var areaVo = EvaluateResVo() |
| | | areaVo = transform(areaVo, evaluation) |
| | | while (iterator.hasNext()){ |
| | | while (iterator.hasNext()) { |
| | | val tmp = iterator.next() |
| | | if (Objects.equals(tmp.towncode, evaluation.towncode)){ |
| | | if (Objects.equals(tmp.towncode, evaluation.towncode)) { |
| | | if (tmp.resultscorebef!!.toInt() >= standardlevel!!.toInt()) |
| | | areaVo.notstandardnum++ |
| | | areaVo.allsensenum++ |
| | |
| | | } |
| | | //考核类型是评分考核 |
| | | else if (evaluationlist.isNotEmpty() && |
| | | Objects.equals(evaluationlist.get(0).ertype, Constant.RuleType.SCORE.value)){ |
| | | Objects.equals(evaluationlist.get(0).ertype, Constant.RuleType.SCORE.value) |
| | | ) { |
| | | //获取评分考核的评分界限 |
| | | val example = Example(Domainitem::class.java) |
| | | val criteria = example.createCriteria() |
| | |
| | | val iterator: MutableIterator<Evaluation> = tmplist.iterator() |
| | | |
| | | val evaluation = evaluationlist.get(0)//获取一种街镇 |
| | | var areaVo = AreaVo() |
| | | var areaVo = EvaluateResVo() |
| | | areaVo = transform(areaVo, evaluation) |
| | | while (iterator.hasNext()){ |
| | | while (iterator.hasNext()) { |
| | | val tmp = iterator.next() |
| | | if (Objects.equals(tmp.towncode, evaluation.towncode)) { |
| | | if (tmp.resultscorebef!!.toInt() < scorelevellist.get(scorelevellist.size - 1).text!!.toInt()) |
| | |
| | | override fun delete(id: String): Int = evaluationMapper.deleteByPrimaryKey(id) |
| | | |
| | | //获取指定区域(顶层任务)指定场景的评分信息 |
| | | fun getRankInfo(tguid: String, scensetypeid: String?, ruletypeid: ByteArray?):MutableList<Evaluation>{ |
| | | fun getRankInfo(tguid: String, scensetypeid: String?, ruletypeid: ByteArray?): MutableList<Evaluation> { |
| | | val evaluationlist = mutableListOf<Evaluation>() |
| | | val subtaskVolist = subtaskService.findByTaskID(tguid) |
| | | subtaskVolist.forEach { |
| | |
| | | criteria.andEqualTo("scensetypeid", scensetypeid) |
| | | if (ruletypeid != null)//评分类型 |
| | | criteria.andEqualTo("ertype", ruletypeid) |
| | | else{ |
| | | else { |
| | | criteria.andEqualTo("ertype", Constant.RuleType.STANDARD.value) |
| | | val result = evaluationMapper.selectByExample(example)//查询是否有规范性评分表 |
| | | //没有规范表就查询评分表 |
| | | if (result.isEmpty()){ |
| | | if (result.isEmpty()) { |
| | | val example1 = Example(Evaluation::class.java) |
| | | val criteria1 = example1.createCriteria() |
| | | criteria1.andEqualTo("stguid", it.stguid)//子任务id |
| | |
| | | val result1 = evaluationMapper.selectByExample(example1) |
| | | if (result1.size == 1) |
| | | evaluationlist.add(result1.get(0)) |
| | | } |
| | | else |
| | | } else |
| | | if (result.size == 1) |
| | | evaluationlist.add(result.get(0)) |
| | | } |
| | |
| | | } |
| | | |
| | | //Evaluation传递数据给AreaVo |
| | | fun transform(areaVo: AreaVo, evaluation: Evaluation):AreaVo{ |
| | | fun transform(areaVo: EvaluateResVo, evaluation: Evaluation): EvaluateResVo { |
| | | areaVo.provincecode = evaluation.provincecode |
| | | areaVo.provincename = evaluation.provincename |
| | | areaVo.citycode = evaluation.citycode |
| | |
| | | } |
| | | |
| | | //按街道严重不规范场景百分比排序 |
| | | fun sort(areaVolist: MutableList<AreaVo>):MutableList<AreaVo>{ |
| | | Collections.sort(areaVolist, object : Comparator<AreaVo>{ |
| | | override fun compare(o1: AreaVo?, o2: AreaVo?): Int { |
| | | fun sort(areaVolist: MutableList<EvaluateResVo>): MutableList<EvaluateResVo> { |
| | | Collections.sort(areaVolist, object : Comparator<EvaluateResVo> { |
| | | override fun compare(o1: EvaluateResVo?, o2: EvaluateResVo?): Int { |
| | | var num1 = 0.0 |
| | | if (o1!!.allsensenum != 0) |
| | | num1 = (o1.notstandardnum/o1.allsensenum).toDouble() |
| | | num1 = (o1.notstandardnum / o1.allsensenum).toDouble() |
| | | var num2 = 0.0 |
| | | if (o2!!.allsensenum != 0) |
| | | num2 = (o2.notstandardnum/o2.allsensenum).toDouble() |
| | | num2 = (o2.notstandardnum / o2.allsensenum).toDouble() |
| | | return compareValues(num1, num2) |
| | | } |
| | | }) |
| | |
| | | |
| | | override fun findAutoEvaluation(areaVo: AreaVo): List<AutoScoreResultVo?>? { |
| | | //1. 查找历史记录,查看评估是否已存在 |
| | | // areaVo.scensetypeid ?: throw ResponseErrorException("查询时必须选择一个场景类型") |
| | | // val task = taskRep.findOneTask(areaVo) ?: throw ResponseErrorException("查询时必须选择一个场景类型") |
| | | return evaluationRep.findAutoScore(areaVo) |
| | | } |
| | | |
| | | override fun downloadAutoEvaluation(areaVo: AreaVo, response: HttpServletResponse): Boolean { |
| | | areaVo.scensetypeid ?: throw ResponseErrorException("必须选择一个场景类型") |
| | | val topTask = taskRep.findOneTask(areaVo) ?: throw ResponseErrorException("未找到符合条件的顶层任务") |
| | | val config = ExcelConfigVo( |
| | | topTask.tguid ?: "", |
| | | topTask.starttime, |
| | | topTask.endtime, |
| | | topTask.provincecode, |
| | | topTask.citycode, |
| | | topTask.districtcode, |
| | | topTask.towncode, |
| | | areaVo.scensetypeid?.toInt() |
| | | ) |
| | | |
| | | val dataSource = DataSource(config, dbMapper) |
| | | val t = ReportTwo(dataSource) |
| | | val fileName = t.getReportName() |
| | | val p = "$filePath/autoscore/" |
| | | val file = File(p + fileName) |
| | | if (config.forceUpdate || !file.exists()) { |
| | | val downloadUrl = "/autoscore/${fileName}" |
| | | reportTaskCtrl.startTask(t, downloadUrl) |
| | | return false |
| | | } else { |
| | | val fName = Base64.getEncoder().encodeToString(fileName.toByteArray()) |
| | | response.apply { |
| | | setHeader("Content-Disposition", "attachment;filename=$fName") |
| | | setHeader("fileName", fName) |
| | | addHeader("Access-Control-Expose-Headers", "fileName") |
| | | contentType = "application/vnd.ms-excel;charset=UTF-8" |
| | | setHeader("Pragma", "no-cache") |
| | | setHeader("Cache-Control", "no-cache") |
| | | setDateHeader("Expires", 0) |
| | | } |
| | | response.outputStream.write(file.readBytes()) |
| | | return true |
| | | } |
| | | } |
| | | } |