Riku
2024-08-13 6e1095e946997e406926c204ceeb5c820dbd07c1
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
package cn.flightfeather.supervision.lightshare.service.impl
 
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.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,
    @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
    }
 
    //根据问题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 = "${Constant.DEFAULT_FILE_PATH}/images/$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 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("${Constant.DEFAULT_FILE_PATH}/images/$path/$id.jpg")
        if (f.exists()) {
            f.delete()
        }
        return mediafileMapper.deleteByPrimaryKey(id)
    }
}