feiyu02
2025-09-12 dc4f12f66685260ac357997680e5f3fe723c3c4a
src/main/kotlin/cn/flightfeather/supervision/business/autooutput/dataanalysis/AopDataDeviceMap.kt
@@ -11,6 +11,7 @@
import cn.flightfeather.supervision.domain.ds3.repository.JSDustSiteRep
import cn.flightfeather.supervision.domain.ds3.repository.XHFumeSiteMapRep
import cn.flightfeather.supervision.lightshare.vo.*
import com.github.pagehelper.PageHelper
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.springframework.stereotype.Component
import java.io.FileOutputStream
@@ -84,6 +85,153 @@
        }
    }
    fun insertOrUpdate(areaVo: AreaVo, mapSet: List<DeviceMapVo>):Int {
        return when (areaVo.sourceType) {
            //以飞羽环境系统中的用户为主体
            1 -> {
                insertOrUpdate1(areaVo,mapSet)
            }
            //以飞羽监管系统中的用户为主体
            2 -> {
                insertOrUpdate2(areaVo,mapSet)
            }
            else -> 0
        }
    }
    private fun insertOrUpdate1(areaVo: AreaVo, mapSet: List<DeviceMapVo>):Int {
        return when (areaVo.districtcode) {
            //徐汇区
            "310104" -> {
                when (areaVo.scensetypeid) {
                    //汽修
                    Constant.SceneTypeTZ.VehicleRepair.value.toString() -> 0
                    else -> 0
                }
            }
            else -> 0
        }
    }
    private fun insertOrUpdate2(areaVo: AreaVo, mapSet: List<DeviceMapVo>):Int {
        return when (areaVo.districtcode) {
            //静安区
            "310106" -> {
                val mapSet1 = mapSet.map { DeviceMapVo.toJADustSiteMap(it) }
                when (areaVo.scensetypeid) {
                    //工地
                    Constant.SceneType.TYPE1.value -> {
                        var rc = 0
                        mapSet1.forEach {
                            rc += if(jaDustSiteRep.findByPrimaryKey(it.id) == null) {
                                jaDustSiteRep.insert(it)
                            } else {
                                jaDustSiteRep.update(it)
                            }
                        }
                        rc
                    }
                    else -> 0
                }
            }
            //金山区
            "310116" -> {
                val mapSet1 = mapSet.map { DeviceMapVo.toJSDustSiteMap(it) }
                when (areaVo.scensetypeid) {
                    //工地,码头水泥搅拌站
                    Constant.SceneType.TYPE1.value,
                    Constant.SceneType.TYPE2.value,
                    Constant.SceneType.TYPE3.value,
                        -> {
                            var rc = 0
                            mapSet1.forEach {
                                rc += if(jsDustSiteRep.findByPrimaryKey(it.id) == null) {
                                    jsDustSiteRep.insert(it)
                                } else {
                                    jsDustSiteRep.update(it)
                                }
                            }
                            rc
                        }
                    else -> 0
                }
            }
            //徐汇区
            "310104" -> {
                val mapSet1 = mapSet.map { DeviceMapVo.toXHFumeSiteMap(it) }
                when (areaVo.scensetypeid) {
                    //餐饮
                    Constant.SceneType.TYPE5.value -> {
                        var rc = 0
                        mapSet1.forEach {
                            rc += if(xhFumeSiteMapRep.findByPrimaryKey(it.id) == null) {
                                xhFumeSiteMapRep.insert(it)
                            } else {
                                xhFumeSiteMapRep.update(it)
                            }
                        }
                        rc
                    }
                    else -> 0
                }
            }
            else -> 0
        }
    }
    /**
     * 搜索设备
     * @param areaVo 区域条件
     * @param keyword 搜索关键词
     * @param page 页码
     * @param perPage 每页数量
     * @return 设备列表
     */
    fun searchDevice(areaVo: AreaVo, keyword: String, page: Int, perPage: Int): Pair<DataHead, List<DeviceSiteVo>> {
        return when (areaVo.districtcode) {
            //静安区
            "310106" -> when (areaVo.scensetypeid) {
                //工地
                Constant.SceneType.TYPE1.value -> {
                    val pageInfo = PageHelper.startPage<DeviceSiteVo>(page, perPage)
                    val list = jaDustSiteRep.searchSiteInfo(keyword)
                    DataHead(pageInfo.pageNum, pageInfo.pages, pageInfo.total) to list
                }
                else -> DataHead() to emptyList()
            }
            //金山区
            "310116" -> when (areaVo.scensetypeid) {
                //工地,码头水泥搅拌站
                Constant.SceneType.TYPE1.value,
                Constant.SceneType.TYPE2.value,
                Constant.SceneType.TYPE3.value,
                    -> {
                        val pageInfo = PageHelper.startPage<DeviceSiteVo>(page, perPage)
                        val list = jsDustSiteRep.searchSiteInfo(keyword)
                        DataHead(pageInfo.pageNum, pageInfo.pages, pageInfo.total) to list
                    }
                else -> DataHead() to emptyList()
            }
            //徐汇区
            "310104" -> when (areaVo.scensetypeid) {
                //餐饮
                Constant.SceneType.TYPE5.value -> {
//                    val pageInfo = PageHelper.startPage<DeviceSiteVo>(page, perPage)
//                    val list = xhFumeSiteRep.searchSiteInfo(keyword)
//                    DataHead(pageInfo.pageNum, pageInfo.pages, pageInfo.total) to list
                    DataHead() to emptyList()
                }
                else -> DataHead() to emptyList()
            }
            else -> DataHead() to emptyList()
        }
    }
    /**
     * 输出监测点位和监测设备的对应匹配关系
     * @param areaVo 区域条件
@@ -92,7 +240,7 @@
        // 监管总任务
        val task = taskRep.findOneTask(areaVo) ?: throw BizException("当前查询条件下未找到对应顶层任务")
        // 总任务包含对应类型的场景
        val scenes = sceneRep.findScene(task.tguid!!, areaVo.scensetypeid?.toInt(), areaVo.towncode)
        val scenes = sceneRep.findSceneList(task.tguid!!, areaVo.scensetypeid?.toInt(), areaVo.towncode)
        val sceneIds = scenes.map { it?.guid }
        val userIdList = userInfoSVRep.findUser(sceneIds).map { it?.guid }
        // 场景和监测点的匹配关系