From b6c29718e10e25a6a49fe9538f554371e1560720 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期一, 25 七月 2022 15:50:22 +0800 Subject: [PATCH] 1. 调试监管统计文件下载接口; 2. 新增自动评分刷新接口; 3. 针对前端页面,调整部分接口 --- src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/SearchServiceImpl.kt | 993 +++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 638 insertions(+), 355 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 db25309..4aee9a5 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,8 +1,17 @@ package cn.flightfeather.supervision.lightshare.service.impl +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.utils.* import cn.flightfeather.supervision.domain.ds1.entity.* import cn.flightfeather.supervision.domain.ds1.mapper.* +import cn.flightfeather.supervision.domain.ds2.mapper.LedgerRecordMapper +import cn.flightfeather.supervision.domain.ds2.mapper.LedgerSubTypeMapper +import cn.flightfeather.supervision.domain.ds2.mapper.UserMapMapper import cn.flightfeather.supervision.lightshare.service.SearchService import cn.flightfeather.supervision.lightshare.vo.* import com.github.pagehelper.PageHelper @@ -12,6 +21,9 @@ 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 @@ -22,52 +34,126 @@ */ @Service class SearchServiceImpl( - val userinfoMapper: UserinfoMapper, - val subtaskMapper: SubtaskMapper, - val scenseMapper: ScenseMapper, - val problemlistMapper: ProblemlistMapper, - val problemtypeMapper: ProblemtypeMapper, - val townMapper: TownMapper, - val mediafileMapper: MediafileMapper, - val scoreMapper: ScoreMapper, - val inspectionMapper: InspectionMapper, - val taskMapper: TaskMapper -): SearchService { + 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, +) : SearchService { private val dateUtil = DateUtil() - override fun writeToFile(config: ExcelConfigVo) { - val fileName = "e:/${DateUtil().DateToString(Date(), "yyyy-MM-ddhhmmss")}.xls" - val out = FileOutputStream(fileName) - val heads = getTableTitles() - val contents = getTableContents(config) - ExcelUtil.write2(out, heads, contents) + 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) { +// //闂涓庢暣鏀硅窡韪眹鎬昏〃 +// 0 -> ProDetailSummary(dataSource) +// //鍒嗚闀囬棶棰樻暣鏀瑰垎鏋愭眹鎬昏〃 +// 1 -> ProAnalysisSummary(dataSource) +// +// //瑙勮寖鎬ц瘎浼拌鎯呰〃 +// 2 -> ScoreDetailSummary(dataSource) +// //鍒嗚闀囪鑼冩�у垎鏋愯〃 +// 3 -> ScoreAnalysisSummary(dataSource) +// +// //闂涓庢暣鏀瑰垎绫荤粺璁¤〃 +// 4 -> ProTypeDetailSummary(dataSource) +// //闂涓庢暣鏀瑰垎绫绘帓鍚� +// 5 -> ProTypeRankSummary(dataSource) +// //鏈堝害涓昏鎴栧吀鍨嬮棶棰樺垎鏋愯〃 +// 6 -> ProTypeRankMainSummary(dataSource) +// //宸ュ湴鏂藉伐闃舵闂鍒嗙被鍒嗘瀽琛� +// 7 -> ProTypeStatusSummary(dataSource) + + 8 -> ReportOne(dataSource) + 9 -> ReportTwo(dataSource) + 10 -> ReportThree(dataSource) + + else -> null + } +// t?.execute() + t?.toFile("target/") } - override fun getExcel(config: ExcelConfigVo, response: HttpServletResponse): HttpServletResponse { + override fun getExcel(config: ExcelConfigVo, response: HttpServletResponse): Boolean { + 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 (config.mode) { + 1 -> ReportOne(dataSource) + 2 -> ReportTwo(dataSource) + 3 -> ReportThree(dataSource) - val fileName = "${DateUtil().DateToString(Date(), "yyyy-MM-dd hh:mm:ss")}.xls" + else -> ReportOne(dataSource) + } + val fileName = t.getReportName() + val fName = URLEncoder.encode(fileName, "UTF-8") response.apply { - setHeader("Content-Disposition", "attachment;filename=$fileName") - setHeader("fileName", fileName) + 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 heads = getTableTitles() - val contents = getTableContents(config) + val p = Constant.DEFAULT_FILE_PATH + "/files/autoscore/" + val file = File(p + fileName) + if (config.forceUpdate || !file.exists()) { + t.toFile(p) + } + response.outputStream.write(file.readBytes()) - val out = response.outputStream - ExcelUtil.write2(out, heads, contents) - - return response + return true } override fun getSubTaskDetail(config: ExcelConfigVo): SubTaskTableVo { - val titles = getTableTitles2() - val content = getTableContents2(config) + val titles = getTableTitles(config.sceneType, config.districtCode) + val content = getTableContents(config, titles.size) return SubTaskTableVo(titles, content) } @@ -94,19 +180,19 @@ } } else { createCriteria() - .andEqualTo("tguid", config.topTaskGuid) - .andGreaterThanOrEqualTo("planstarttime", config.startTime) - .andLessThanOrEqualTo("planendtime", config.endTime).apply { - config.provinceCode?.let { - andEqualTo("provincecode", it) - } - config.cityCode?.let { - andEqualTo("citycode", it) - } - config.districtCode?.let { - andEqualTo("districtcode", it) - } + .andEqualTo("tguid", config.topTaskGuid) + .andGreaterThanOrEqualTo("planstarttime", config.startTime) + .andLessThanOrEqualTo("planendtime", config.endTime).apply { + config.provinceCode?.let { + andEqualTo("provincecode", it) } + config.cityCode?.let { + andEqualTo("citycode", it) + } + config.districtCode?.let { + andEqualTo("districtcode", it) + } + } } orderBy("planstarttime") } @@ -153,7 +239,7 @@ } //寤虹珛绗竴灞傜洰褰曪紝鍖呭惈鎵�鏈夌殑浠诲姟 - val time = DateUtil().DateToString(Date(), "yyyy-MM-dd_HH-mm-ss") + 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 var file = File(basePath) var i = 1 @@ -163,7 +249,7 @@ i++ } if (file.exists()) { - FileUtil().delAllFile(basePath) + FileUtil.delAllFile(basePath) } else { file.mkdirs() } @@ -180,7 +266,7 @@ i++ } if (sFile.exists()) { - FileUtil().delAllFile(subTaskFilePath) + FileUtil.delAllFile(subTaskFilePath) } else { sFile.mkdirs() } @@ -196,7 +282,7 @@ i++ } if (pFile.exists()) { - FileUtil().delAllFile(pPath) + FileUtil.delAllFile(pPath) } else { pFile.mkdirs() } @@ -209,7 +295,7 @@ val fromFile = File(picPath) val picName = p.problemname + "_" + p.location + "($y).jpg" val toFile = File(pPath + File.separator + picName) - FileUtil().copy(fromFile, toFile) + FileUtil.copy(fromFile, toFile) y++ } } @@ -241,14 +327,10 @@ return response } - override fun downloadPic2( - sceneType: Int, - topTaskId: String, - response: HttpServletResponse - ): HttpServletResponse { + 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 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 file = File(basePath) if (!file.exists()) { @@ -281,7 +363,7 @@ i++ } if (sFile.exists()) { - FileUtil().delAllFile(subTaskFilePath) + FileUtil.delAllFile(subTaskFilePath) } else { sFile.mkdirs() } @@ -311,7 +393,7 @@ i++ } if (pFile.exists()) { - FileUtil().delAllFile(pPath) + FileUtil.delAllFile(pPath) } else { pFile.mkdirs() } @@ -322,7 +404,7 @@ val fromFile = File(picPath) val picName = f.description val toFile = File(pPath + File.separator + picName) - FileUtil().copy(fromFile, toFile) + FileUtil.copy(fromFile, toFile) } } } @@ -381,304 +463,6 @@ return BaseResponse(true, head = DataHead(p.pageNum, p.pages), data = result) } - - - private fun getTableTitles(): List<String> = listOf( - "搴忓彿", "浠诲姟", "鍦烘櫙", "缁忓害", "绾害", - "绫诲瀷", - "寮�濮嬫椂闂�", "缁撴潫鏃堕棿", - "鐘舵��", "缁勯暱", - "缁勫憳", "闂绫诲瀷","闂璇︽儏", "琛楅晣", "瀹℃牳" - ) - - /** - * 鐩告瘮浜巊etTableContents() 锛屽垹鍑忎簡閮ㄥ垎鍒� - */ - private fun getTableTitles2(): List<String> = listOf( -// "搴忓彿", - "浠诲姟", -// "鍦烘櫙", "缁忓害", "绾害", - "绫诲瀷", - "寮�濮嬫椂闂�", -// "缁撴潫鏃堕棿", - "鐘舵��", "缁勯暱", - "缁勫憳", "闂绫诲瀷","闂璇︽儏", "琛楅晣", "瀹℃牳" - ) - - private fun getTableContents(config: ExcelConfigVo): List<Array<Any>> { - val townName = if (config.townCode == null) { - null - } else { - val l = townMapper.selectByExample(Example(Town::class.java).apply { - createCriteria().andEqualTo("towncode", config.townCode) - }) - if (l.isNotEmpty()) { - l[0].townname - } else { - null - } - } - val subTaskExample = Example(Subtask::class.java).apply { - if (config.subTaskIdList != null && config.subTaskIdList.isNotEmpty()) { - createCriteria().apply { - config.subTaskIdList.forEach { - orEqualTo("stguid", it) - } - } - } else { - createCriteria() - .andEqualTo("tguid", config.topTaskGuid) - .andGreaterThanOrEqualTo("planstarttime", config.startTime) - .andLessThanOrEqualTo("planendtime", config.endTime).apply { - config.provinceCode?.let { - andEqualTo("provincecode", it) - } - config.cityCode?.let { - andEqualTo("citycode", it) - } - config.districtCode?.let { - andEqualTo("districtcode", it) - } -// config.townCode?.let { -// andEqualTo("towncode", it) -// } - } - } - orderBy("planstarttime") - } - - val contents = mutableListOf<Array<Any>>() - - val subTasks = mutableListOf<Subtask>() - var i = 1 - subtaskMapper.selectByExample(subTaskExample).forEach { - //鏌ヨ璇ヤ换鍔″搴旂殑鍦烘櫙 - val scene = scenseMapper.selectByPrimaryKey(it.scenseid) - - //鏍规嵁鍦烘櫙鏉′欢绛涢�� - val need = if (config.sceneType != null) { - scene.typeid == config.sceneType.toByte() - } else { - true - } - if (need) { - //璁板綍鏌ヨ鍒板瓙浠诲姟 - subTasks.add(it) - - val problemTypes = mutableListOf<String>() - val problems = mutableListOf<String>() - val districts = mutableListOf<String>() - val checkStatus= mutableListOf<String>() - - //鏌ヨ瀛愪换鍔″搴旂殑闂锛屽苟涓旀牴鎹潯浠惰繘琛岀瓫閫� - val problemlistExample = Example(Problemlist::class.java).apply { - createCriteria().andEqualTo("stguid", it.stguid).apply { - config.problemName?.let {p-> - andEqualTo("problemname", p) - } - townName?.let {t-> - andLike("location", "%$t%") - } - } - } - - var y=1 - problemlistMapper.selectByExample(problemlistExample).forEach problemType@{p-> - val result = problemtypeMapper.selectByPrimaryKey(p.ptguid) - if (config.problemTypeName != null) { - if (result.typename != config.problemTypeName) { - return@problemType - } - } - problemTypes.add(result.typename ?: "") - problems.add("$y銆�${p.problemname}") - districts.add(p.location ?: "") - val status = when (p.extension3) { - Constant.PROBLEM_UNCHECKED -> "鏈鏍�" - Constant.PROBLEM_CHECK_PASS-> "閫氳繃" - Constant.PROBLEM_CHECK_FAIL -> "鏈�氳繃" - else->"鏈鏍�" - } - checkStatus.add(status) - y++ - } - - - //褰撴湁闂浣滀负绛涢�夋潯浠舵椂锛屽鏋滄病鏈夋壘鍒板搴旈棶棰橈紝鍒欒娆′换鍔″幓闄� - if ( (config.problemTypeName != null || config.problemName != null || townName != null) - && (problemTypes.isEmpty() && problems.isEmpty())) { - return@forEach - } - - val rowContent = arrayOf<Any>( - "$i", it.name ?: "", it.scensename ?: "", scene.longitude.toString(), scene.latitude.toString(), - scene.type ?: "", - DateUtil().DateToString(it.executionstarttime, "yyyy-MM-dd HH:mm:ss") ?: "", DateUtil().DateToString(it.executionendtime, "yyyy-MM-dd hh:mm:ss") ?: "", - it.status ?: "", it.assessorrealname?.replace("#", "銆�") ?: "", - it.executorrealtimes?.replace("#", "銆�") ?: "", problemTypes.toTypedArray(), problems.toTypedArray(), districts.toTypedArray(), checkStatus.toTypedArray() - ) - - contents.add(rowContent) - i++ - } - } - - return contents - } - - /** - * 鐩告瘮浜巊etTableContents() 锛屽垹鍑忎簡閮ㄥ垎鍒� - */ - private fun getTableContents2(config: ExcelConfigVo): List<Array<Any>> { - val townName = if (config.townCode == null) { - null - } else { - val l = townMapper.selectByExample(Example(Town::class.java).apply { - createCriteria().andEqualTo("towncode", config.townCode) - }) - if (l.isNotEmpty()) { - l[0].townname - } else { - null - } - } - val subTaskExample = Example(Subtask::class.java).apply { - if (config.subTaskIdList != null && config.subTaskIdList.isNotEmpty()) { - createCriteria().apply { - config.subTaskIdList.forEach { - orEqualTo("stguid", it) - } - } - } else { - createCriteria() - .andEqualTo("tguid", config.topTaskGuid) - .andGreaterThanOrEqualTo("planstarttime", config.startTime) - .andLessThanOrEqualTo("planendtime", config.endTime).apply { - config.provinceCode?.let { - andEqualTo("provincecode", it) - } - config.cityCode?.let { - andEqualTo("citycode", it) - } - config.districtCode?.let { - andEqualTo("districtcode", it) - } -// config.townCode?.let { -// andEqualTo("towncode", it) -// } - } - } - orderBy("planstarttime") - } - - val contents = mutableListOf<Array<Any>>() - - val subTasks = mutableListOf<Subtask>() - var i = 1 - subtaskMapper.selectByExample(subTaskExample).forEach { - //鏌ヨ璇ヤ换鍔″搴旂殑鍦烘櫙 - val scene = scenseMapper.selectByPrimaryKey(it.scenseid) - - //鏍规嵁鍦烘櫙鏉′欢绛涢�� - val need = if (config.sceneType != null) { - scene.typeid == config.sceneType.toByte() - } else { - true - } - if (need) { - //璁板綍鏌ヨ鍒板瓙浠诲姟 - subTasks.add(it) - - val problemTypes = mutableListOf<String>() - val problems = mutableListOf<String>() - val districts = mutableListOf<String>() - val checkStatus= mutableListOf<String>() - - //鏌ヨ瀛愪换鍔″搴旂殑闂锛屽苟涓旀牴鎹潯浠惰繘琛岀瓫閫� - val problemlistExample = Example(Problemlist::class.java).apply { - createCriteria().andEqualTo("stguid", it.stguid).apply { - config.problemName?.let {p-> - andEqualTo("problemname", p) - } - townName?.let {t-> - andLike("location", "%$t%") - } - } - } - - var y=1 - problemlistMapper.selectByExample(problemlistExample).forEach problemType@{p-> - val result = problemtypeMapper.selectByPrimaryKey(p.ptguid) - if (config.problemTypeName != null) { - if (result?.typename != config.problemTypeName) { - return@problemType - } - } - problemTypes.add(result?.typename ?: "") - problems.add("$y銆�${p.problemname}") - districts.add(p.location ?: "") - val status = when (p.extension3) { - Constant.PROBLEM_UNCHECKED -> "鏈鏍�" - Constant.PROBLEM_CHECK_PASS-> "閫氳繃" - Constant.PROBLEM_CHECK_FAIL -> "鏈�氳繃" - else->"鏈鏍�" - } - checkStatus.add(status) - y++ - } - - - //褰撴湁闂浣滀负绛涢�夋潯浠舵椂锛屽鏋滄病鏈夋壘鍒板搴旈棶棰橈紝鍒欒娆′换鍔″幓闄� - if ( (config.problemTypeName != null || config.problemName != null || townName != null) - && (problemTypes.isEmpty() && problems.isEmpty())) { - return@forEach - } - -// val lineMaxSize =3 -// -// val leader = it.assessorrealname?.split("#") -// val leaderStr = StringBuilder() -// for (t in 0 until (leader?.size ?: 0)) { -// if (t > 0) { -// leaderStr.append("銆�") -// } -// if (t == lineMaxSize - 1) { -// leaderStr.append("\r\n") -// } -// leaderStr.append(leader?.get(t)) -// } -// -// val member = it.executorrealtimes?.split("#") -// val memberStr = StringBuilder() -// for (t in 0 until (member?.size ?: 0)) { -// if (t > 0) { -// memberStr.append("銆�") -// } -// if (t == lineMaxSize - 1) { -// memberStr.append("\r\n") -// } -// memberStr.append(member?.get(t)) -// } - - val rowContent = arrayOf<Any>( -// "$i", - it.name ?: "", -// it.scensename ?: "", scene.longitude.toString(), scene.latitude.toString(), - scene.type ?: "", - DateUtil().DateToString(it.executionstarttime, "yyyy-MM-dd HH:mm:ss") ?: "", -// DateUtil().DateToString(it.executionendtime, "yyyy-MM-dd hh:mm:ss") ?: "", - it.status ?: "", it.assessorrealname?.replace("#", "銆�") ?: "", - it.executorrealtimes?.replace("#", "銆�") ?: "", problemTypes.toTypedArray(), problems.toTypedArray(), districts.toTypedArray(), checkStatus.toTypedArray() - ) - - contents.add(rowContent) - i++ - } - } - - return contents - } - 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, "浼佷笟鐢ㄦ埛鏃犳煡璇㈡潈闄�")//浼佷笟鐢ㄦ埛鏃犳硶鏌ヨ @@ -688,7 +472,8 @@ createCriteria().andLike("name", "%${keyword}%") .apply { when (userInfo.usertypeid?.toInt()) { - 0 -> {} //绠$悊鍛樼敤鎴锋煡璇㈡棤鍏朵粬闄愬埗 + 0 -> { + } //绠$悊鍛樼敤鎴锋煡璇㈡棤鍏朵粬闄愬埗 1 -> andLike("executorguids", "%${userId}%")//瀵逛簬涓�鑸殑宸℃煡浜哄憳锛屽彧鑳芥煡璇㈠埌鑷繁鍙備笌鐨勫瓙浠诲姟 2 -> andEqualTo("districtcode", userInfo.dGuid)//姝ゅ瀵逛簬鏀垮簻鐢ㄦ埛锛宒Guid瀛樺偍鐨勬槸鍖哄幙缂栧彿 } @@ -700,6 +485,504 @@ result.add(vo) } - return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages) ,data = result) + return BaseResponse(true, head = DataHead(pageInfo.pageNum, pageInfo.pages), data = result) + } + + + private fun getTable(mode: Int, config: ExcelConfigVo): Pair<MutableList<Array<Any>>, MutableList<Array<Any>>> { + //鏁版嵁婧� + val dataList = getTableDataSource(config) + //鐢熸垚琛ㄦ牸 + val head = mutableListOf<MutableList<Any>>() + val contents = mutableListOf<MutableList<Any>>() + + getSceneName(head, contents, dataList) + + when (mode) { + // 闂鍒嗗竷 + 1 -> { + getProblemDistribution(head, contents, dataList, config) + } + 2 -> { + getInspectionInfo(head, contents, dataList, config) + } + 3 -> { + + } + } + val h = mutableListOf<Array<Any>>() + val c = mutableListOf<Array<Any>>() + head.forEach { h.add(it.toTypedArray()) } + contents.forEach { c.add(it.toTypedArray()) } + c.sortBy { + it[0] as Int + } + + return Pair(h, c) + } + + // 琛ㄥご锛氬満鏅悕 + private fun getSceneName(head: MutableList<MutableList<Any>>, contents: MutableList<MutableList<Any>>, dataList: List<Subtask>) { + head.add(mutableListOf(ExcelUtil.MyCell("琛ㄥ崟缂栧彿"), ExcelUtil.MyCell("鍞竴搴忓彿"), ExcelUtil.MyCell("鍦烘櫙鍚嶇О"))) + dataList.forEach {subtask -> + val row = mutableListOf<Any>() + //鏌ヨ璇ヤ换鍔″搴旂殑鍦烘櫙 + val scene = scenseMapper.selectByPrimaryKey(subtask.scenseid) + row.apply { + add(scene.index ?: -99) + add(scene.extension2 ?: "") + add(scene.name ?: "") + } + contents.add(row) + } + } + + // 琛ㄥご锛氬叿浣撻棶棰樺垎甯� + private fun getProblemDistribution(head: MutableList<MutableList<Any>>, contents: MutableList<MutableList<Any>>, + dataList: List<Subtask>, config: ExcelConfigVo) { + val h1 = mutableListOf<ExcelUtil.MyCell>() + val h2 = mutableListOf<Any>() + currentProblemType.clear() + currentProblemHead.clear() + + // 闂鍒嗕负涓ゅ眰锛屾柊澧炰竴琛岃〃澶� + problemtypeMapper.selectByExample(Example(Problemtype::class.java).apply { + createCriteria().andEqualTo("scensetypeid", config.sceneType) + .andEqualTo("districtcode", config.districtCode) + orderBy("extension1") + }).forEach { + if (!currentProblemHead.contains(it.typename)) { + currentProblemHead.add(it.typename ?: "") + h1.add(ExcelUtil.MyCell(it.typename ?: "", colSpan = 0)) + } + currentProblemType[it.guid ?: ""] = it.description ?: "" + if (currentProblemHead.contains(it.typename)) { + h2.add(it.description ?: "") + h1.last().colSpan++ + + h2.add("鏄惁鏁存敼") + h1.last().colSpan++ + } + } + + //闂鍒嗗竷 + for (i in dataList.indices) { + val subtask = dataList[i] + + val pDis = mutableListOf<Any>()//鍏蜂綋闂鍒嗗竷鍙婃暣鏀规儏鍐� + repeat(h2.size) { pDis.add("")} + if (subtask.stguid != null) { + problemlistMapper.selectByExample(Example(Problemlist::class.java).apply { + createCriteria().andEqualTo("stguid", subtask.stguid) + }).forEach problemType@{ p -> + val des = currentProblemType[p.ptguid] + + //鍏蜂綋闂鍒嗗竷 + for (t in h2.indices) { + if (des == h2[t]) { + //鍏蜂綋闂杩欎竴鍒楁坊鍔犳枃鏈紝琛ㄧず闂瀛樺湪 + pDis[t] = 1 + //闂鍒楃殑涓嬩竴鍒楁槸璇ラ棶棰樼殑鏁存敼鎯呭喌 + pDis[t + 1] = if (p.ischanged == true) 1 else 0 + break + } + } + } + } + + contents[i].addAll(pDis) + } + + //鍘熸湁鐨勭涓�琛岃〃澶村鍔�1琛岃璺ㄥ害,鍚屾椂鏂扮殑绗簩琛岃〃澶存坊鍔犵┖浣� + head[0].forEach { + (it as ExcelUtil.MyCell).rowSpan++ +// h2.add(0, "") + } + //鍚堝苟琛ㄥご + head[0].addAll(h1) + head.add(h2) + } + + // 琛ㄥご锛氬贰鏌ユ儏鍐靛強闂銆佹暣鏀圭粺璁� + private fun getInspectionInfo(head: MutableList<MutableList<Any>>, contents: MutableList<MutableList<Any>>, dataList: List<Subtask>, config: ExcelConfigVo) { + val h1 = listOf("鐩戠鏃堕棿", "闂绫诲瀷", "闂鎻忚堪", "闂浣嶇疆", "闂鏁�", "鏁存敼鎯呭喌", "鏁存敼闂", "鏁存敼鏁�", "鏈暣鏀归棶棰�", "鏈暣鏀规暟", "瀹℃牳鎯呭喌") + + for (i in dataList.indices) { + val subtask = dataList[i] + + val row = mutableListOf<Any>() + if (subtask.stguid == null) { + repeat(h1.size) { row.add("")} + } else { + row.apply { + // 琛ㄥご锛氬贰鏌ユ儏鍐靛強闂銆佹暣鏀圭粺璁� + add(dateUtil.DateToString(subtask.planstarttime, DateUtil.DateStyle.MM_DD) ?: "")//鐩戠鏃堕棿 + //鏌ヨ瀛愪换鍔″搴旂殑闂锛屽苟涓旀牴鎹潯浠惰繘琛岀瓫閫� + var y = 1 + var pType = ""//闂绫诲瀷 + var pDes = ""//闂鎻忚堪 + var pLoc = ""//闂浣嶇疆 + var pNum = 0//闂鏁� + var pChanged = ""//鏁存敼鎯呭喌 + var changedProblem = ""//鏁存敼闂 + var cNum = 0//鏁存敼鏁� + var unChangedProblem = ""//鏈暣鏀归棶棰� + var unChangeNum = 0//鏈暣鏀规暟 + var checkStatus = ""//瀹℃牳鎯呭喌 + problemlistMapper.selectByExample(Example(Problemlist::class.java).apply { + createCriteria().andEqualTo("stguid", subtask.stguid) + }).forEach problemType@{ p -> + val problemType = problemtypeMapper.selectByPrimaryKey(p.ptguid) + val typeName = if (problemType == null) { + val a = "" + a + } else { + problemType.typename + } + val lr = if (y > 1) "\n" else "" + //宸℃煡鎯呭喌鍙婇棶棰樸�佹暣鏀圭粺璁� + pType += "${lr}$y銆�${typeName}" + pDes += "${lr}$y銆�${p.problemname}" + pLoc += "${lr}$y銆�${p.location}" + pNum++ + pChanged += "${lr}$y銆�${if (p.ischanged == true) "鉁�" else "脳"}" + if (p.ischanged == true) { + if (changedProblem.isNotBlank()) { + changedProblem += "\n" + } + changedProblem += "$y銆�${p.problemname}" + cNum++ + } else { + if (unChangedProblem.isNotBlank()) { + unChangedProblem += "\n" + } + unChangedProblem += "$y銆�${p.problemname}" + unChangeNum++ + } + val status = when (p.extension3) { + Constant.PROBLEM_CHECK_PASS -> "闂瀹℃牳閫氳繃"// + Constant.PROBLEM_CHECK_FAIL -> "闂瀹℃牳鏈�氳繃"// + Constant.PROBLEM_UNCHECKED -> "闂鏈鏍�"// + Constant.CHANGE_UNCHECKED -> "鏁存敼鏈鏍�"// + Constant.CHANGE_CHECK_PASS -> "鏁存敼瀹℃牳閫氳繃"// + Constant.CHANGE_CHECK_FAIL -> "鏁存敼瀹℃牳鏈�氳繃"// + else -> "闂鏈鏍�" + } + checkStatus += "${lr}$y銆�${status}" + y++ + } + addAll(listOf(pType, pDes, pLoc, pNum, pChanged, changedProblem, cNum, unChangedProblem, unChangeNum, checkStatus)) + } + } + + contents[i].addAll(row) + } + + head[0].addAll(h1) + } + + + + private fun getTableTitles(sceneType: Int?, districtCode: String?): List<String> { + if (sceneType == null || districtCode == null) return emptyList() + val heads = mutableListOf<String>() + heads.run { + addAll(getSceneName()) + addAll(getLocation()) + addAll(getBaseInfo(sceneType)) + addAll(getContactInfo(sceneType)) + addAll(getRealTimeStatus(sceneType)) + addAll(getInspectionInfo(sceneType)) + addAll(getProblemDistribution(sceneType, districtCode)) + } + + return heads + } + + // 琛ㄥご锛氬満鏅悕 + private fun getSceneName() = listOf("琛ㄥ崟缂栧彿", "鍞竴搴忓彿", "鍦烘櫙鍚嶇О") + + // 琛ㄥご锛氬満鏅湴鐞嗕綅缃� + private fun getLocation(): List<String> = listOf( + "琛楅晣", "鍦板潃" + ) + + // 琛ㄥご锛氬満鏅笓灞炲熀纭�淇℃伅 + private fun getBaseInfo(sceneType: Int): List<String> = when (sceneType.toString()) { + Constant.ScenseType.TYPE1.value -> listOf("涓氫富鍗曚綅", "鏂藉伐鍗曚綅", "寤虹瓚闈㈢Н(m虏)", "鏂藉伐璧峰鏃堕棿", "鏂藉伐缁撴潫鏃堕棿", "鏂藉伐闃舵", "宸ョ▼绫诲瀷") + Constant.ScenseType.TYPE2.value -> listOf("涓氫富鍗曚綅", "绉熻祦鍗曚綅", "鍗犲湴闈㈢Н(m虏)", "钀ヨ繍鐘舵��", "绫诲瀷") + Constant.ScenseType.TYPE3.value -> listOf("涓氫富鍗曚綅", "鏂囨槑鍦虹珯", "缁胯壊鐜繚绔欏巶", "鍗犲湴闈㈢Н(m虏)", "钀ヨ繍鐘舵��") + Constant.ScenseType.TYPE14.value -> listOf("涓氫富鍗曚綅", "绉熻祦鍗曚綅", "鍗犲湴闈㈢Н(m虏)", "钀ヨ繍鐘舵��", "绫诲瀷") + else -> listOf() + } + + // 琛ㄥご锛氬満鏅仈绯绘柟寮� + private fun getContactInfo(sceneType: Int): List<String> = when (sceneType) { + else -> listOf("鑱旂郴浜�", "鑱旂郴鏂瑰紡") + } + + // 琛ㄥご锛氬満鏅幇鍦烘儏鍐� + private fun getRealTimeStatus(sceneType: Int): List<String> = when (sceneType) { + else -> listOf() + } + + // 琛ㄥご锛氬贰鏌ユ儏鍐靛強闂銆佹暣鏀圭粺璁� + private fun getInspectionInfo(sceneType: Int): List<String> = when (sceneType) { + else -> listOf("鐩戠鏃堕棿", "闃叉不鑰冩牳璇勫垎", "闃叉不瑙勮寖鎬�", "鎵e垎椤�","闂绫诲瀷", "闂鎻忚堪", "闂浣嶇疆", "闂鏁�", "鏁存敼鎯呭喌", "鏁存敼鏁�", "瀹℃牳鎯呭喌") + } + + // 琛ㄥご锛氬叿浣撻棶棰樺垎甯� + private val currentProblemType = mutableMapOf<String, String>() + private val currentProblemHead = mutableListOf<String>() + private fun getProblemDistribution(sceneType: Int, districtCode: String): List<String> { + val heads = mutableListOf<String>() + currentProblemType.clear() + currentProblemHead.clear() + + problemtypeMapper.selectByExample(Example(Problemtype::class.java).apply { + createCriteria().andEqualTo("scensetypeid", sceneType) + .andEqualTo("districtcode", districtCode) + orderBy("typeid") + }).forEach { + if (!heads.contains(it.typename)) { + heads.add(it.typename ?: "") + } + currentProblemType[it.guid ?: ""] = it.typename ?: "" + } + currentProblemHead.addAll(heads) + return heads + } + + + /** + * 鑾峰彇琛ㄦ牸鏁版嵁婧� + */ + private fun getTableDataSource(config: ExcelConfigVo): List<Subtask> { + if (config.sceneType == null) return emptyList() + + val result = mutableListOf<Subtask>() + + //1. 鏌ユ壘鐗瑰畾鐨勫贰鏌ヤ换鍔℃垨鑰呮墍鏈夌殑璁″垝宸℃煡浠诲姟 + var taskSceneIdList = listOf<String>() + val subTaskList = if (config.subTaskIdList?.isNotEmpty() == true || + (config.startTime != null || config.endTime != null) + ) { + subtaskMapper.selectByExample(Example(Subtask::class.java).apply { + createCriteria().apply { + if (config.subTaskIdList?.isNotEmpty() == true) { + andIn("stguid", config.subTaskIdList) + } + config.startTime?.let { andGreaterThanOrEqualTo("planstarttime", it) } + config.endTime?.let { andLessThanOrEqualTo("planendtime", it) } + } + }) + } else { + taskSceneIdList = monitorobjectversionMapper.getSceneByType(config.topTaskGuid, config.sceneType) + subtaskMapper.selectByExample(Example(Subtask::class.java).apply { + createCriteria().andIn("scenseid", taskSceneIdList) + .andEqualTo("tguid", config.topTaskGuid) + }) + } + + if (taskSceneIdList.isNotEmpty()) { + taskSceneIdList.forEach { + var subtask: Subtask? = null + for (s in subTaskList) { + if (s.scenseid == it) { + subtask = s + break + } + } + if (subtask == null) subtask = Subtask().apply { scenseid = it } + result.add(subtask) + } + } else { + result.addAll(subTaskList) + } + + return result + } + + private fun getTableContents(config: ExcelConfigVo, colCounts: Int = 0): List<Array<Any>> { + if (config.sceneType == null) return emptyList() + + //1. 鏌ユ壘鐗瑰畾鐨勫贰鏌ヤ换鍔℃垨鑰呮墍鏈夌殑璁″垝宸℃煡浠诲姟 + var taskSceneIdList = listOf<String>() + val subTaskList = if (config.subTaskIdList?.isNotEmpty() == true || + (config.startTime != null || config.endTime != null) + ) { + subtaskMapper.selectByExample(Example(Subtask::class.java).apply { + createCriteria().apply { + if (config.subTaskIdList?.isNotEmpty() == true) { + andIn("stguid", config.subTaskIdList) + } + config.startTime?.let { andGreaterThanOrEqualTo("planstarttime", it) } + config.endTime?.let { andLessThanOrEqualTo("planendtime", it) } + } + }) + } else { + taskSceneIdList = monitorobjectversionMapper.getSceneByType(config.topTaskGuid, config.sceneType) + subtaskMapper.selectByExample(Example(Subtask::class.java).apply { + createCriteria().andIn("scenseid", taskSceneIdList) + .andEqualTo("tguid", config.topTaskGuid) + }) + } + + val contents = mutableListOf<Array<Any>>() + val subTasks = mutableListOf<Subtask>() + + if (taskSceneIdList.isNotEmpty()) { + taskSceneIdList.forEach { + val rowContent = mutableListOf<Any>() + + var subtask: Subtask? = null + for (s in subTaskList) { + if (s.scenseid == it) { + subtask = s + break + } + } + //璇ュ満鏅湭宸℃煡 + if (subtask == null) { + val scene = scenseMapper.selectByPrimaryKey(it) + rowContent.apply { + add(scene.index?.toString() ?: "") + add(scene.extension2 ?: "") + add(scene.name ?: "") + } + val left = colCounts - getSceneName().size + repeat(left) { + rowContent.add("") + } + } else { + rowContent.addAll(tableContent(subtask)) + } + + contents.add(rowContent.toTypedArray()) + } + } else { + subTaskList.forEach { + val c = tableContent(it) + contents.add(c) + } + } + + return contents + } + + private fun tableContent(subtask: Subtask): Array<Any> { + + val row = mutableListOf<Any>() + //鏌ヨ璇ヤ换鍔″搴旂殑鍦烘櫙 + val scene = scenseMapper.selectByPrimaryKey(subtask.scenseid) + + row.apply { + // 琛ㄥご锛氬満鏅悕 + add(scene.index?.toString() ?: "") + add(scene.extension2 ?: "") + add(scene.name ?: "") + // 琛ㄥご锛氬満鏅湴鐞嗕綅缃� + add(scene.townname ?: "") + add(scene.location ?: "") + // 琛ㄥご锛氬満鏅笓灞炲熀纭�淇℃伅 + addAll(when (scene.typeid.toString()) { + Constant.ScenseType.TYPE1.value -> { +// listOf("涓氫富鍗曚綅", "鏂藉伐鍗曚綅", "寤虹瓚闈㈢Н(m虏)", "鏂藉伐璧峰鏃堕棿", "鏂藉伐缁撴潫鏃堕棿", "鏂藉伐闃舵", "宸ョ▼绫诲瀷") + var r = listOf("-", "-", "-", "-", "-", "-", "-") + sceneConstructionSiteMapper.selectByPrimaryKey(scene.guid)?.let { + r = listOf(it.csEmployerUnit?:"", it.csConstructionUnit?:"", it.csFloorSpace?:"", + it.csStartTime?:"", it.csEndTime?:"", it.csStatus?:"", it.csProjectType?:"") + } + r + } + Constant.ScenseType.TYPE2.value -> { +// listOf("涓氫富鍗曚綅", "绉熻祦鍗曚綅", "鍗犲湴闈㈢Н(m虏)", "钀ヨ繍鐘舵��", "绫诲瀷") + var r = listOf("-", "-", "-", "-", "-") + sceneWharfMapper.selectByPrimaryKey(scene.guid)?.let { + r = listOf(it.getwEmployerUnit()?:"", it.getwRentUnit()?:"", it.getwFloorSpace()?:"", it.getwStatus()?:"", + it.getwProjectType()?:"") + } + r + } + Constant.ScenseType.TYPE3.value -> { +// listOf("涓氫富鍗曚綅", "鏂囨槑鍦虹珯", "缁胯壊鐜繚绔欏巶", "鍗犲湴闈㈢Н(m虏)", "钀ヨ繍鐘舵��") + var r = listOf("-", "-", "-", "-", "-") + sceneMixingPlantMapper.selectByPrimaryKey(scene.guid)?.let { + r = listOf( + it.mpEmployerUnit?:"", if (it.mpCivillyPlant == true) "鏄�" else "鍚�", if (it.mpGreenPlant == true) "鏄�" else "鍚�", + it.mpFloorSpace?:"", it.mpStatus?:"" + ) + } + r + } + Constant.ScenseType.TYPE14.value -> { +// listOf("涓氫富鍗曚綅", "绉熻祦鍗曚綅", "鍗犲湴闈㈢Н(m虏)", "钀ヨ繍鐘舵��", "绫诲瀷") + var r = listOf("-", "-", "-", "-", "-") + sceneStorageYardMapper.selectByPrimaryKey(scene.guid)?.let { + r = listOf(it.syEmployerUnit?:"", it.syRentUnit?:"", it.syFloorSpace?:"", it.syStatus?:"", it.syProjectType?:"") + } + r + } + else -> listOf() + }) + // 琛ㄥご锛氬満鏅仈绯绘柟寮� + add(scene.contacts ?: "") + add(scene.contactst ?: "") + // 琛ㄥご锛氬満鏅幇鍦烘儏鍐� + // TODO: 2022/7/10 鏆傛棤 + // 琛ㄥご锛氬贰鏌ユ儏鍐靛強闂銆佹暣鏀圭粺璁� 鍜� 琛ㄥご锛氬叿浣撻棶棰樺垎甯� + listOf("鐩戠鏃堕棿", "闃叉不鑰冩牳璇勫垎", "闃叉不瑙勮寖鎬�", "鎵e垎椤�","闂绫诲瀷", "闂鎻忚堪", "闂浣嶇疆", "闂鏁�", "鏁存敼鎯呭喌", "鏁存敼鏁�", "瀹℃牳鎯呭喌") + add(dateUtil.DateToString(subtask.planstarttime, DateUtil.DateStyle.MM_DD) ?: "") + add("") + add("") + add("") + //鏌ヨ瀛愪换鍔″搴旂殑闂锛屽苟涓旀牴鎹潯浠惰繘琛岀瓫閫� + var y = 1 + var pType = ""//闂绫诲瀷 + var pDes = ""//闂鎻忚堪 + var pLoc = ""//闂浣嶇疆 + var pNum = 0//闂鏁� + var pChanged = ""//鏁存敼鎯呭喌 + var cNum = 0//鏁存敼鏁� + var checkStatus = ""//瀹℃牳鎯呭喌 + var pDis = mutableListOf<String>()//鍏蜂綋闂鍒嗗竷 + repeat(currentProblemHead.size) { pDis.add("")} + problemlistMapper.selectByExample(Example(Problemlist::class.java).apply { + createCriteria().andEqualTo("stguid", subtask.stguid) + }).forEach problemType@{ p -> + val typeName = currentProblemType[p.ptguid] + val lr = if (y > 1) "\n" else "" + //宸℃煡鎯呭喌鍙婇棶棰樸�佹暣鏀圭粺璁� + pType += "${lr}$y銆�${typeName}" + pDes += "${lr}$y銆�${p.problemname}" + pLoc += "${lr}$y銆�${p.location}" + pNum++ + pChanged += "${lr}$y銆�${if (p.ischanged == true) "鉁�" else "脳"}" + if (p.ischanged == true) cNum++ + val status = when (p.extension3) { + Constant.PROBLEM_CHECK_PASS -> "闂瀹℃牳閫氳繃"// + Constant.PROBLEM_CHECK_FAIL -> "闂瀹℃牳鏈�氳繃"// + Constant.PROBLEM_UNCHECKED -> "闂鏈鏍�"// + Constant.CHANGE_UNCHECKED -> "鏁存敼鏈鏍�"// + Constant.CHANGE_CHECK_PASS -> "鏁存敼瀹℃牳閫氳繃"// + Constant.CHANGE_CHECK_FAIL -> "鏁存敼瀹℃牳鏈�氳繃"// + else -> "闂鏈鏍�" + } + checkStatus += "${lr}$y銆�${status}" + y++ + + //鍏蜂綋闂鍒嗗竷 + for (t in currentProblemHead.indices) { + if (typeName == currentProblemHead[t]) { + pDis[t] = if (p.ischanged == true) "1" else "0" + break + } + } + } + addAll(listOf(pType, pDes, pLoc, pNum, pChanged, cNum, checkStatus)) + addAll(pDis) + } + + return row.toTypedArray() } } \ No newline at end of file -- Gitblit v1.9.3