feiyu02
2024-09-25 0516cba27e632f20efac2752787f38f0c87baafa
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ProblemlistServiceImpl.kt
@@ -1,19 +1,25 @@
package cn.flightfeather.supervision.lightshare.service.impl
import cn.flightfeather.supervision.domain.ds1.entity.Problemlist
import cn.flightfeather.supervision.domain.ds1.entity.Scense
import cn.flightfeather.supervision.common.exception.BizException
import cn.flightfeather.supervision.common.log.BizLog
import cn.flightfeather.supervision.common.log.WorkStreamLogInfo
import cn.flightfeather.supervision.common.utils.Constant
import cn.flightfeather.supervision.common.utils.FileUtil
import cn.flightfeather.supervision.common.utils.UUIDGenerator
import cn.flightfeather.supervision.domain.ds1.entity.Mediafile
import cn.flightfeather.supervision.domain.ds1.entity.*
import cn.flightfeather.supervision.domain.ds1.mapper.*
import cn.flightfeather.supervision.domain.ds1.repository.ProblemRep
import cn.flightfeather.supervision.domain.ds1.repository.SubTaskRep
import cn.flightfeather.supervision.domain.ds1.repository.TaskRep
import cn.flightfeather.supervision.lightshare.service.MediafileService
import cn.flightfeather.supervision.lightshare.service.ProblemlistService
import cn.flightfeather.supervision.lightshare.service.TaskService
import cn.flightfeather.supervision.lightshare.vo.*
import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.ObjectMapper
import com.github.pagehelper.PageHelper
import org.springframework.beans.BeanUtils
import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Service
import org.springframework.web.multipart.MultipartFile
import tk.mybatis.mapper.entity.Example
@@ -32,43 +38,53 @@
class ProblemlistServiceImpl(
    val problemlistMapper: ProblemlistMapper,
    val inspectionMapper: InspectionMapper,
    val mediafileMapper: MediafileMapper
    val mediafileMapper: MediafileMapper,
    private val taskRep: TaskRep,
    private val subTaskRep: SubTaskRep,
    private val problemRep: ProblemRep,
    private val bizLog: BizLog,
    @Value("\${filePath}") var filePath: String,
    @Value("\${imgPath}") var imgPath: String,
) : ProblemlistService {
    @Resource
    lateinit var scenseMapper: ScenseMapper
    @Resource
    lateinit var problemtypeMapper: ProblemtypeMapper
    @Resource
    lateinit var taskMapper: TaskMapper
    @Resource
    lateinit var taskService: TaskService
    @Resource
    lateinit var mediafileService: MediafileService
    override fun getByTopTask(tguid: String): List<ProblemlistVo> {
    override fun getByTopTask(tguid: String): List<ProblemListVo> {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }
    //根据场景id和时间获取对应顶层任务下的所有问题
    override fun getProblemByScene(sceneId: String, date: String): List<ProblemlistVo> {
    override fun getProblemByScene(sceneId: String, date: String): List<ProblemListVo> {
        val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
        val date1 = simpleDateFormat.parse(date)
        val scene = scenseMapper.selectByPrimaryKey(sceneId)
        val district = scene.districtcode
        val taskVolist = taskService.getByDistrictCode(district!!, date1)
        val problemlistVolistTemp1 = mutableListOf<ProblemlistVo>()
        val problemListVolistTemp1 = mutableListOf<ProblemListVo>()
        if (!taskVolist.isEmpty()) {
            val problemlists = (problemlistMapper.getProblemByScene(sceneId, taskVolist[0].tguid!!))
            problemlists.forEach {
                // 限制企业查看未审核的问题
                if (it.extension3 != Constant.PROBLEM_UNCHECKED && it.extension3 != Constant.PROBLEM_CHECK_FAIL) {
                    val problemVo = ProblemlistVo();
                    val problemVo = ProblemListVo();
                    BeanUtils.copyProperties(it, problemVo)
                    problemlistVolistTemp1.add(problemVo)
                    problemListVolistTemp1.add(problemVo)
                }
            }
            problemlistVolistTemp1.forEach {
            problemListVolistTemp1.forEach {
                if (it.ptguid != null) {
                    val tmp1 = problemtypeMapper.selectByPrimaryKey(it.ptguid)
                    if (tmp1 != null) {
@@ -86,7 +102,7 @@
                }
            }
        }
        return problemlistVolistTemp1
        return problemListVolistTemp1
    }
    //获取某顶层任务下,某个场景下的问题整改情况
@@ -116,26 +132,9 @@
    override fun getStatisticalResult(areaVo: AreaVo): List<StatisticsVo> {
        val districtcode = areaVo.districtcode
        val sceneType = areaVo.scensetypeid
        val startTime = areaVo.starttime
        val endTime = areaVo.endtime
        val maps = problemlistMapper.getStatisticalResult(districtcode,startTime, endTime, sceneType)
        val statisticsVos = mutableListOf<StatisticsVo>()
        maps.forEach {
            if (!it.isEmpty() && it.get("name") != null) {
                val statisticsVo = StatisticsVo()
                statisticsVo.name = it.get("name").toString()
                try {
                    statisticsVo.count = it.get("count").toString().toInt()
                } catch (e: Exception) {
                }
                try {
                    statisticsVo.changeCount = it.get("changeCount").toString().toInt()
                } catch (e: Exception) {
                }
                statisticsVos.add(statisticsVo)
            }
        }
        return statisticsVos
        val startTime = areaVo.starttime?.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
        val endTime = areaVo.endtime?.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
        return problemlistMapper.getStatisticalResult(districtcode, startTime, endTime, sceneType, areaVo.sceneId)
    }
    override fun getChargeResult(areaVo: AreaVo): ChargeInfoVo {
@@ -146,7 +145,12 @@
//                .andGreaterThanOrEqualTo("endtime", areaVo.endtime)
//                .andEqualTo("districtcode", areaVo.districtcode)
        val chargeInfoVo = ChargeInfoVo()
        val sql = "select T_GUID, T_Name from tm_t_task where TS_GUID IS NULL and T_StartTime <= '" + areaVo.starttime + "' and T_EndTime >= '" + areaVo.endtime + "' and T_DistrictCode = '" + areaVo.districtcode +"'"
        val sTime = areaVo.starttime?.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
        val eTime = areaVo.endtime?.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
        val sql =
            "select T_GUID, T_Name from tm_t_task where TS_GUID IS NULL and T_StartTime <= '" + sTime + "' and T_EndTime" +
                    " >= '" + eTime + "' and T_DistrictCode = '" + areaVo.districtcode + "'"
        val maps1 = taskMapper.selectSE(sql)
        var topTaskId = String()
        var topTaskName = String()
@@ -167,7 +171,7 @@
            } catch (e: Exception) {
            }
            try {
                sceneInfo.changeCount  =it.get("changeCount").toString().toInt()
                sceneInfo.changeCount = it.get("changeCount").toString().toInt()
            } catch (e: Exception) {
            }
            chargeInfoVo.sceneInfos.add(sceneInfo)
@@ -186,16 +190,16 @@
                var curScore = -1
                if (it.get("scoreAft") != null) {
                    curScore = it.get("scoreAft").toString().toInt()
                }else if (it.get("scoreBef") != null) {
                } else if (it.get("scoreBef") != null) {
                    curScore = it.get("scoreBef").toString().toInt()
                }
                if (curScore >= 100) {
                    scoreInfo1.count++
                }else if (curScore >= 78 && curScore < 100) {
                } else if (curScore >= 78 && curScore < 100) {
                    scoreInfo2.count++
                }else if (curScore >= 54 && curScore < 78) {
                } else if (curScore >= 54 && curScore < 78) {
                    scoreInfo3.count++
                }else if (curScore < 54 && curScore >= 0) {
                } else if (curScore < 54 && curScore >= 0) {
                    scoreInfo4.count++
                }
            }
@@ -209,8 +213,8 @@
    }
    //根据地域获取问题
    override fun getByArea(areaVo: AreaVo):List<ProblemlistVo> {
        val problemlist = mutableListOf<ProblemlistVo>()
    override fun getByArea(areaVo: AreaVo): List<ProblemListVo> {
        val problemlist = mutableListOf<ProblemListVo>()
//        val tmpproblemlsit = mutableListOf<Problemlist>()
        val example = Example(Scense::class.java)
        val criteria = example.createCriteria()
@@ -225,8 +229,8 @@
            criteria.andEqualTo("towncode", areaVo.towncode)
        criteria.andEqualTo("typeid", areaVo.scensetypeid)
        val result1 = scenseMapper.selectByExample(example)
        if (result1.isNotEmpty()){
            result1.forEach{
        if (result1.isNotEmpty()) {
            result1.forEach {
                val tmpexample = Example(Problemlist::class.java)
                val tmpcriteria = tmpexample.createCriteria()
                //对于确定的每个场景,根据时间查询问题
@@ -234,7 +238,7 @@
                tmpcriteria.andBetween("time", areaVo.starttime, areaVo.endtime)
                val tmp = problemlistMapper.selectByExample(tmpexample)
                tmp.forEach {
                    val problem = ProblemlistVo();
                    val problem = ProblemListVo();
                    BeanUtils.copyProperties(it, problem)
                    problemlist.add(problem)
                }
@@ -254,47 +258,47 @@
    }
    //根据巡查ID获取问题
    override fun findByInspectionID(inspectionID: String): List<ProblemlistVo> {
        val problemlistVoList = mutableListOf<ProblemlistVo>()
    override fun findByInspectionID(inspectionID: String): List<ProblemListVo> {
        val problemListVoList = mutableListOf<ProblemListVo>()
        val problemlist = Problemlist()
        problemlist.iguid = inspectionID
        val problemlists = problemlistMapper.select(problemlist)
        problemlists.forEach {
            val problemlistVo = ProblemlistVo()
            val problemlistVo = ProblemListVo()
            if (it.remark != Constant.PROBLEM_DELETED) {
                BeanUtils.copyProperties(it, problemlistVo)
                problemlistVoList.add(problemlistVo)
                problemListVoList.add(problemlistVo)
            }
        }
        //排序
        problemlistVoList.sortBy { it.time }
        return problemlistVoList
        problemListVoList.sortBy { it.time }
        return problemListVoList
    }
    //新增一个问题
    override fun addProblem(problemlistVo: ProblemlistVo) {
    override fun addProblem(problemlistVo: ProblemListVo) {
        val probemlist = Problemlist()
        BeanUtils.copyProperties(problemlistVo, probemlist)
        problemlistMapper.insert(probemlist)
    }
    //根据子任务ID查询问题
    override fun findBySubtaskId(subTaskID: String): List<ProblemlistVo> {
        val problemlistVoList = mutableListOf<ProblemlistVo>()
    override fun findBySubtaskId(subTaskID: String): List<ProblemListVo> {
        val problemListVoList = mutableListOf<ProblemListVo>()
        val problemlist = Problemlist()
        problemlist.stguid = subTaskID
        val problemlists = problemlistMapper.select(problemlist)
        problemlists.forEach {
            val problemlistVo = ProblemlistVo()
            val problemlistVo = ProblemListVo()
            BeanUtils.copyProperties(it, problemlistVo)
            problemlistVoList.add(problemlistVo)
            problemListVoList.add(problemlistVo)
        }
        return problemlistVoList
        return problemListVoList
    }
    //根据问题ID获取一个问题
    override fun findByID(id: String): ProblemlistVo {
        val problemlistVo = ProblemlistVo()
    override fun findByID(id: String): ProblemListVo {
        val problemlistVo = ProblemListVo()
        val problemlist = problemlistMapper.selectByPrimaryKey(id)
        if (problemlist != null) {
            BeanUtils.copyProperties(problemlist, problemlistVo)
@@ -323,6 +327,12 @@
                mediafileMapper.deleteByExample(Example(Mediafile::class.java).apply {
                    createCriteria().andEqualTo("businessguid", id)
                })
                //更新巡查信息中的问题数量
                val inspection = inspectionMapper.selectByPrimaryKey(p.iguid)
                if (inspection.problemcount != null && inspection.problemcount!! > 0) {
                    inspection.problemcount = inspection.problemcount!! - 1
                    inspectionMapper.updateByPrimaryKey(inspection)
                }
                BaseResponse(true, "问题删除成功", data = i)
            }
        }
@@ -334,74 +344,99 @@
    override fun findMonthProblemById(taskId: String, sceneId: Int?): List<MonthProblemVo> {
        val monthProblemlistVoList = mutableListOf<MonthProblemVo>()
        var map = problemlistMapper.findMonthProblemById(taskId,sceneId)
        var map = problemlistMapper.findMonthProblemById(taskId, sceneId)
        map.forEach { m ->
            val monthProblemVo = MonthProblemVo()
            monthProblemVo.townCode =if(m.get("towncode")!= null) BigDecimal(m.get("towncode").toString()).toString() else null
            monthProblemVo.townCode =
                if (m.get("towncode") != null) BigDecimal(m.get("towncode").toString()).toString() else null
            monthProblemVo.townName = if (m.get("townname") != null) m.get("townname").toString() else null
            monthProblemVo.scenetype =if (m.get("scenetype") != null) m.get("scenetype").toString().toInt()else null
            monthProblemVo.scenetypename =if(m.get("scenetypename") != null)m.get("scenetypename").toString()else null
            monthProblemVo.totalscenecount =if(m.get("totalscenecount") != null)m.get("totalscenecount").toString().toInt()else null
            monthProblemVo.problemscenes =if(m.get("problemscenes") != null)m.get("problemscenes").toString().toInt()else null
            monthProblemVo.totalproblems =if(m.get("totalproblems") != null)m.get("totalproblems").toString().toInt()else null
            monthProblemVo.changedproblems =if(m.get("changedproblems") != null)m.get("changedproblems").toString().toInt()else null
            monthProblemVo.scenetype = if (m.get("scenetype") != null) m.get("scenetype").toString().toInt() else null
            monthProblemVo.scenetypename =
                if (m.get("scenetypename") != null) m.get("scenetypename").toString() else null
            monthProblemVo.totalscenecount =
                if (m.get("totalscenecount") != null) m.get("totalscenecount").toString().toInt() else null
            monthProblemVo.problemscenes =
                if (m.get("problemscenes") != null) m.get("problemscenes").toString().toInt() else null
            monthProblemVo.totalproblems =
                if (m.get("totalproblems") != null) m.get("totalproblems").toString().toInt() else null
            monthProblemVo.changedproblems =
                if (m.get("changedproblems") != null) m.get("changedproblems").toString().toInt() else null
            monthProblemlistVoList.add(monthProblemVo)
        }
        return monthProblemlistVoList;
    }
    override fun check(pId: String, action: Byte, remark: String, userId: String, userName: String): BaseResponse<String> {
    override fun check(
        pId: String,
        action: Byte,
        remark: String,
        userId: String,
        userName: String,
    ): BaseResponse<String> {
        if (action !in 0..3) {
            return BaseResponse(false, "非法的操作指令")
        }
        val p = problemlistMapper.selectByPrimaryKey(pId) ?: return BaseResponse(false, "问题不存在")
        val subtask = p.stguid?.let { subTaskRep.findOne(it) }
        val response = BaseResponse<String>(true)
        var event = ""
        p.apply {
            this.remark = userName
            if (extension3 == Constant.PROBLEM_UNCHECKED) {
                event = "在${subtask?.scensename}审核了一个问题"
                when (action) {
                    0.toByte() -> extension3 = Constant.PROBLEM_CHECK_PASS
                    1.toByte() -> extension3 = Constant.PROBLEM_CHECK_FAIL
                    0.toByte() -> {
                        extension3 = Constant.PROBLEM_CHECK_PASS
                    }
                    1.toByte() -> {
                        extension3 = Constant.PROBLEM_CHECK_FAIL
                    }
                    2.toByte(),
                    3.toByte() -> {
                    3.toByte(),
                    -> {
                        response.success = false
                        response.message = "问题提交还未审核,无法进行整改审核!"
                    }
                }
            }else if (extension3 == Constant.PROBLEM_CHECK_PASS || extension3 == Constant.PROBLEM_CHECK_FAIL) {
            } else if (extension3 == Constant.PROBLEM_CHECK_PASS || extension3 == Constant.PROBLEM_CHECK_FAIL) {
                when (action) {
                    0.toByte() -> extension3 = Constant.PROBLEM_CHECK_PASS
                    1.toByte() -> extension3 = Constant.PROBLEM_CHECK_FAIL
                    2.toByte(),
                    3.toByte() -> {
                    3.toByte(),
                    -> {
                        if (ischanged == true && extension3 == Constant.PROBLEM_CHECK_PASS) {
                            response.success = true
                            extension3 = if (action == 2.toByte()) {
                                Constant.CHANGE_CHECK_PASS
                            }else{
                            } else {
                                Constant.CHANGE_CHECK_FAIL
                            }
                            event = "在${subtask?.scensename}审核了一个整改"
                        } else {
                            response.success = false
                            response.message = "问题还未整改,无法进行整改审核!操作无效"
                        }
                    }
                }
            }else if (extension3 == Constant.CHANGE_UNCHECKED) {
            } else if (extension3 == Constant.CHANGE_UNCHECKED) {
                event = "在${subtask?.scensename}审核了一个整改"
                when (action) {
                    0.toByte(),
                    1.toByte() -> {
                    1.toByte(),
                    -> {
                        response.success = false
                        response.message = "问题提交已审核,并且已被整改。操作无效"
                    }
                    2.toByte() -> extension3 = Constant.CHANGE_CHECK_PASS
                    3.toByte() -> extension3 = Constant.CHANGE_CHECK_FAIL
                }
            }else if (extension3 == Constant.CHANGE_CHECK_PASS || extension3 == Constant.CHANGE_CHECK_FAIL) {
            } else if (extension3 == Constant.CHANGE_CHECK_PASS || extension3 == Constant.CHANGE_CHECK_FAIL) {
                when (action) {
                    0.toByte(),
                    1.toByte() -> {
                    1.toByte(),
                    -> {
                        response.success = false
                        response.message = "问题提交已审核,并且已被整改。操作无效"
                    }
@@ -416,82 +451,62 @@
            if (r != 1) {
                response.success = false
                response.message = "问题更新失败!"
            } else {
                bizLog.info(WorkStreamLogInfo(userId, userName, event))
            }
        }
        return response
    }
    override fun newProblem(problem: String, files: Array<MultipartFile>): BaseResponse<String> {
        val mapper = ObjectMapper()
        //json转object
        val problemVo = mapper.readValue(problem, object : TypeReference<ProblemVo>() {})
        val problemVo = ObjectMapper().readValue(problem, object : TypeReference<ProblemVo>() {})
        // 保存问题
        val inspection = inspectionMapper.selectByPrimaryKey(problemVo.insGuid) ?: return BaseResponse(false, "巡查记录不存在")
        val scene = scenseMapper.selectByPrimaryKey(inspection.sguid) ?: return BaseResponse(false, "巡查记录对应场景不存在")
        val problemlist = Problemlist().apply {
            guid = UUIDGenerator.generate16ShortUUID()
            iguid = inspection.guid
            stguid = inspection.stguid
            sguid = inspection.sguid
            sensename = inspection.scensename
            senseaddress = inspection.scenseaddress
            ptguid = problemVo.ptGuid
            problemname = problemVo.proName
            longitude = problemVo.longitude ?: scene.longitude
            latitude = problemVo.latitude ?: scene.latitude
            locationid = problemVo.locationId
            location = problemVo.location
            time = Date()
            isrechecked = false
            ischanged = false
            advise = problemVo.advice
            extension3 = Constant.PROBLEM_UNCHECKED
        }
        // 保存问题
        val problemlist = ProblemListVo.newPro(inspection, problemVo, scene)
        problemlistMapper.insert(problemlist)
        // 保存图片
        val now = LocalDateTime.now()
        for (image in files) {
            val mediaFile = Mediafile().apply {
                guid = UUIDGenerator.generate16ShortUUID()
                iguid = inspection.guid
                businessguid = problemlist.guid
                longitude = problemlist.longitude
                latitude = problemlist.latitude
                address = problemlist.senseaddress
                filetype = 1
                businesstype = "问题"
                businesstypeid = 1
                path = "FlightFeather/Photo/" + scene.districtname + "/" + now.year + "年" + now.monthValue + "月/" + now.monthValue + "月" + now.dayOfMonth + "日/" + scene.name + "/"
                description = problemlist.problemname + " " + problemlist.location + " " + UUIDGenerator.generateUUID(4) + ".jpg"
                savetime = Date()
                ischanged = false
                extension1 = scene.citycode + "/" + scene.districtcode + "/" + now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "/" + scene.guid + "/"
                remark = "已上传"
            }
            mediafileMapper.insert(mediaFile)
        mediafileService.saveMediaFile(files) { MediaFileVo.newProFile(inspection, problemlist, scene) }
            val path = mediaFile.extension1
            val fileName = mediaFile.guid + ".jpg"
//            val filePath = "E:\\work\\第三方监管app\\自动评分\\餐饮\\"
            val filePath = "${Constant.DEFAULT_FILE_PATH}/images/$path/"
            try {
                //调用文件保存方法
                FileUtil.uploadFile(image.bytes, filePath, fileName)
            } catch (e: Exception) {
                // TODO: handle exception
            }
        //更新巡查信息的问题数
        if (inspection.problemcount != null) {
            inspection.problemcount = inspection.problemcount!! + 1
            inspectionMapper.updateByPrimaryKey(inspection)
        }
        problemlist.stguid?.let {
            val subtask = subTaskRep.findOne(it)
            val event = "在${subtask?.scensename}新增一个问题"
            bizLog.info(WorkStreamLogInfo(subtask?.executorguids, subtask?.executorrealtimes, event))
        }
        return BaseResponse(true)
    }
    override fun updateProblem(problem: ProblemListVo, deleteImg: List<String>, files: Array<MultipartFile>): String {
        problemRep.findOne(problem.guid) ?: throw BizException("该问题不存在")
        problemRep.update(problem)
        val inspection = inspectionMapper.selectByPrimaryKey(problem.iguid) ?: throw BizException("巡查记录不存在")
        val scene = scenseMapper.selectByPrimaryKey(inspection.sguid) ?: throw BizException("巡查记录对应场景不存在")
        mediafileService.saveMediaFile(files) { MediaFileVo.newProFile(inspection, problem, scene) }
        mediafileService.deleteList(deleteImg)
        return "success"
    }
    override fun changeProblem(problemId: String, files: Array<MultipartFile>): BaseResponse<String> {
        // 更新问题
        // 问题和问题图片合法性检查
        val p = problemlistMapper.selectByPrimaryKey(problemId) ?: return BaseResponse(false, "问题不存在")
        val mediaFiles = mediafileMapper.selectByExample(Example(Mediafile::class.java).apply {
            createCriteria().andEqualTo("businessguid", p.guid)
                .andEqualTo("businesstypeid", 1)
                .andEqualTo("ischanged", false)
        })
        if (mediaFiles.isEmpty()) return BaseResponse(false, "问题不存在或已整改,无法重复整改")
        // 更新问题
        p.apply {
            ischanged = true
            changedtime = Date()
@@ -510,38 +525,84 @@
        }
        problemlistMapper.updateByPrimaryKey(p)
        // 保存图片
        val now = LocalDateTime.now()
        val mediaFiles = mediafileMapper.selectByExample(Example(Mediafile::class.java).apply {
            createCriteria().andEqualTo("businessguid", p.guid)
                .andEqualTo("businesstypeid", 1)
                .andEqualTo("ischanged", false)
        })
        if (mediaFiles.isEmpty()) return BaseResponse(false, "场景问题数量为0,无法整改")
        // 保存整改图片
        val m = mediaFiles[0]
        m.path = m.path + "整改/"
        m.savetime = Date()
        m.ischanged = true
        for (image in files) {
        mediafileService.saveMediaFile(files) {
            m.apply {
                guid = UUIDGenerator.generate16ShortUUID()
                description = p.problemname + " " + p.location + " 整改 " + UUIDGenerator.generateUUID(4) + ".jpg"
            }
            mediafileMapper.insert(m)
            val path = m.extension1
            val fileName = m.guid + ".jpg"
//            val filePath = "E:\\work\\第三方监管app\\自动评分\\餐饮\\"
            val filePath = "${Constant.DEFAULT_FILE_PATH}/images/$path"
            try {
                //调用文件保存方法
                FileUtil.uploadFile(image.bytes, filePath, fileName)
            } catch (e: Exception) {
                println(e)
            }
        }
        return BaseResponse(true)
    }
    override fun updateChange(problemId: String, deleteImg: List<String>, files: Array<MultipartFile>): String {
        val p = problemRep.findOne(problemId) ?: throw BizException("该问题不存在")
        val mediaFiles = mediafileMapper.selectByExample(Example(Mediafile::class.java).apply {
            createCriteria().andEqualTo("businessguid", problemId)
                .andEqualTo("businesstypeid", 1)
                .andEqualTo("ischanged", true)
        })
        if (mediaFiles.isEmpty()) throw BizException("问题还未整改,无法修改整改")
        // 保存新的整改图片
        val m = mediaFiles[0]
        m.savetime = Date()
        mediafileService.saveMediaFile(files) {
            m.apply {
                guid = UUIDGenerator.generate16ShortUUID()
                description = p.problemname + " " + p.location + " 整改 " + UUIDGenerator.generateUUID(4) + ".jpg"
            }
        }
        mediafileService.deleteList(deleteImg)
        return "success"
    }
    override fun getBySubTask(stGuid: String, all: Boolean?): List<ProblemListVo> {
        //根据子任务ID获取问题列表
        val problemListVo = mutableListOf<ProblemListVo>()
        if (all == false) {
            //去除未审核以及审核不通过的问题
            findBySubtaskId(stGuid).forEach {
                if (it.extension3 != Constant.PROBLEM_UNCHECKED && it.extension3 != Constant.PROBLEM_CHECK_FAIL) {
                    problemListVo.add(it)
                }
            }
        } else {
            problemListVo.addAll(findBySubtaskId(stGuid))
        }
        //根据每个问题,获取媒体文件
        problemListVo.forEach {
            val mediafileVo = mediafileService.findByBusinessGUID(it.guid!!)
            //判断是否有媒体资料
            if (mediafileVo.isNotEmpty()) {
                //赋值
                it.mediafileList = mediafileVo
            }
        }
        return problemListVo
    }
    override fun getSceneByProType(areaVo: AreaVo, pType: String): List<Subtask?> {
        areaVo.scensetypeid ?: throw BizException("缺少场景类型参数")
        val task = taskRep.findOneTask(areaVo) ?: throw BizException("未找到对应的巡查总任务")
        return subTaskRep.findSubtasks(task.tguid!!, areaVo.scensetypeid!!, pType)
    }
    override fun getSceneProSummary(
        areaVo: AreaVo,
        sortBy: String,
        page: Int,
        per_page: Int,
    ): Pair<DataHead?, List<SceneProblemSummary>?> {
        areaVo.scensetypeid ?: throw BizException("缺少场景类型参数")
        val task = taskRep.findOneTask(areaVo) ?: throw BizException("未找到对应的巡查总任务")
        val p = PageHelper.startPage<SceneProblemSummary>(page, per_page)
        val res = problemRep.selectSceneProSummary(task.tguid!!, areaVo.scensetypeid!!, areaVo.sort, sortBy)
        return DataHead(p.pageNum, p.pages, p.total) to res
    }
}