feiyu02
2024-09-25 0516cba27e632f20efac2752787f38f0c87baafa
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ScenseServiceImpl.kt
@@ -1,28 +1,45 @@
package cn.flightfeather.supervision.lightshare.service.impl
import cn.flightfeather.supervision.business.import.SceneImport
import cn.flightfeather.supervision.business.location.LocationRoadNearby
import cn.flightfeather.supervision.common.exception.BizException
import cn.flightfeather.supervision.common.utils.Constant
import cn.flightfeather.supervision.domain.ds1.entity.*
import cn.flightfeather.supervision.domain.ds1.mapper.*
import cn.flightfeather.supervision.common.utils.Constant
import cn.flightfeather.supervision.domain.ds1.repository.SceneRep
import cn.flightfeather.supervision.domain.ds2.entity.UserMap
import cn.flightfeather.supervision.domain.ds2.repository.BaseInfoRep
import cn.flightfeather.supervision.domain.ds2.repository.UserMapRep
import cn.flightfeather.supervision.lightshare.service.*
import cn.flightfeather.supervision.lightshare.vo.*
import com.github.pagehelper.PageHelper
import com.google.gson.Gson
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
import org.springframework.beans.BeanUtils
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import org.springframework.web.multipart.MultipartFile
import tk.mybatis.mapper.entity.Example
import tk.mybatis.mapper.util.StringUtil
import java.io.ByteArrayInputStream
import java.util.*
import kotlin.collections.ArrayList
@Service
class ScenseServiceImpl(
        val scenseMapper: ScenseMapper,
        val sceneConstructionSiteMapper: SceneConstructionSiteMapper,
        val sceneDeviceMapper: SceneDeviceMapper,
        val sceneMixingPlantMapper: SceneMixingPlantMapper,
        val sceneStorageYardMapper: SceneStorageYardMapper,
        val sceneWharfMapper: SceneWharfMapper,
        val userinfoService: UserinfoService
    val scenseMapper: ScenseMapper,
    val sceneConstructionSiteMapper: SceneConstructionSiteMapper,
    val sceneDeviceMapper: SceneDeviceMapper,
    val sceneMixingPlantMapper: SceneMixingPlantMapper,
    val sceneStorageYardMapper: SceneStorageYardMapper,
    val sceneWharfMapper: SceneWharfMapper,
    val userinfoService: UserinfoService,
    private val locationRoadNearby: LocationRoadNearby,
    private val sceneImport: SceneImport,
    private val sceneRep: SceneRep,
    private val baseInfoRep: BaseInfoRep,
    private val userMapRep: UserMapRep,
) : ScenseService {
    @Autowired
@@ -130,12 +147,13 @@
    }
    override fun save(scense: Scense): Int {
        // TODO: 2021/7/20 新增场景的同时生成账户
        val r = scenseMapper.insert(scense)
        if (r == 1) {
            scense.guid?.let { userinfoService.createAccount(it) }
        return try {
            createScene(scense)
            1
        } catch (e: BizException) {
            println(e.message)
            0
        }
        return r
    }
    override fun update(scense: Scense): Int = scenseMapper.updateByPrimaryKeySelective(scense)
@@ -260,14 +278,14 @@
    override fun getSceneDetail(sceneId: String): BaseResponse<SceneDetail> {
        val sceneDetail = SceneDetail()
        val scene = scenseMapper.selectByPrimaryKey(sceneId)
        val scene = sceneRep.findScene(sceneId = sceneId)
        sceneDetail.scense = scene
        val mapper = when (scene.typeid.toString()) {
            Constant.ScenseType.TYPE1.value -> sceneConstructionSiteMapper
            Constant.ScenseType.TYPE2.value -> sceneWharfMapper
            Constant.ScenseType.TYPE3.value -> sceneMixingPlantMapper
            Constant.ScenseType.TYPE14.value -> sceneStorageYardMapper
        val mapper = when (scene?.typeid.toString()) {
            Constant.SceneType.TYPE1.value -> sceneConstructionSiteMapper
            Constant.SceneType.TYPE2.value -> sceneWharfMapper
            Constant.SceneType.TYPE3.value -> sceneMixingPlantMapper
            Constant.SceneType.TYPE14.value -> sceneStorageYardMapper
            else -> null
        }
@@ -304,7 +322,7 @@
            var r = 0
            var isUpdate = true
            when (typeId.toString()) {
                Constant.ScenseType.TYPE1.value -> {
                Constant.SceneType.TYPE1.value -> {
                    val subScene = Gson().fromJson(sceneDetailStr.subScene, SceneConstructionSite::class.java)
                    if (subScene.getsGuid() != null) {
                        val record = sceneConstructionSiteMapper.selectByPrimaryKey(subScene.getsGuid())
@@ -316,7 +334,7 @@
                        }
                    }
                }
                Constant.ScenseType.TYPE2.value -> {
                Constant.SceneType.TYPE2.value -> {
                    val subScene = Gson().fromJson(sceneDetailStr.subScene, SceneWharf::class.java)
                    if (subScene.getsGuid() != null) {
                        val record = sceneWharfMapper.selectByPrimaryKey(subScene.getsGuid())
@@ -328,7 +346,7 @@
                        }
                    }
                }
                Constant.ScenseType.TYPE3.value -> {
                Constant.SceneType.TYPE3.value -> {
                    val subScene = Gson().fromJson(sceneDetailStr.subScene, SceneMixingPlant::class.java)
                    if (subScene.getsGuid() != null) {
                        val record = sceneMixingPlantMapper.selectByPrimaryKey(subScene.getsGuid())
@@ -340,7 +358,7 @@
                        }
                    }
                }
                Constant.ScenseType.TYPE14.value -> {
                Constant.SceneType.TYPE14.value -> {
                    val subScene = Gson().fromJson(sceneDetailStr.subScene, SceneStorageYard::class.java)
                    if (subScene.getsGuid() != null) {
                        val record = sceneStorageYardMapper.selectByPrimaryKey(subScene.getsGuid())
@@ -369,7 +387,6 @@
                areaVo.towncode?.let { andEqualTo("towncode", it) }
                areaVo.scensetypeid?.let { andEqualTo("typeid", it) }
                areaVo.sceneName?.let { andLike("name", "%${it}%") }
            }
            areaVo.online?.let {
                and(createCriteria().apply {
@@ -384,4 +401,58 @@
        })
        return BaseResponse(true, head = DataHead(p.pageNum, p.pages, p.total), data = list)
    }
    override fun searchByCoordinate(lng: Double, lat: Double, radius: Double): List<Scense> {
        return locationRoadNearby.searchByRadius(Pair(lng, lat), radius)
    }
    override fun importSceneInfo(file: MultipartFile): Boolean {
        val f = ByteArrayInputStream(file.bytes)
        val scenes = sceneImport.readFromFile(f)
        // 查找场景名称是否重复
        val names = scenes.map { it.name }
        sceneRep.findSceneList(names).map { it?.name }.ifNotEmpty {
            val str = this.joinToString(",")
            throw BizException("存在重复场景,如下:${str}")
        }
        scenes.forEach {
            createOneScene(it)
        }
        return true
    }
    override fun createScene(scense: Scense): Scense {
        val names = listOf(scense.name)
        sceneRep.findSceneList(names).map { it?.name }.ifNotEmpty {
            val str = this.joinToString(",")
            throw BizException("存在重复场景,如下:${str}")
        }
        createOneScene(scense)
        return scense
    }
    override fun createOneScene(scense: Scense) {
        //1. 插入场景表
        scense.townname = scense.townname?.trim()
        sceneRep.insert(scense)
        //2. 生成对应账户信息
        val userInfo = userinfoService.createAccount(scense)
        createTZUserInfo(userInfo, scense)
    }
    override fun createTZUserInfo(userInfo: Userinfo, scense: Scense) {
        //1. 生成飞羽环境系统对应账户和基础信息
        val userInfoTZ = userinfoService.createAccountTZ(userInfo, scense)
        val baseInfo = baseInfoRep.create(userInfoTZ, scense)
        //2. 生成用户匹配信息
        userMapRep.insert(UserMap().apply {
            tzUserId = userInfoTZ.guid
            tzUserName = userInfoTZ.realname
            svUserId = userInfo.guid
            svUserName = userInfo.realname
            umCreateTime = Date()
        })
    }
}