package cn.flightfeather.supervision.lightshare.service.impl
|
|
import cn.flightfeather.supervision.business.autooutput.dataanalysis.AopDataDeviceMap
|
import cn.flightfeather.supervision.common.exception.BizException
|
import cn.flightfeather.supervision.common.utils.UUIDGenerator
|
import cn.flightfeather.supervision.domain.ds1.entity.Scense
|
import cn.flightfeather.supervision.domain.ds1.entity.Userinfo
|
import cn.flightfeather.supervision.domain.ds1.mapper.UserinfoMapper
|
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.entity.UserMap
|
import cn.flightfeather.supervision.domain.ds2.entity.UserinfoTZ
|
import cn.flightfeather.supervision.domain.ds2.mapper.UserMapMapper
|
import cn.flightfeather.supervision.domain.ds2.mapper.UserinfoTZMapper
|
import cn.flightfeather.supervision.domain.ds2.repository.UserInfoTZRep
|
import cn.flightfeather.supervision.domain.ds2.repository.UserMapRep
|
import cn.flightfeather.supervision.lightshare.service.UserMapService
|
import cn.flightfeather.supervision.lightshare.vo.AreaVo
|
import cn.flightfeather.supervision.lightshare.vo.DeviceMapVo
|
import org.springframework.stereotype.Service
|
import tk.mybatis.mapper.entity.Example
|
import java.util.*
|
|
@Service
|
class UserMapServiceImpl(
|
private val userMapMapper: UserMapMapper,
|
private val userinfoMapper: UserinfoMapper,
|
private val userinfoTZMapper: UserinfoTZMapper,
|
private val sceneRep: SceneRep,
|
private val taskRep: TaskRep,
|
private val userInfoSVRep: UserInfoSVRep,
|
private val userInfoTZRep: UserInfoTZRep,
|
private val userMapRep: UserMapRep,
|
private val aopDataDeviceMap: AopDataDeviceMap,
|
) : UserMapService {
|
|
override fun getTZIdBySceneId(sceneId: String): UserMap {
|
val user = userInfoSVRep.findUser(sceneId)
|
val userId = user?.guid
|
val result = userMapMapper.selectByExample(Example(UserMap::class.java).apply {
|
createCriteria().andEqualTo("svUserId", userId)
|
})
|
return if (result.isNotEmpty()) result[0] else UserMap()
|
}
|
|
override fun getSceneByTZId(tzUserId: String): Scense? {
|
return userMapRep.findFromSupervision(tzUserId)
|
}
|
|
override fun autoCreateMap() {
|
// 选择需要处理的账户
|
val userList = userinfoMapper.selectByExample(Example(Userinfo::class.java).apply {
|
createCriteria().andEqualTo("remark", "徐汇区")
|
})
|
userList.forEach {
|
// 查找是否已经有账户匹配记录
|
val records = userMapMapper.selectByExample(Example(UserMap::class.java).apply {
|
createCriteria().andEqualTo("svUserId", it.guid)
|
})
|
// 没有记录时,创建匹配记录
|
if (records.isEmpty()) {
|
// 1、 根据两个系统中的用户名称进行精确匹配
|
val tzUsers = userinfoTZMapper.selectByExample(Example(UserinfoTZ::class.java).apply {
|
createCriteria().andEqualTo("realname", it.realname)
|
})
|
if (tzUsers.isNotEmpty()) {
|
val tzU = tzUsers[0]
|
if (userMapMapper.selectByPrimaryKey(tzU.guid) == null) {
|
userMapMapper.insert(UserMap().apply {
|
tzUserId = tzU.guid
|
tzUserName = tzU.realname
|
svUserId = it.guid
|
svUserName = it.realname
|
})
|
}
|
}
|
// 2、 无法精确匹配的,采用默认的编号,插入记录。后续人工修改(暂定)
|
else {
|
if (userMapMapper.selectByExample(Example(UserMap::class.java).apply {
|
createCriteria().andEqualTo("svUserId", it.guid)
|
}).isEmpty()) {
|
val id = "temp" + UUIDGenerator.generateShortUUID()
|
userMapMapper.insert(UserMap().apply {
|
tzUserId = id
|
tzUserName = id
|
svUserId = it.guid
|
svUserName = it.realname
|
umCreateTime = Date()
|
})
|
}
|
}
|
}
|
}
|
}
|
|
override fun fetchDeviceMap(areaVo: AreaVo): List<DeviceMapVo?> {
|
// 1.通过区域条件获取主体用户
|
val userIdList = when (areaVo.sourceType) {
|
//以飞羽环境系统中的用户为主体
|
1 -> {
|
val u = userInfoTZRep.findEnterpriseUser(areaVo.districtname, areaVo.scensetypeid?.toInt())
|
u.map { it?.guid }
|
}
|
//以飞羽监管系统中的用户为主体
|
2 -> {
|
val task = taskRep.findOneTask(areaVo) ?: throw BizException("当前查询条件下未找到对应顶层任务")
|
val scenes = sceneRep.findScene(task.tguid!!, areaVo.scensetypeid?.toInt(), areaVo.towncode)
|
.map { it?.guid }
|
userInfoSVRep.findUser(scenes).map { it?.guid }
|
}
|
else -> emptyList()
|
}
|
// 2.通过区域条件决定匹配的数据来源
|
return aopDataDeviceMap.findMapSet(areaVo, userIdList)
|
}
|
}
|