From 9cb8d7e0f4ffca386b14a15f8a0aca4d1db23252 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 30 十月 2025 15:58:45 +0800
Subject: [PATCH] 2025.10.30 新增单场景纵向统计接口
---
src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ScenseServiceImpl.kt | 138 ++++++++++++++++++++++++++++++++++++---------
1 files changed, 110 insertions(+), 28 deletions(-)
diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ScenseServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ScenseServiceImpl.kt
index 09bde16..41ed227 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ScenseServiceImpl.kt
+++ b/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
@@ -66,6 +83,7 @@
val name = scense.name ?: ""
val example = Example(Scense::class.java)
val criteria = example.createCriteria()
+ criteria.andEqualTo("typeid", scense.typeid)
//濡傛灉鏈塼ype淇℃伅,灏辨瀯寤簍ype鏌ヨ
if (StringUtil.isNotEmpty(scense.type)) {
criteria.andEqualTo("type", scense.type)
@@ -82,6 +100,10 @@
if (StringUtil.isNotEmpty(scense.towncode)) {
criteria.andEqualTo("towncode", scense.towncode)
}
+ if (StringUtil.isNotEmpty(scense.extension1)) {
+ criteria.andEqualTo("extension1", scense.extension1)
+ }
+ criteria.andEqualTo("index", scense.index)
//name鏌ヨ
criteria.andLike("name", "%$name%")
val re = scenseMapper.selectByExample(example)
@@ -130,12 +152,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)
@@ -257,17 +280,17 @@
return BaseResponse(true, "璇锋眰鎴愬姛", data = result)
}
- override fun getSceneDetail(sceneId: String): BaseResponse<SceneDetail> {
+ override fun getSceneDetail(sceneId: String): 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
}
@@ -279,10 +302,10 @@
val sceneDevice = sceneDeviceMapper.selectByPrimaryKey(sceneId)
sceneDetail.sceneDevice = sceneDevice
- return BaseResponse(true, data = sceneDetail)
+ return sceneDetail
}
- override fun updateSceneDetail(typeId: Int, sceneDetailStr: SceneDetailStr): BaseResponse<String> {
+ override fun updateSceneDetail(typeId: Int, sceneDetailStr: SceneDetailStr): String {
val result = StringBuilder()
if (sceneDetailStr.scense?.guid != null) {
@@ -304,8 +327,9 @@
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)
+ subScene.csUpdateTime = Date()
if (subScene.getsGuid() != null) {
val record = sceneConstructionSiteMapper.selectByPrimaryKey(subScene.getsGuid())
isUpdate = record != null
@@ -316,7 +340,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 +352,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 +364,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())
@@ -356,7 +380,7 @@
result.append("鍦烘櫙鐗规湁淇℃伅${if (isUpdate) "鏇存柊" else "鏂板"}: $r; ")
}
- return BaseResponse(true, data = result.toString())
+ return result.toString()
}
override fun searchScene(areaVo: AreaVo, page: Int?, perPage: Int?): BaseResponse<List<Scense>> {
@@ -369,7 +393,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 +407,63 @@
})
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(files: Array<MultipartFile>): Boolean {
+ if (files.isEmpty()) throw BizException("鏈纭笂浼犳枃浠讹紝鎺ュ彛璋冪敤閿欒")
+
+ val f = ByteArrayInputStream(files[0].bytes)
+ val scenes = sceneImport.readFromFile(f)
+ if (scenes.isEmpty()) throw BizException("鏂囦欢鍐呭涓虹┖")
+ // 鏌ユ壘鍦烘櫙鍚嶇О鏄惁閲嶅
+ val names = scenes.map { it.scense?.name }
+ sceneRep.findSceneList(names).map { it?.name }.ifNotEmpty {
+ val str = this.joinToString("锛�")
+ throw BizException("瀛樺湪閲嶅鍦烘櫙锛屽涓嬶細${str}")
+ }
+ scenes.forEach {
+ it.scense ?: return@forEach
+ createOneScene(it.scense!!)
+ sceneRep.insertOrUpdateSubScene(it.scense!!.typeid?.toInt(), it.scense!!.guid, it.subScene)
+ }
+ 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()
+ })
+ }
+
}
\ No newline at end of file
--
Gitblit v1.9.3