package cn.flightfeather.supervision.business.autooutput.dataanalysis
|
|
import cn.flightfeather.supervision.common.exception.BizException
|
import cn.flightfeather.supervision.common.utils.Constant
|
import cn.flightfeather.supervision.common.utils.ExcelUtil
|
import cn.flightfeather.supervision.domain.ds1.entity.Scense
|
import cn.flightfeather.supervision.domain.ds1.repository.SceneRep
|
import cn.flightfeather.supervision.domain.ds1.repository.TaskRep
|
import cn.flightfeather.supervision.domain.ds1.repository.UserInfoSVRep
|
import cn.flightfeather.supervision.domain.ds2.repository.JADustSiteRep
|
import cn.flightfeather.supervision.domain.ds3.repository.JSDustSiteRep
|
import cn.flightfeather.supervision.domain.ds3.repository.XHFumeSiteMapRep
|
import cn.flightfeather.supervision.lightshare.vo.*
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook
|
import org.springframework.stereotype.Component
|
import java.io.FileOutputStream
|
import java.util.*
|
|
/**
|
* 监测数据和系统用户的映射管理
|
*/
|
@Component
|
class AopDataDeviceMap(
|
private val jaDustSiteRep: JADustSiteRep,
|
private val jsDustSiteRep: JSDustSiteRep,
|
private val xhFumeSiteMapRep: XHFumeSiteMapRep,
|
private val taskRep: TaskRep,
|
private val sceneRep: SceneRep,
|
private val userInfoSVRep: UserInfoSVRep,
|
) {
|
|
/**
|
* 获取区域条件下的设备和用户的映射关系
|
*/
|
fun findMapSet(areaVo: AreaVo, userIdList: List<String?>): List<DeviceMapVo> {
|
return when (areaVo.sourceType) {
|
//以飞羽环境系统中的用户为主体
|
1 -> find1(areaVo, userIdList)
|
//以飞羽监管系统中的用户为主体
|
2 -> find2(areaVo, userIdList)
|
else -> emptyList()
|
}
|
}
|
|
private fun find1(areaVo: AreaVo, userIdList: List<String?>): List<DeviceMapVo> {
|
return when (areaVo.districtcode) {
|
//徐汇区
|
"310104" -> {
|
when (areaVo.scensetypeid) {
|
//汽修
|
Constant.SceneTypeTZ.VehicleRepair.value.toString() -> emptyList()
|
else -> emptyList()
|
}
|
}
|
else -> emptyList()
|
}
|
}
|
|
private fun find2(areaVo: AreaVo, userIdList: List<String?>): List<DeviceMapVo> {
|
return when (areaVo.districtcode) {
|
//静安区
|
"310106" -> when (areaVo.scensetypeid) {
|
//工地
|
Constant.SceneType.TYPE1.value -> jaDustSiteRep.findMapBySVUserId(userIdList)
|
else -> emptyList()
|
}
|
//金山区
|
"310116" -> when (areaVo.scensetypeid) {
|
//工地,码头水泥搅拌站
|
Constant.SceneType.TYPE1.value,
|
Constant.SceneType.TYPE2.value,
|
Constant.SceneType.TYPE3.value,
|
-> jsDustSiteRep.findMapBySVUserId(userIdList)
|
else -> emptyList()
|
}
|
//徐汇区
|
"310104" -> when (areaVo.scensetypeid) {
|
//餐饮
|
Constant.SceneType.TYPE5.value -> xhFumeSiteMapRep.findBySVUserId(userIdList)
|
else -> emptyList()
|
}
|
else -> emptyList()
|
|
}
|
}
|
|
/**
|
* 输出监测点位和监测设备的对应匹配关系
|
* @param areaVo 区域条件
|
*/
|
fun outputMapSet(areaVo: AreaVo) {
|
// 监管总任务
|
val task = taskRep.findOneTask(areaVo) ?: throw BizException("当前查询条件下未找到对应顶层任务")
|
// 总任务包含对应类型的场景
|
val scenes = sceneRep.findScene(task.tguid!!, areaVo.scensetypeid?.toInt(), areaVo.towncode)
|
val sceneIds = scenes.map { it?.guid }
|
val userIdList = userInfoSVRep.findUser(sceneIds).map { it?.guid }
|
// 场景和监测点的匹配关系
|
val mapSet = this.findMapSet(areaVo, userIdList)
|
// 监测设备信息
|
val deviceSiteList = when (areaVo.districtcode) {
|
//静安区
|
"310106" -> when (areaVo.scensetypeid) {
|
//工地
|
Constant.SceneType.TYPE1.value -> jaDustSiteRep.findSiteInfo()
|
else -> emptyList()
|
}
|
//金山区
|
"310116" -> when (areaVo.scensetypeid) {
|
//工地,码头水泥搅拌站
|
Constant.SceneType.TYPE1.value,
|
Constant.SceneType.TYPE2.value,
|
Constant.SceneType.TYPE3.value,
|
-> jsDustSiteRep.findSiteInfo()
|
else -> emptyList()
|
}
|
//徐汇区
|
"310104" -> when (areaVo.scensetypeid) {
|
//餐饮
|
Constant.SceneType.TYPE5.value -> emptyList()
|
else -> emptyList()
|
}
|
else -> emptyList()
|
}
|
|
outputMapSetToFile(areaVo, scenes, mapSet, deviceSiteList)
|
}
|
|
/**
|
* 输出监测点位和监测设备的对应匹配关系到文件中
|
* @param scenes 场景信息列表
|
* @param mapSet 场景和监测点对应关系
|
* @param siteList 监测点信息列表
|
*/
|
private fun outputMapSetToFile(areaVo: AreaVo, scenes: List<Scense?>, mapSet: List<DeviceMapVo>, siteList:
|
List<DeviceSiteVo>) {
|
val _scenes = mutableListOf<Scense?>().also { it.addAll(scenes) }
|
val _siteList = mutableListOf<DeviceSiteVo>().also { it.addAll(siteList) }
|
|
val sceneDeviceList = mutableListOf<SceneDeviceVo>()
|
//表头
|
val head = sceneDeviceList.tableHead()
|
scenes.forEach {
|
val sceneDeviceVo = SceneDeviceVo()
|
sceneDeviceVo.scene = it
|
val user = userInfoSVRep.findUser(it?.guid)
|
mapSet.findBySVUserId(user?.guid).forEach { map ->
|
val site = siteList.findByMNCode(map.deviceCode)
|
sceneDeviceVo.deviceList.add(site)
|
_siteList.remove(site)
|
}
|
sceneDeviceList.add(sceneDeviceVo)
|
}
|
//内容
|
val contents = sceneDeviceList.tableContent()
|
|
|
val workbook = HSSFWorkbook()
|
ExcelUtil.write(head, contents, workbook, sheetName = "场景设备匹配")
|
|
val head2 = sceneDeviceList.tableHeadDevice()
|
val contents2 = mutableListOf<Array<Any>>()
|
_siteList.forEach {
|
contents2.add(arrayOf(it.id ?: "", it.mnCode ?: "", it.name ?: "", it.address ?: "", it.beginDate ?: "", it
|
.dutyCompany ?: "", it.groupName ?: ""))
|
}
|
ExcelUtil.write(head2, contents2, workbook, sheetName = "未匹配设备")
|
|
val path = "target/"
|
val fileName = "${areaVo.districtname}-场景设备信息-${Date().time}.xls"
|
val out = FileOutputStream(path + fileName)
|
workbook.write(out)
|
workbook.close()
|
out.flush()
|
out.close()
|
}
|
|
}
|