feiyu02
2025-06-09 c17e9978745cfe6c983f3aff75c9182fffef32fd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package cn.flightfeather.supervision.lightshare.service.impl
 
import cn.flightfeather.supervision.common.exception.BizException
import cn.flightfeather.supervision.common.utils.Constant
import cn.flightfeather.supervision.common.utils.DateUtil
import cn.flightfeather.supervision.common.utils.FileUtil
import cn.flightfeather.supervision.common.utils.JsonUtil
import cn.flightfeather.supervision.domain.ds1.entity.*
import cn.flightfeather.supervision.domain.ds1.repository.DeviceRep
import cn.flightfeather.supervision.lightshare.service.DeviceService
import cn.flightfeather.supervision.lightshare.vo.AreaVo
import cn.flightfeather.supervision.lightshare.vo.DataHead
import cn.flightfeather.supervision.lightshare.vo.MonitorDeviceInfoVo
import com.google.gson.Gson
import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Service
import org.springframework.web.multipart.MultipartFile
import java.util.*
 
/**
 *
 * @date 2024/7/24
 * @author feiyu02
 */
@Service
class DeviceServiceImpl(
    private val deviceRep: DeviceRep,
    @Value("\${filePath}") var filePath: String,
    @Value("\${imgPath}") var imgPath: String,
) : DeviceService {
 
    override fun findDevices(sceneId: String, deviceType: Constant.DeviceType): List<BaseDevice> {
        return deviceRep.findDeviceList(sceneId, deviceType)
    }
 
    override fun insertDevice(deviceInfo: String, deviceType: Constant.DeviceType): Int {
        return when (deviceType) {
            Constant.DeviceType.MONITOR_DEVICE -> {
                val info = Gson().fromJson(deviceInfo, MonitorDeviceInfo::class.java)
                deviceRep.insertDevice(info)
            }
            Constant.DeviceType.TREATMENT_DEVICE -> {
                val info = Gson().fromJson(deviceInfo, TreatmentDeviceInfo::class.java)
                deviceRep.insertDevice(info)
            }
            Constant.DeviceType.PRODUCTION_DEVICE -> {
                val info = Gson().fromJson(deviceInfo, ProductionDeviceInfo::class.java)
                deviceRep.insertDevice(info)
            }
        }
    }
 
    override fun updateDevice(deviceInfo: String, deviceType: Constant.DeviceType): Int {
        return when (deviceType) {
            Constant.DeviceType.MONITOR_DEVICE -> {
                val info = Gson().fromJson(deviceInfo, MonitorDeviceInfo::class.java)
                deviceRep.updateDevice(info)
            }
            Constant.DeviceType.TREATMENT_DEVICE -> {
                val info = Gson().fromJson(deviceInfo, TreatmentDeviceInfo::class.java)
                deviceRep.updateDevice(info)
            }
            Constant.DeviceType.PRODUCTION_DEVICE -> {
                val info = Gson().fromJson(deviceInfo, ProductionDeviceInfo::class.java)
                deviceRep.updateDevice(info)
            }
        }
    }
 
    override fun findDeviceLocations(
        sceneId: String?,
        deviceId: Int,
        deviceType: Constant.DeviceType,
    ): List<DeviceStatus> {
        return deviceRep.findStatuses(DeviceStatus().apply {
            dlDeviceId = deviceId
            dlDeviceType = deviceType.value
            dlSceneGuid = sceneId
        })
    }
 
    override fun insertDeviceLocation(deviceLocation: String, files: Array<MultipartFile>): Int {
        val obj = JsonUtil.gson.fromJson(deviceLocation, DeviceStatus::class.java)
        val time = DateUtil.DateToString(obj.dlCreateTime, DateUtil.DateStyle.YYYY_MM_DD)
        val picPath = FileUtil.saveFiles(files, imgPath, "device/${obj.dlSceneGuid}/${obj.dlDeviceId}/${time}")
        obj.dlPicUrl = picPath.joinToString(";")
        obj.dlCreateTime = Date()
        return deviceRep.insertStatus(obj)
    }
 
    override fun updateDeviceLocation(
        deviceLocation: String,
        deleteImg: List<String>,
        files: Array<MultipartFile>,
    ): Int {
        // 获取更新信息
        val obj = JsonUtil.gson.fromJson(deviceLocation, DeviceStatus::class.java)
 
        // 获取原位置信息,删除图片路径和对应图片
        val dL = deviceRep.findStatus(obj.dlId) ?: throw BizException("该设备位置信息不存在,无法修改")
        val oldImg = dL.dlPicUrl.split(";").toMutableList()
        deleteImg.forEach {
            if (oldImg.contains(it)) {
                if (FileUtil.delFile(imgPath + it)) {
                    oldImg.remove(it)
                }
            }
        }
 
        // 保存新增图片
        val time = DateUtil.DateToString(obj.dlCreateTime, DateUtil.DateStyle.YYYY_MM_DD)
        val picPath = FileUtil.saveFiles(files, imgPath, "device/${obj.dlId}/${time}")
 
        oldImg.addAll(picPath)
        obj.dlPicUrl = oldImg.joinToString(";")
        return deviceRep.updateStatus(obj)
    }
 
    override fun searchExternalDevice(
        areaVo: AreaVo, keyword: String, page: Int?, perPage: Int?,
    ): Pair<DataHead, MonitorDeviceInfoVo> {
        TODO("Not yet implemented")
    }
}