package cn.flightfeather.supervision.lightshare.repository.impl
|
|
import cn.flightfeather.supervision.domain.entity.MaterialSignState
|
import cn.flightfeather.supervision.domain.entity.MeetingMaterial
|
import cn.flightfeather.supervision.domain.enumeration.MeetingFileType
|
import cn.flightfeather.supervision.domain.mapper.MaterialSignStateMapper
|
import cn.flightfeather.supervision.domain.mapper.MeetingMaterialMapper
|
import cn.flightfeather.supervision.infrastructure.utils.FileUtil
|
import cn.flightfeather.supervision.infrastructure.utils.UUIDGenerator
|
import cn.flightfeather.supervision.lightshare.repository.MeetingMaterialRepository
|
import cn.flightfeather.supervision.websocket.MediaType
|
import cn.flightfeather.supervision.websocket.MeetingMsgVo
|
import cn.flightfeather.supervision.lightshare.vo.MeetingMaterialVo
|
import com.github.pagehelper.PageHelper
|
import org.springframework.stereotype.Repository
|
import org.springframework.web.multipart.MultipartFile
|
import tk.mybatis.mapper.entity.Example
|
import java.util.*
|
import javax.servlet.http.HttpServletResponse
|
|
/**
|
* @author riku
|
* Date: 2019/12/19
|
*/
|
@Repository
|
class MeetingMaterialRepositoryImpl(val meetingMaterialMapper: MeetingMaterialMapper,
|
val materialSignStateMapper: MaterialSignStateMapper): MeetingMaterialRepository {
|
|
override fun deleteAllByMeetingId(meetingId: String): Int {
|
return meetingMaterialMapper.deleteByExample(Example(MeetingMaterial::class.java).apply {
|
createCriteria().andEqualTo("mmMguid", meetingId)
|
})
|
}
|
|
override fun saveMaterials(userId: String, meetingId: String, roomId: String, msgVo: MeetingMsgVo, files: Array<MultipartFile>, documentType: Int): MeetingMsgVo {
|
var url = ""
|
var thumbnailPath = ""
|
|
val basePath = "D:/02product/05ledger/files/"
|
val path = "$meetingId-$roomId/${msgVo.mediaType ?: 0}/"
|
val fileName = FileUtil.getFileName(msgVo.materialUrl)
|
url = path + fileName
|
val thumbnailName = FileUtil.getFileName(msgVo.thumbnailPath)
|
thumbnailPath = path + thumbnailName
|
|
files.forEach {file ->
|
FileUtil.uploadFile(file.bytes, basePath + path, file.originalFilename?:"${Date().time}_no_name+file")
|
}
|
meetingMaterialMapper.insert(MeetingMaterial().apply {
|
mmId = UUIDGenerator.generate16ShortUUID()
|
mcId = 0
|
mmDocumenttype = documentType.toByte()
|
mmMguid = meetingId
|
mmResourcefiletype = msgVo.mediaType?.toByte()
|
mmResourceurl = url
|
mmExtension2 = thumbnailPath
|
mmUpdatedate = Date()
|
})
|
msgVo.materialUrl = url
|
msgVo.thumbnailPath = thumbnailPath
|
return msgVo
|
}
|
|
override fun getMeetingMaterials(userId: String, meetingId: String, mediaType: Int, page: Int, perPage: Int, response: HttpServletResponse):List<MeetingMaterial> {
|
val example = Example(MeetingMaterial::class.java).apply {
|
createCriteria().andEqualTo("mmMguid", meetingId)
|
.apply {
|
if (mediaType != MediaType.NoType.value) {
|
andEqualTo("mmResourcefiletype", mediaType.toByte())
|
}
|
}
|
and(
|
createCriteria().orIsNull("mmExtension1")
|
.orNotEqualTo("mmExtension1", "deleted")
|
)
|
}
|
val counts = meetingMaterialMapper.selectCountByExample(example)
|
val totalPage = Math.ceil(counts.toDouble() / perPage.toDouble()).toInt()
|
response.setIntHeader("totalPage", totalPage)
|
response.setIntHeader("currentPage", page)
|
|
val offset = perPage.times(page - 1)
|
PageHelper.offsetPage<MeetingMaterial>(offset, perPage)
|
|
return meetingMaterialMapper.selectByExample(example)
|
}
|
|
override fun getMaterialSignState(userId: String, meetingId: String, materialId: String): Boolean {
|
val resultList = materialSignStateMapper.selectByExample(Example(MaterialSignState::class.java).apply {
|
createCriteria().andEqualTo("msUserid", userId)
|
.andEqualTo("mcId", meetingId)
|
.andEqualTo("mmId", materialId)
|
})
|
return if (resultList.isEmpty()) {
|
false
|
} else {
|
resultList[0].mmSignstate ?: false
|
}
|
}
|
|
override fun updateSignState(userId: String, signStateList: List<MeetingMaterialVo>): Boolean {
|
var result = 0
|
signStateList.forEach {
|
result += materialSignStateMapper.insert(MaterialSignState().apply {
|
msUserid = userId
|
mmId = it.id
|
mcId = it.meetingId
|
mmSignstate = true
|
})
|
}
|
return result == signStateList.size
|
}
|
|
override fun getMaterialCount(meetingId: String, mediaType: Int, meetingFileType: Int): Int {
|
return meetingMaterialMapper.selectCountByExample(Example(MeetingMaterial::class.java).apply {
|
createCriteria().andEqualTo("mmMguid", meetingId)
|
.apply {
|
if (meetingFileType != 0) {
|
andEqualTo("mmDocumenttype", meetingFileType.toByte())
|
}
|
if (mediaType != MediaType.NoType.value) {
|
andEqualTo("mmResourcefiletype", mediaType.toByte())
|
}
|
}
|
and(
|
createCriteria().orIsNull("mmExtension1")
|
.orNotEqualTo("mmExtension1", "deleted")
|
)
|
})
|
}
|
|
override fun deleteFiles(meetingId: String, fileList: List<MeetingMaterialVo>): List<MeetingMaterialVo> {
|
var result = 0
|
fileList.forEach {
|
val newEntity = MeetingMaterial().apply {
|
mmId = it.id
|
mmUpdatedate = Date()
|
mmExtension1 = "deleted"
|
}
|
result += meetingMaterialMapper.updateByPrimaryKeySelective(newEntity)
|
}
|
return if (result == fileList.size) {
|
fileList
|
} else {
|
emptyList()
|
}
|
}
|
|
override fun getMaterialSignCount(userId: String, meetingId: String): Int {
|
return materialSignStateMapper.selectCountByExample(Example(MaterialSignState::class.java).apply {
|
createCriteria().andEqualTo("msUserid", userId)
|
.andEqualTo("mcId", meetingId)
|
.andEqualTo("mmSignstate", true)
|
})
|
}
|
}
|