From 52a0c16de9b0955a5f092560b73f16e41684f97b Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期二, 31 十二月 2024 10:13:35 +0800 Subject: [PATCH] 1. 环信码生成时,如果在线场景当期没有评估(未巡查)结果,则延用历史最新一次的结果; 2. 新增跨时间跨月度的历史整改记录查询逻辑 3. 优化获取顶层任务和日任务的获取逻辑 --- src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt | 202 ++++++++++++++++++++++++++++++-------------------- 1 files changed, 120 insertions(+), 82 deletions(-) diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt index 1cdc743..e0f8796 100644 --- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt +++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt @@ -1,14 +1,19 @@ package cn.flightfeather.supervision.lightshare.service.impl +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.business.report.template.* +import cn.flightfeather.supervision.common.exception.BizException import cn.flightfeather.supervision.common.utils.* import cn.flightfeather.supervision.domain.ds1.entity.* import cn.flightfeather.supervision.domain.ds1.mapper.* +import cn.flightfeather.supervision.domain.ds1.repository.EvaluationRep +import cn.flightfeather.supervision.domain.ds1.repository.EvaluationRuleRep +import cn.flightfeather.supervision.domain.ds1.repository.SceneRep import cn.flightfeather.supervision.domain.ds2.mapper.LedgerRecordMapper import cn.flightfeather.supervision.domain.ds2.mapper.LedgerSubTypeMapper import cn.flightfeather.supervision.domain.ds2.mapper.UserMapMapper @@ -17,14 +22,13 @@ import cn.flightfeather.supervision.lightshare.vo.* import com.github.pagehelper.PageHelper import org.springframework.beans.BeanUtils +import org.springframework.beans.factory.annotation.Value import org.springframework.stereotype.Service import tk.mybatis.mapper.entity.Example import java.io.File import java.io.FileInputStream import java.io.FileOutputStream -import java.io.OutputStream import java.net.URLEncoder -import java.nio.charset.Charset import java.nio.charset.StandardCharsets import java.util.* import javax.servlet.http.HttpServletResponse @@ -35,61 +39,39 @@ */ @Service class SearchServiceImpl( - val userinfoMapper: UserinfoMapper, - val subtaskMapper: SubtaskMapper, - val scenseMapper: ScenseMapper, - val sceneConstructionSiteMapper: SceneConstructionSiteMapper, - val sceneMixingPlantMapper: SceneMixingPlantMapper, - val sceneStorageYardMapper: SceneStorageYardMapper, - val sceneWharfMapper: SceneWharfMapper, - val problemlistMapper: ProblemlistMapper, - val problemtypeMapper: ProblemtypeMapper, - val townMapper: TownMapper, - val mediafileMapper: MediafileMapper, - val scoreMapper: ScoreMapper, - val inspectionMapper: InspectionMapper, - val taskMapper: TaskMapper, - val monitorobjectversionMapper: MonitorobjectversionMapper, - val evaluationruleMapper: EvaluationruleMapper, - val evaluationsubruleMapper: EvaluationsubruleMapper2, - val evaluationMapper: EvaluationMapper, - val itemevaluationMapper: ItemevaluationMapper, - val ledgerSubTypeMapper: LedgerSubTypeMapper, - val ledgerRecordMapper: LedgerRecordMapper, - val userMapMapper: UserMapMapper, - val taskService: TaskService + val userinfoMapper: UserinfoMapper, + val subtaskMapper: SubtaskMapper, + val scenseMapper: ScenseMapper, + val sceneConstructionSiteMapper: SceneConstructionSiteMapper, + val sceneMixingPlantMapper: SceneMixingPlantMapper, + val sceneStorageYardMapper: SceneStorageYardMapper, + val sceneWharfMapper: SceneWharfMapper, + val problemlistMapper: ProblemlistMapper, + val problemtypeMapper: ProblemtypeMapper, + val townMapper: TownMapper, + val mediafileMapper: MediafileMapper, + val scoreMapper: ScoreMapper, + val inspectionMapper: InspectionMapper, + val taskMapper: TaskMapper, + val monitorobjectversionMapper: MonitorobjectversionMapper, + val evaluationruleMapper: EvaluationruleMapper, + val evaluationsubruleMapper: EvaluationsubruleMapper2, + val evaluationMapper: EvaluationMapper, + val itemevaluationMapper: ItemevaluationMapper, + val ledgerSubTypeMapper: LedgerSubTypeMapper, + val ledgerRecordMapper: LedgerRecordMapper, + val userMapMapper: UserMapMapper, + val taskService: TaskService, + private val evaluationRep: EvaluationRep, + private val evaluationRuleRep: EvaluationRuleRep, + private val sceneRep: SceneRep, + @Value("\${filePath}") var filePath: String, + @Value("\${imgPath}") var imgPath: String, + private val dbMapper: DbMapper, + private val reportTaskCtrl: ReportTaskCtrl, ) : SearchService { - private val dateUtil = DateUtil() - - override fun writeToFile(config: ExcelConfigVo, mode:Int) { - val dbMapper = DbMapper( - scenseMapper, - problemlistMapper, - problemtypeMapper, - subtaskMapper, - monitorobjectversionMapper, - sceneConstructionSiteMapper, - sceneMixingPlantMapper, - sceneStorageYardMapper, - sceneWharfMapper, - taskMapper, - evaluationruleMapper, evaluationsubruleMapper, evaluationMapper, itemevaluationMapper, - ledgerSubTypeMapper, ledgerRecordMapper, userinfoMapper, userMapMapper, townMapper - ) - val dataSource = DataSource(config, dbMapper) - val t = when (mode) { - 8 -> ReportOne(dataSource) - 9 -> ReportTwo(dataSource) - 10 -> ReportThree(dataSource) - - else -> null - } -// t?.execute() - t?.toFile("target/") - } - - override fun getExcel(config: ExcelConfigVo, response: HttpServletResponse): Boolean { + override fun writeToFile(config: ExcelConfigVo, mode: Int) { val dbMapper = DbMapper( scenseMapper, problemlistMapper, @@ -105,6 +87,19 @@ ledgerSubTypeMapper, ledgerRecordMapper, userinfoMapper, userMapMapper, townMapper ) val dataSource = DataSource(config, dbMapper) + val t = when (mode) { + 8 -> ReportOne(dataSource) + 9 -> ReportTwo(dataSource) + 10 -> ReportThree(dataSource) + + else -> null + } +// t?.execute() + t?.toFile("target/") + } + + override fun getExcel(config: ExcelConfigVo, response: HttpServletResponse): Boolean { + val dataSource = DataSource(config, dbMapper) val t = when (config.mode) { 1 -> ReportOne(dataSource) 2 -> ReportTwo(dataSource) @@ -113,25 +108,26 @@ else -> ReportOne(dataSource) } val fileName = t.getReportName() - val fName = URLEncoder.encode(fileName, "UTF-8") - 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) - } - - val p = Constant.DEFAULT_FILE_PATH + "/files/autoscore/" + val p = "$filePath/autoscore/" val file = File(p + fileName) if (config.forceUpdate || !file.exists()) { - t.toFile(p) + 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 } - response.outputStream.write(file.readBytes()) - - return true } override fun getSubTaskDetail(config: ExcelConfigVo): SubTaskTableVo { @@ -250,8 +246,9 @@ } //寤虹珛绗竴灞傜洰褰曪紝鍖呭惈鎵�鏈夌殑浠诲姟 - val time = dateUtil.DateToString(Date(), "yyyy-MM-dd_HH-mm-ss") - var basePath = Constant.DEFAULT_FILE_PATH + File.separator + "images" + File.separator + "temp" + File.separator + time + val time = DateUtil.DateToString(Date(), "yyyy-MM-dd_HH-mm-ss") + var basePath = + imgPath + File.separator + "temp" + File.separator + time var file = File(basePath) var i = 1 while (file.exists() && i <= 100) { @@ -302,7 +299,8 @@ mediafileMapper.selectByExample(Example(Mediafile::class.java).apply { createCriteria().andEqualTo("businessguid", p.guid) }).forEach { m -> - val picPath = Constant.DEFAULT_FILE_PATH + File.separator + "images" + File.separator + m.extension1 + m.guid + ".jpg" + val picPath = + imgPath + File.separator + m.extension1 + m.guid + ".jpg" val fromFile = File(picPath) val picName = p.problemname + "_" + p.location + "($y).jpg" val toFile = File(pPath + File.separator + picName) @@ -341,8 +339,9 @@ override fun downloadPic2(sceneType: Int, topTaskId: String, response: HttpServletResponse): HttpServletResponse { //寤虹珛绗竴灞傜洰褰曪紝鍖呭惈鎵�鏈夌殑浠诲姟 val topTask = taskMapper.selectByPrimaryKey(topTaskId) - val time = dateUtil.DateToString(Date(), "yyyy-MM-dd_HH-mm-ss") - val basePath = Constant.DEFAULT_FILE_PATH + File.separator + "images" + File.separator + "temp" + File.separator + topTask.name + val time = DateUtil.DateToString(Date(), "yyyy-MM-dd_HH-mm-ss") + val basePath = + imgPath + File.separator + "temp" + File.separator + topTask.name val file = File(basePath) if (!file.exists()) { file.mkdirs() @@ -361,7 +360,7 @@ //寤虹珛涓�涓瓙浠诲姟鏂囦欢澶� var subTaskFilePath = "${basePath}${File.separator}(${ - dateUtil.DateToString( + DateUtil.DateToString( it.planstarttime, DateUtil.DateStyle.YYYY_MM_DD_CN ) @@ -411,7 +410,7 @@ u.forEach { f -> val picPath = - Constant.DEFAULT_FILE_PATH + File.separator + "images" + File.separator + f.extension1 + f.guid + ".jpg" + imgPath + File.separator + f.extension1 + f.guid + ".jpg" val fromFile = File(picPath) val picName = f.description val toFile = File(pPath + File.separator + picName) @@ -451,7 +450,13 @@ return response } - override fun searchScore4JingAn(token: String, year: Int, month: Int, page: Int?, perPage: Int?): BaseResponse<List<ScoreVo>> { + override fun searchScore4JingAn( + token: String, + year: Int, + month: Int, + page: Int?, + perPage: Int?, + ): BaseResponse<List<ScoreVo>> { if (token != "jingan") { return BaseResponse(false) } @@ -474,7 +479,12 @@ return BaseResponse(true, head = DataHead(p.pageNum, p.pages), data = result) } - override fun searchSubTaskByKeyword(userId: String, keyword: String, page: Int, perPage: Int): BaseResponse<List<SubtaskVo>> { + override fun searchSubTaskByKeyword( + userId: String, + keyword: String, + page: Int, + perPage: Int, + ): BaseResponse<List<SubtaskVo>> { val userInfo = userinfoMapper.selectByPrimaryKey(userId) if (userInfo.usertypeid?.toInt() == 3) return BaseResponse(false, "浼佷笟鐢ㄦ埛鏃犳煡璇㈡潈闄�")//浼佷笟鐢ㄦ埛鏃犳硶鏌ヨ val result = mutableListOf<SubtaskVo>() @@ -516,10 +526,12 @@ evaluationruleMapper, evaluationsubruleMapper, evaluationMapper, itemevaluationMapper, ledgerSubTypeMapper, ledgerRecordMapper, userinfoMapper, userMapMapper, townMapper ) - val task = taskService.getByDistrictCode(config.districtCode, config.startTime)?.takeIf { it.isNotEmpty() }?.get(0) + val task = + taskService.getByDistrictCode(config.districtCode, config.startTime).takeIf { it.isNotEmpty() }?.get(0) config.topTaskGuid = task?.tguid ?: "" + config.allScene = false val dataSource = mutableListOf<DataSource>() - config.sceneType = Constant.ScenseType.TYPE1.value.toInt() +// config.sceneType = Constant.SceneType.TYPE1.value.toInt() dataSource.add(DataSource(config, dbMapper)) // val config2 = config.copy(sceneType = Constant.ScenseType.TYPE2.value.toInt()) @@ -537,4 +549,30 @@ return BaseTableVo(result.first, result.second) } + + override fun getScoreDetail(subTaskId: String): ScoreDetail { + //鍦烘櫙淇℃伅 + val scene = sceneRep.findBySubTask(subTaskId) + //鎬诲垎 + val evaluation = evaluationRep.findBySubtask(subTaskId) + //瀛愯鍒欓�愭潯寰楀垎 + val subRuleScores = evaluationRep.findItemEvaluation(subTaskId) + if (subRuleScores.isEmpty()) throw BizException("鏃犺瘎浼拌褰�") + //璇勫垎鎬昏鍒� + val rule = evaluationRuleRep.findAutoEvaluationRule(subTaskId) ?: throw BizException("鏈壘鍒扮浉鍏宠嚜鍔ㄨ瘎浼拌鍒�") + //鎬昏鍒欏搴旂殑璇勫垎瀛愯鍒� + val subRules = evaluationRuleRep.findSubRule(rule.guid) + //鏌ヨ缁撴灉 + val result = ScoreDetail() + result.status = if (scene?.extension1.equals("1")) "鍦ㄥ缓" else "瀹屽伐" + + result.updateTime = evaluation?.updatedate + subRules.forEach { + it.ertype ?: return@forEach + result.addDetail(result.details, it, it.ertype!! - 1, subRuleScores, true) + } + result.calScore() + + return result + } } \ No newline at end of file -- Gitblit v1.9.3