feiyu02
2025-03-28 7d74f3fd087d4a8192ed556a6c2e3a2ea3c81cff
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
package cn.flightfeather.supervision.lightshare.service.impl
 
import cn.flightfeather.supervision.common.exception.BizException
import cn.flightfeather.supervision.domain.ds1.entity.Mediafile
import cn.flightfeather.supervision.domain.ds1.mapper.MediafileMapper
import cn.flightfeather.supervision.common.utils.Constant
import cn.flightfeather.supervision.common.utils.FileUtil
import cn.flightfeather.supervision.domain.ds1.entity.Inspection
import cn.flightfeather.supervision.domain.ds1.repository.InspectionRep
import cn.flightfeather.supervision.domain.ds1.repository.MediaFileRep
import cn.flightfeather.supervision.domain.ds1.repository.SceneRep
import cn.flightfeather.supervision.domain.ds1.repository.SubTaskRep
import cn.flightfeather.supervision.lightshare.service.MediafileService
import cn.flightfeather.supervision.lightshare.vo.MediaFileVo
import com.fasterxml.jackson.core.type.TypeReference
import org.springframework.beans.BeanUtils
import org.springframework.stereotype.Service
import org.springframework.web.multipart.MultipartFile
import com.fasterxml.jackson.databind.ObjectMapper
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Value
import java.io.File
 
 
@Service
class MediafileServiceImpl(
    val mediafileMapper: MediafileMapper,
    private val mediaFileRep: MediaFileRep,
    private val inspectionRep: InspectionRep,
    private val subTaskRep: SubTaskRep,
    private val sceneRep: SceneRep,
    @Value("\${filePath}") var filePath: String,
    @Value("\${imgPath}") var imgPath: String,
) : MediafileService {
 
    private val logging: Logger = LoggerFactory.getLogger(MediafileServiceImpl::class.java)
 
    //根据子任务id及业务类型ID查询
    override fun findBysubtaskbtid(id: String, btid: String): MutableList<Mediafile>? {
        val mediafile = Mediafile()
        mediafile.businesstypeid = btid.toByte()
        mediafile.iguid = id
        val mediafilelist = mediafileMapper.select(mediafile)
        mediafilelist.sortBy { it.savetime }
        return mediafilelist
    }
 
    /**
     * 获取所有任意拍常规记录图片
     * @param iGuid
     */
    override fun getRoutineRecord(iGuid: String?, stGuid: String?): List<Mediafile?> {
        var inspectionGuid = iGuid
        val sceneId = if (iGuid != null) {
            inspectionRep.findOne(iGuid)?.sguid
        } else if (stGuid != null) {
            val s = subTaskRep.findOne(stGuid)
            val ins = inspectionRep.findOne(Inspection().apply { stguid = stGuid })
            inspectionGuid = ins?.guid
            s?.scenseid
        } else {
            throw BizException("巡查记录id和巡查任务id至少填写其中一个")
        }
        sceneId ?: throw BizException("记录对应的场景不存在")
        val sceneInfo = sceneRep.findScene(sceneId = sceneId)
        val mediaFileTypeList = Constant.MediaFileType.getList(sceneInfo?.typeid).map { it.value }
        return mediaFileRep.findList(inspectionGuid, mediaFileTypeList)
    }
 
    //根据问题id获取媒体文件
    override fun findByProblemID(id: String): List<MediaFileVo> {
        val mediaFileVos = mutableListOf<MediaFileVo>()
        val mediafile = Mediafile()
        mediafile.iguid = id
        val mediafiles = mediafileMapper.select(mediafile)
        if (mediafiles.isNotEmpty()) {
            mediafiles.forEach {
                val mediafileVo = MediaFileVo()
                BeanUtils.copyProperties(it, mediafileVo)
                mediaFileVos.add(mediafileVo)
            }
        }
        mediaFileVos.sortBy { it.savetime }
        return mediaFileVos
    }
 
    //新增媒体文件
    override fun addMedifile(mediafileVoList: String, files: Array<MultipartFile>) {
//        logging.info("上传文件方法调用")
//        logging.info("mediafileVoList:" + mediafileVoList)
        val mapper = ObjectMapper()
 
        //json转object
        val mediaFileVos =
            mapper.readValue<List<MediaFileVo>>(mediafileVoList, object : TypeReference<List<MediaFileVo>>() {})
 
        if (mediaFileVos.isNotEmpty()) {
            mediaFileVos.forEach {
                val mediafile = Mediafile()
                BeanUtils.copyProperties(it, mediafile)
 
                //查询数据库有没有当前数据,有就不新增
                //次操作解决延迟后手机重复提交问题
                val reme = mediafileMapper.selectByPrimaryKey(mediafile.guid)
                if (reme == null) {
                    mediafileMapper.insert(mediafile)
                }
            }
 
            //根据扩展字段1获取保存路径
            val path = mediaFileVos[0].extension1
            for (image in files) {
                val fileName = image.originalFilename
 
                val filePath = "${imgPath}/$path/"
                try {
                    //调用文件保存方法
                    FileUtil.uploadFile(image.bytes, filePath, fileName!!)
                } catch (e: Exception) {
                    // TODO: handle exception
                }
            }
        }
    }
 
 
    //根据业务类型ID获取媒体文件
    override fun findByBusinessGUID(businessGuid: String): List<MediaFileVo> {
        val mediaFileVoList = mutableListOf<MediaFileVo>()
        val mediafile = Mediafile()
        mediafile.businessguid = businessGuid
        val mediafiles = mediafileMapper.select(mediafile)
        mediafiles.forEach {
            val mediafileVo = MediaFileVo()
            BeanUtils.copyProperties(it, mediafileVo)
            mediaFileVoList.add(mediafileVo)
        }
        return mediaFileVoList
    }
 
    override fun findOne(id: String): Mediafile = mediafileMapper.selectByPrimaryKey(id)
 
    override fun findAll(): MutableList<Mediafile> = mediafileMapper.selectAll()
 
    override fun save(mediafile: Mediafile): Int = mediafileMapper.updateByPrimaryKey(mediafile)
 
    override fun saveMediaFile(files: Array<MultipartFile>, getMediaFile: () -> Mediafile): Int {
        var res = 0
        // 保存图片
        for (image in files) {
            val mediaFile = getMediaFile()
            res += mediafileMapper.insert(mediaFile)
 
            val path = mediaFile.extension1
            val fileName = mediaFile.guid + ".jpg"
            val filePath = "${imgPath}/$path/"
            try {
                //调用文件保存方法
                FileUtil.uploadFile(image.bytes, filePath, fileName)
            } catch (e: Exception) {
                // TODO: handle exception
            }
        }
        return res
    }
 
    override fun update(mediafile: Mediafile): Int = mediafileMapper.updateByPrimaryKey(mediafile)
 
    //删除媒体文件
    override fun delete(id: String): Int {
        val mediafile = mediafileMapper.selectByPrimaryKey(id)
        //服务器保存路径
        val path = mediafile.extension1
        //File("/Users/liwei/images/${path}/${id}.jpg").delete()
        //先删图片
        val f = File("${imgPath}/$path/$id.jpg")
        if (f.exists()) {
            f.delete()
        }
        return mediafileMapper.deleteByPrimaryKey(id)
    }
 
    override fun deleteList(idList: List<String>): Int {
        var res = 0
        if (idList.isEmpty()) return res
        mediaFileRep.findList(idList).forEach {
            //服务器保存路径
            val path = it?.extension1
            //先删图片
            val f = File("${imgPath}/$path/${it?.guid}.jpg")
            if (f.exists()) {
                f.delete()
            }
            res += mediaFileRep.deleteOne(it?.guid)
        }
        return res
    }
}