From a3cc1d220f8a1de11874bebceba0130d32157ff1 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期二, 30 九月 2025 09:26:32 +0800
Subject: [PATCH] 2025.9.30 1. 联合前端调试数据产品接口(待完成)

---
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/impl/ScenseServiceImpl.kt |   92 ++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 84 insertions(+), 8 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 ea2e3be..c26f05b 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,19 +1,30 @@
 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.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(
@@ -25,6 +36,10 @@
     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
@@ -68,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)
@@ -84,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)
@@ -132,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)
@@ -262,10 +283,10 @@
     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()) {
+        val mapper = when (scene?.typeid.toString()) {
             Constant.SceneType.TYPE1.value -> sceneConstructionSiteMapper
             Constant.SceneType.TYPE2.value -> sceneWharfMapper
             Constant.SceneType.TYPE3.value -> sceneMixingPlantMapper
@@ -308,6 +329,7 @@
             when (typeId.toString()) {
                 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
@@ -371,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 {
@@ -390,4 +411,59 @@
     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