| | |
| | | import cn.flightfeather.supervision.domain.entity.LedgerMediaFile |
| | | import cn.flightfeather.supervision.domain.entity.LedgerRecord |
| | | import cn.flightfeather.supervision.domain.entity.LedgerSubType |
| | | import cn.flightfeather.supervision.domain.enumeration.LedgerCheckStatus |
| | | import cn.flightfeather.supervision.domain.enumeration.SceneType |
| | | import cn.flightfeather.supervision.domain.mapper.LedgerMediaFileMapper |
| | | import cn.flightfeather.supervision.domain.mapper.LedgerRecordMapper |
| | | import cn.flightfeather.supervision.domain.mapper.LedgerSubTypeMapper |
| | | import cn.flightfeather.supervision.domain.mapper.UserinfoMapper |
| | | import cn.flightfeather.supervision.domain.repository.LedgerMediaFileRep |
| | | import cn.flightfeather.supervision.domain.repository.LedgerRep |
| | | import cn.flightfeather.supervision.domain.repository.UserInfoRep |
| | | import cn.flightfeather.supervision.infrastructure.utils.DateUtil |
| | | import cn.flightfeather.supervision.infrastructure.utils.FileUtil |
| | | import cn.flightfeather.supervision.infrastructure.utils.UUIDGenerator |
| | | import cn.flightfeather.supervision.lightshare.service.LedgerService |
| | | import cn.flightfeather.supervision.lightshare.vo.LedgerSubTypeVo |
| | | import cn.flightfeather.supervision.lightshare.vo.LedgerVo |
| | | import cn.flightfeather.supervision.lightshare.vo.* |
| | | import com.fasterxml.jackson.core.type.TypeReference |
| | | import com.fasterxml.jackson.databind.ObjectMapper |
| | | import com.github.pagehelper.PageHelper |
| | | import org.springframework.beans.factory.annotation.Value |
| | | import org.springframework.stereotype.Service |
| | | import org.springframework.web.multipart.MultipartFile |
| | | import tk.mybatis.mapper.entity.Example |
| | | import java.io.File |
| | | import java.io.FileNotFoundException |
| | | import java.time.LocalDate |
| | | import java.time.LocalDateTime |
| | | import java.time.ZoneId |
| | | import java.time.format.DateTimeFormatter |
| | | import java.util.* |
| | | import javax.servlet.http.HttpServletResponse |
| | | import kotlin.collections.ArrayList |
| | |
| | | |
| | | @Service |
| | | class LedgerServiceImpl( |
| | | val ledgerSubTypeMapper: LedgerSubTypeMapper, |
| | | val userinfoMapper: UserinfoMapper, |
| | | val ledgerRecordMapper: LedgerRecordMapper, |
| | | val ledgerMediaFileMapper: LedgerMediaFileMapper |
| | | ):LedgerService { |
| | | val ledgerSubTypeMapper: LedgerSubTypeMapper, |
| | | val userinfoMapper: UserinfoMapper, |
| | | val ledgerRecordMapper: LedgerRecordMapper, |
| | | val ledgerMediaFileMapper: LedgerMediaFileMapper, |
| | | private val ledgerMediaFileRep: LedgerMediaFileRep, |
| | | private val userInfoRep: UserInfoRep, |
| | | private val ledgerRep: LedgerRep, |
| | | ) : LedgerService { |
| | | |
| | | @Value("\${imgPath}") |
| | | lateinit var imgPath: String |
| | | |
| | | private val notInvolvedPath = "ledgerIcons/ledger_not_involved.jpg" |
| | | |
| | | override fun getLedgerType(sceneType: Int): ArrayList<LedgerSubTypeVo> { |
| | | val ledgerSubTypes = ledgerSubTypeMapper.selectByExample(Example(LedgerSubType::class.java).apply { |
| | |
| | | val resultList = ArrayList<LedgerSubTypeVo>() |
| | | ledgerSubTypes.forEach { |
| | | val l = LedgerSubTypeVo( |
| | | it.lsSubtypeid, |
| | | it.lsName, |
| | | it.getlTypeid(), |
| | | it.getlTypename(), |
| | | needUpdate = it.getlNeedupdate(), |
| | | sceneType = it.getlScenetype(), |
| | | iconUrl = it.getlIconurl() |
| | | it.lsSubtypeid, |
| | | it.lsName, |
| | | it.getlTypeid(), |
| | | it.getlTypename(), |
| | | needUpdate = it.getlNeedupdate(), |
| | | sceneType = it.getlScenetype(), |
| | | iconUrl = it.getlIconurl() |
| | | ) |
| | | resultList.add(l) |
| | | } |
| | |
| | | } |
| | | |
| | | override fun getUserLedgerSummary(userId: String, sceneType: Int, time: String): List<LedgerSubTypeVo> { |
| | | val c = Calendar.getInstance().apply { this.time = DateUtil.StringToDate(time) } |
| | | val year = c.get(Calendar.YEAR) |
| | | val month = c.get(Calendar.MONTH) + 1 |
| | | |
| | | val ledgerSubTypes = ledgerSubTypeMapper.selectByExample(Example(LedgerSubType::class.java).apply { |
| | | if (sceneType != SceneType.NoType.value) { |
| | | createCriteria().andEqualTo("lScenetype", sceneType) |
| | | } |
| | | orderBy("lTypeid") |
| | | }) |
| | | val records = getLedgerRecords(userId, null, sceneType, time) |
| | | val resultList = mutableListOf<LedgerSubTypeVo>() |
| | | ledgerSubTypes.forEach { |
| | | val l = LedgerSubTypeVo( |
| | | it.lsSubtypeid, |
| | | it.lsName, |
| | | it.getlTypeid(), |
| | | it.getlTypename(), |
| | | needUpdate = it.getlNeedupdate(), |
| | | sceneType = it.getlScenetype(), |
| | | iconUrl = it.getlIconurl() |
| | | it.lsSubtypeid, |
| | | it.lsName, |
| | | it.getlTypeid(), |
| | | it.getlTypename(), |
| | | needUpdate = it.getlNeedupdate(), |
| | | sceneType = it.getlScenetype(), |
| | | iconUrl = it.getlIconurl(), |
| | | realTime = it.getlRealTime(), |
| | | description = it.getlDescription(), |
| | | notRelated = it.getlNotRelatedSwitch() ?: true, |
| | | multigroup = it.getlMultiGroup() ?: false |
| | | ) |
| | | for (r in records) { |
| | | if (l.ledgerSubTypeId == r.lsSubtypeid) { |
| | | // FIXME: 2023/5/6 规则变动,但为了不影响之前的记录,时间为2023年4月及之前的不适用新规则 |
| | | if (year >= 2023 && month > 4) { |
| | | if (r.lrExtension2 == "notInvolved" && r.lrYear <= year && r.lrMonth < month.toByte()) { |
| | | continue |
| | | } |
| | | } |
| | | l.ledgerFinished = true |
| | | l.upLoad = true |
| | | l.checkStatus = r.lrVerifyrst?.toIntOrNull() ?: LedgerCheckStatus.UnCheck.value |
| | | // l.checkStatus = r.lrVerifyrst?.toIntOrNull() ?: LedgerCheckStatus.UnCheck.value |
| | | l.onTime = r.lrIssubmitontime |
| | | l.verified |
| | | l.verifierName = r.lrVerifierrealname |
| | | l.verified = r.lrIsverify |
| | | l.verifyRst = r.lrVerifyrst |
| | | l.involved = r.lrExtension2 != "notInvolved" |
| | | break |
| | | } |
| | | } |
| | |
| | | return resultList |
| | | } |
| | | |
| | | override fun getLedgerDetail(userId: String, ledgerSubTypeId: Int?, sceneType: Int, |
| | | startTime: String, endTime: String, |
| | | page: Int?, perPage: Int, response: HttpServletResponse |
| | | override fun getLedgerDetail( |
| | | userId: String, ledgerSubTypeId: Int?, sceneType: Int, |
| | | startTime: String, endTime: String, |
| | | page: Int?, perPage: Int, response: HttpServletResponse, |
| | | ): ArrayList<LedgerVo> { |
| | | val result = ArrayList<LedgerVo>() |
| | | |
| | |
| | | return result |
| | | } |
| | | |
| | | val startDate = DateUtil().StringToDate(startTime) |
| | | val endDate = DateUtil().StringToDate(endTime) |
| | | val startDate = DateUtil.StringToDate(startTime) |
| | | val endDate = DateUtil.StringToDate(endTime) |
| | | val cal = Calendar.getInstance().apply { time = startDate } |
| | | val year = cal.get(Calendar.YEAR) |
| | | val month = cal.get(Calendar.MONTH) + 1 |
| | |
| | | |
| | | val records = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply { |
| | | createCriteria().andEqualTo("lrSubmitid", userId) |
| | | .andEqualTo("lrYear", year) |
| | | .andEqualTo("lrMonth", month.toByte()) |
| | | .apply { |
| | | ledgerSubTypeId?.let { andEqualTo("lsSubtypeid", it) } |
| | | } |
| | | .andEqualTo("lrYear", year) |
| | | .andEqualTo("lrMonth", month.toByte()) |
| | | .apply { |
| | | ledgerSubTypeId?.let { andEqualTo("lsSubtypeid", it) } |
| | | } |
| | | if (sceneType == SceneType.Restaurant.value) { |
| | | and(createCriteria().andIsNull("lrExtension1") |
| | | .orEqualTo("lrExtension1", sceneType.toString())) |
| | | }else if (sceneType != SceneType.NoType.value) { |
| | | .orEqualTo("lrExtension1", sceneType.toString())) |
| | | } else if (sceneType != SceneType.NoType.value) { |
| | | and(createCriteria().andEqualTo("lrExtension1", sceneType.toString())) |
| | | } |
| | | }) |
| | | |
| | | records.forEach { |
| | | val media = ledgerMediaFileMapper.selectByExample( |
| | | Example(LedgerMediaFile::class.java).apply { |
| | | createCriteria().andEqualTo("lrGuid", it.lrGuid) |
| | | .andEqualTo("mfIsdelete", false) |
| | | .andEqualTo("mfFiletype", it.lrEasubmitkind) |
| | | orderBy("mfSavetime").desc() |
| | | } |
| | | Example(LedgerMediaFile::class.java).apply { |
| | | createCriteria().andEqualTo("lrGuid", it.lrGuid) |
| | | .andEqualTo("mfIsdelete", false) |
| | | .andEqualTo("mfFiletype", it.lrEasubmitkind) |
| | | orderBy("mfSavetime").desc() |
| | | } |
| | | ) |
| | | val type = ledgerSubTypeMapper.selectByExample( |
| | | Example(LedgerSubType::class.java).apply { |
| | | createCriteria().andEqualTo("lsSubtypeid", it.lsSubtypeid) |
| | | } |
| | | Example(LedgerSubType::class.java).apply { |
| | | createCriteria().andEqualTo("lsSubtypeid", it.lsSubtypeid) |
| | | } |
| | | ) |
| | | result.add(LedgerVo().apply { |
| | | id = it.lrGuid |
| | |
| | | remark1 = media?.get(0)?.mfDescription1 |
| | | path2 = media?.get(0)?.mfPath2 |
| | | remark2 = media?.get(0)?.mfDescription2 |
| | | this.sceneType = if(it.lrExtension1 == null) SceneType.Restaurant.value else it.lrExtension1.toInt() |
| | | this.sceneType = if (it.lrExtension1 == null) SceneType.Restaurant.value else it.lrExtension1.toInt() |
| | | }) |
| | | } |
| | | |
| | |
| | | |
| | | } |
| | | |
| | | override fun getLedgerDetail2(userId: String, ledgerSubTypeId: Int?, sceneType: Int, time: String): List<LedgerVo> { |
| | | val records = getLedgerRecords(userId, ledgerSubTypeId, sceneType, time) |
| | | override fun getLedgerDetail2( |
| | | userId: String, |
| | | ledgerSubTypeId: Int?, |
| | | sceneType: Int, |
| | | time: String?, |
| | | ): List<LedgerVo> { |
| | | val records = if (time != null) { |
| | | getLedgerRecords(userId, ledgerSubTypeId, sceneType, time) |
| | | } else { |
| | | // FIXME: 2022/10/13 暂时只支持ledgerSubTypeId不为null的情况 |
| | | if (ledgerSubTypeId == null) return emptyList() |
| | | PageHelper.startPage<LedgerRecord>(1, 1) |
| | | ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply { |
| | | createCriteria().andEqualTo("lrSubmitid", userId) |
| | | .andEqualTo("lsSubtypeid", ledgerSubTypeId) |
| | | orderBy("lrSubmitdate").desc() |
| | | }) |
| | | } |
| | | val result = ArrayList<LedgerVo>() |
| | | records.forEach { |
| | | val media = ledgerMediaFileMapper.selectByExample( |
| | | Example(LedgerMediaFile::class.java).apply { |
| | | createCriteria().andEqualTo("lrGuid", it.lrGuid) |
| | | .andEqualTo("mfIsdelete", false) |
| | | .andEqualTo("mfFiletype", it.lrEasubmitkind) |
| | | orderBy("mfSavetime").desc() |
| | | } |
| | | ) |
| | | Example(LedgerMediaFile::class.java).apply { |
| | | createCriteria().andEqualTo("lrGuid", it.lrGuid) |
| | | .andEqualTo("mfIsdelete", false) |
| | | .andEqualTo("mfFiletype", it.lrEasubmitkind) |
| | | orderBy("mfSavetime").desc() |
| | | } |
| | | )?.takeIf { it.isNotEmpty() }?.get(0) |
| | | val type = ledgerSubTypeMapper.selectByExample( |
| | | Example(LedgerSubType::class.java).apply { |
| | | createCriteria().andEqualTo("lsSubtypeid", it.lsSubtypeid) |
| | | } |
| | | Example(LedgerSubType::class.java).apply { |
| | | createCriteria().andEqualTo("lsSubtypeid", it.lsSubtypeid) |
| | | } |
| | | ) |
| | | result.add(LedgerVo().apply { |
| | | |
| | | id = it.lrGuid |
| | | this.ledgerSubTypeId = it.lsSubtypeid |
| | | ledgerName = it.lsSubtypename |
| | |
| | | updateDate = it.lrSubmitdate |
| | | updateType = it.lrUpdatetype |
| | | fileType = it.lrEasubmitkind.toInt() |
| | | path1 = media?.get(0)?.mfPath1 |
| | | remark1 = media?.get(0)?.mfDescription1 |
| | | path2 = media?.get(0)?.mfPath2 |
| | | remark2 = media?.get(0)?.mfDescription2 |
| | | this.sceneType = if(it.lrExtension1 == null) SceneType.Restaurant.value else it.lrExtension1.toInt() |
| | | path1 = media?.mfPath1 |
| | | remark1 = media?.mfDescription1 |
| | | path2 = media?.mfPath2 |
| | | remark2 = media?.mfDescription2 |
| | | this.sceneType = if (it.lrExtension1 == null) SceneType.Restaurant.value else it.lrExtension1.toInt() |
| | | }) |
| | | } |
| | | return result |
| | | } |
| | | |
| | | override fun uploadLedger(userId: String, ledgerVoList: String, files: Array<MultipartFile>):Boolean { |
| | | override fun uploadLedger(userId: String, ledgerVo: LedgerVo, files: List<Pair<ByteArray, String>>): Boolean { |
| | | val user = userInfoRep.getUser(userId) |
| | | |
| | | ledgerVo.apply { |
| | | if (fileType == null) fileType = 1 |
| | | user?.extension2?.toInt()?.let { s -> sceneType = s } |
| | | } |
| | | |
| | | val historyRecord = ledgerRep.selectRecord(userId, ledgerVo.ledgerSubTypeId, ledgerVo.updateDate) |
| | | |
| | | var ledgerMedia: LedgerMediaFile? = null |
| | | if (historyRecord == null) { |
| | | //生成台账更新记录 |
| | | val ledgerRecord = ledgerVo.toLedgerRecord(user) |
| | | ledgerVo.id = ledgerRecord.lrGuid |
| | | ledgerRep.insertRecord(ledgerRecord) |
| | | //生成一条多媒体文件记录 |
| | | val filePath = ledgerMediaFileRep.saveFile(userId, ledgerVo, files) |
| | | ledgerMediaFileRep.insert(ledgerVo, filePath) |
| | | } else { |
| | | ledgerVo.id = historyRecord.lrGuid |
| | | ledgerMedia = deleteLedgerFile(historyRecord.lrGuid) |
| | | // 去除不涉及标志或复制标志 |
| | | historyRecord.lrSubmitdate = Date() |
| | | historyRecord.lrExtension2 = null |
| | | ledgerRep.updateRecord(historyRecord) |
| | | //更新的多媒体文件记录数据 |
| | | val filePath = ledgerMediaFileRep.saveFile(userId, ledgerVo, files) |
| | | ledgerMedia?.mfPath1 = filePath |
| | | ledgerMedia?.mfDescription1 = ledgerVo.remark1 |
| | | ledgerMedia?.mfSavetime = Date() |
| | | ledgerMediaFileRep.update(ledgerMedia) |
| | | } |
| | | |
| | | return true |
| | | } |
| | | |
| | | override fun uploadLedger(userId: String, ledgerVoList: String, files: Array<MultipartFile>): Boolean { |
| | | |
| | | val mapper = ObjectMapper() |
| | | |
| | | val ledgerVos = mapper.readValue<List<LedgerVo>>(ledgerVoList, object :TypeReference<List<LedgerVo>>(){}) |
| | | val ledgerVos = mapper.readValue<List<LedgerVo>>(ledgerVoList, object : TypeReference<List<LedgerVo>>() {}) |
| | | |
| | | ledgerVos.forEach { |
| | | it.id = it.id ?: UUIDGenerator.generate16ShortUUID() |
| | | it.fileType = it.fileType ?: 1 |
| | | |
| | | val userInfo = userinfoMapper.selectByPrimaryKey(userId) |
| | | userInfo?.extension2?.toInt()?.let { s -> it.sceneType = s } |
| | | |
| | | val today = Calendar.getInstance().apply { time = Date() } |
| | | .get(Calendar.DAY_OF_MONTH) |
| | | val cal = Calendar.getInstance().apply { time = it.updateDate } |
| | | .get(Calendar.DAY_OF_MONTH) |
| | | val cal = Calendar.getInstance().apply { time = it.updateDate ?: Date() } |
| | | val updateYear = cal.get(Calendar.YEAR) |
| | | val updateMonth = cal.get(Calendar.MONTH) + 1 |
| | | val updateDay = cal.get(Calendar.DAY_OF_MONTH) |
| | | //生成台账更新记录 |
| | | val ledgerRecord = LedgerRecord().apply { |
| | | lrGuid = it.id |
| | | lsSubtypeid = it.ledgerSubTypeId |
| | | lsSubtypename = it.ledgerName |
| | | lrYear = updateYear |
| | | lrMonth = updateMonth.toByte() |
| | | lrDay = updateDay.toByte() |
| | | lrEasubmitkind = it.fileType?.toByte() ?: 1 |
| | | lrSubmitid = userId |
| | | lrSubmitname = userInfo?.acountname ?: "" |
| | | lrIssubmitontime = today <= 10 |
| | | lrSubmitdate = Date() |
| | | lrUpdatetype = it.updateType |
| | | lrExtension1 = it.sceneType.toString() |
| | | } |
| | | |
| | | //检查数据库是否已有记录,选择插入或更新 |
| | | val tmp = ledgerRecordMapper.selectByPrimaryKey(ledgerRecord.lrGuid) |
| | | if (tmp == null || tmp.lrGuid == null) { |
| | | val tmp = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply { |
| | | createCriteria().andEqualTo("lsSubtypeid", it.ledgerSubTypeId) |
| | | .andEqualTo("lrYear", updateYear) |
| | | .andEqualTo("lrMonth", updateMonth) |
| | | .andEqualTo("lrSubmitid", userId) |
| | | }) |
| | | var ledgerMedia: LedgerMediaFile? = null |
| | | if (tmp.isEmpty()) { |
| | | //生成台账更新记录 |
| | | val ledgerRecord = LedgerRecord().apply { |
| | | lrGuid = UUIDGenerator.generate16ShortUUID() |
| | | lsSubtypeid = it.ledgerSubTypeId |
| | | lsSubtypename = it.ledgerName |
| | | lrYear = updateYear |
| | | lrMonth = updateMonth.toByte() |
| | | lrDay = updateDay.toByte() |
| | | lrEasubmitkind = it.fileType?.toByte() ?: 1 |
| | | lrSubmitid = userId |
| | | lrSubmitname = userInfo?.acountname ?: "" |
| | | lrIssubmitontime = today <= 10 |
| | | lrSubmitdate = Date() |
| | | lrUpdatetype = it.updateType |
| | | lrExtension1 = it.sceneType.toString() |
| | | } |
| | | it.id = ledgerRecord.lrGuid |
| | | ledgerRecordMapper.insert(ledgerRecord) |
| | | } else { |
| | | ledgerRecordMapper.updateByPrimaryKey(ledgerRecord) |
| | | val record = tmp[0] |
| | | it.id = record.lrGuid |
| | | ledgerMedia = deleteLedgerFile(record.lrGuid) |
| | | // 去除不涉及标志或复制标志 |
| | | record.lrExtension2 = null |
| | | ledgerRecordMapper.updateByPrimaryKey(record) |
| | | } |
| | | |
| | | //对每张图片生成相应的路径并保存 |
| | | var picPath = "" |
| | | val time = DateUtil().DateToString(Date(), DateUtil.DateStyle.YYYY_MM) |
| | | files.forEach {file-> |
| | | val time = DateUtil.DateToString(Date(), DateUtil.DateStyle.YYYY_MM) |
| | | files.forEach { file -> |
| | | val fileName = file.originalFilename |
| | | //TODO 此处的文件路径需要修改为动态配置 |
| | | val basePath = "D:/02product/05ledger/images/" |
| | | // val basePath = "D:/02product/05ledger/images/" |
| | | val basePath = imgPath |
| | | val path = "$time/$userId/${it.ledgerName}/" |
| | | picPath += if (picPath.isEmpty()) { |
| | | "$path$fileName" |
| | |
| | | } |
| | | try { |
| | | //调用文件保存方法 |
| | | FileUtil().uploadFile(file.bytes, basePath + path, fileName!!) |
| | | } catch (e: Exception) { |
| | | FileUtil.uploadFile(file.bytes, basePath + path, fileName!!) |
| | | } catch (e: FileNotFoundException) { |
| | | e.printStackTrace() |
| | | } |
| | | } |
| | | |
| | | //生成一条多媒体文件记录 |
| | | val ledgerMedia = LedgerMediaFile().apply { |
| | | mfGuid = UUIDGenerator.generate16ShortUUID() |
| | | lrGuid = it.id |
| | | mfFiletype = it.fileType |
| | | mfPath1 = picPath |
| | | mfDescription1 = it.remark1 |
| | | mfSavetime = Date() |
| | | mfIsdelete = false |
| | | if (ledgerMedia == null) { |
| | | ledgerMedia = LedgerMediaFile().apply { |
| | | mfGuid = UUIDGenerator.generate16ShortUUID() |
| | | lrGuid = it.id |
| | | mfFiletype = it.fileType |
| | | mfPath1 = picPath |
| | | mfDescription1 = it.remark1 |
| | | mfSavetime = Date() |
| | | mfIsdelete = false |
| | | } |
| | | //插入新的多媒体文件记录数据 |
| | | ledgerMediaFileMapper.insert(ledgerMedia) |
| | | } else { |
| | | ledgerMedia.mfPath1 = picPath |
| | | ledgerMedia.mfDescription1 = it.remark1 |
| | | ledgerMedia.mfSavetime = Date() |
| | | //更新的多媒体文件记录数据 |
| | | ledgerMediaFileMapper.updateByPrimaryKey(ledgerMedia) |
| | | } |
| | | |
| | | //查询是否已有记录,对已有记录将其标记为"删除" |
| | | val example = Example(LedgerMediaFile::class.java) |
| | | val criteria = example.createCriteria() |
| | | criteria.andEqualTo("lrGuid", it.id) |
| | | .andEqualTo("mfIsdelete", false) |
| | | val result = ledgerMediaFileMapper.selectByExample(example) |
| | | result.forEach {mediaFile -> |
| | | mediaFile.mfIsdelete = true |
| | | ledgerMediaFileMapper.updateByPrimaryKey(mediaFile) |
| | | } |
| | | |
| | | //插入新的多媒体文件记录数据 |
| | | ledgerMediaFileMapper.insert(ledgerMedia) |
| | | |
| | | return true |
| | | } |
| | | |
| | | return false |
| | | } |
| | | |
| | | override fun uploadNoLedger( |
| | | userId: String, |
| | | time: String, |
| | | remark: String?, |
| | | ledgerIdList: List<Int>, |
| | | ): BaseResponse<String> { |
| | | val date = LocalDate.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd")) |
| | | val year = date.year |
| | | val month = date.monthValue |
| | | val day = date.dayOfMonth |
| | | val userInfo = userinfoMapper.selectByPrimaryKey(userId) ?: return BaseResponse(false, "用户不存在") |
| | | ledgerIdList.forEach { |
| | | //去重判断,当该类型台账已存在时,采用覆盖更新操作 |
| | | val r = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply { |
| | | createCriteria().andEqualTo("lrSubmitid", userId) |
| | | .andEqualTo("lsSubtypeid", it) |
| | | .andEqualTo("lrYear", year) |
| | | .andEqualTo("lrMonth", month) |
| | | }) |
| | | var record = if (r.size > 0) r[0] else null |
| | | |
| | | //生成台账更新记录 |
| | | if (record != null) { |
| | | record.lrExtension2 = "notInvolved" |
| | | ledgerRecordMapper.updateByPrimaryKey(record) |
| | | deleteLedgerFile(record.lrGuid)?.let { m -> |
| | | m.mfPath1 = notInvolvedPath |
| | | ledgerMediaFileMapper.updateByPrimaryKey(m) |
| | | } |
| | | } else { |
| | | //获取台账类型信息 |
| | | val ledgerType = ledgerSubTypeMapper.selectByPrimaryKey(it) ?: return@forEach |
| | | record = LedgerRecord().apply { |
| | | lrGuid = record?.lrGuid ?: UUIDGenerator.generate16ShortUUID() |
| | | lsSubtypeid = ledgerType.lsSubtypeid |
| | | lsSubtypename = ledgerType.lsName |
| | | lrYear = year |
| | | lrMonth = month.toByte() |
| | | lrDay = day.toByte() |
| | | lrEasubmitkind = 1 |
| | | lrSubmitid = userId |
| | | lrSubmitname = userInfo.acountname ?: "" |
| | | lrIssubmitontime = day <= 10 |
| | | lrSubmitdate = Date() |
| | | lrUpdatetype |
| | | lrExtension1 = userInfo.extension2 |
| | | lrExtension2 = "notInvolved" |
| | | } |
| | | ledgerRecordMapper.insert(record) |
| | | //生成一条多媒体文件记录 |
| | | val ledgerMedia = LedgerMediaFile().apply { |
| | | mfGuid = UUIDGenerator.generate16ShortUUID() |
| | | lrGuid = record.lrGuid |
| | | mfFiletype = 1 |
| | | mfPath1 = notInvolvedPath |
| | | mfDescription1 = remark |
| | | mfSavetime = Date() |
| | | mfIsdelete = false |
| | | } |
| | | ledgerMediaFileMapper.insert(ledgerMedia) |
| | | } |
| | | } |
| | | |
| | | return BaseResponse(true) |
| | | } |
| | | |
| | | override fun getLedgerImg(userId: String, ledgerType: Int): List<String> { |
| | |
| | | PageHelper.startPage<LedgerRecord>(1, 1) |
| | | val record = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply { |
| | | createCriteria().andEqualTo("lsSubtypeid", ledgerType) |
| | | .andEqualTo("lrSubmitid", userId) |
| | | .andEqualTo("lrSubmitid", userId) |
| | | orderBy("lrYear").desc().orderBy("lrMonth").desc().orderBy("lrDay").desc() |
| | | }).takeIf { it.isNotEmpty() }?.get(0) |
| | | |
| | |
| | | ledgerMediaFileMapper.selectByExample(Example(LedgerMediaFile::class.java).apply { |
| | | createCriteria().andEqualTo("lrGuid", it.lrGuid) |
| | | }).forEach { |
| | | it.mfPath1?.split(";")?.let {list -> |
| | | it.mfPath1?.split(";")?.let { list -> |
| | | result.addAll(list) |
| | | } |
| | | } |
| | |
| | | PageHelper.startPage<LedgerRecord>(1, 1) |
| | | val record = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply { |
| | | createCriteria().andIn("lsSubtypeid", ledgerType) |
| | | .andEqualTo("lrSubmitid", userId) |
| | | .andEqualTo("lrSubmitid", userId) |
| | | orderBy("lrYear").desc().orderBy("lrMonth").desc().orderBy("lrDay").desc() |
| | | }) |
| | | |
| | | return emptyList() |
| | | } |
| | | |
| | | private fun getLedgerRecords(userId: String, ledgerSubTypeId: Int?, sceneType: Int, time: String): List<LedgerRecord> { |
| | | override fun getLedgerRecords( |
| | | userId: String, |
| | | ledgerSubTypeId: Int?, |
| | | sceneType: Int, |
| | | time: String, |
| | | ): List<LedgerRecord> { |
| | | val ledgerSubTypes = ledgerSubTypeMapper.selectByExample(Example(LedgerSubType::class.java).apply { |
| | | if (ledgerSubTypeId != null) { |
| | | createCriteria().andEqualTo("lsSubtypeid", ledgerSubTypeId) |
| | |
| | | createCriteria().andEqualTo("lScenetype", sceneType) |
| | | } |
| | | }) |
| | | val c = Calendar.getInstance().apply { this.time = DateUtil().StringToDate(time) } |
| | | val c = Calendar.getInstance().apply { this.time = DateUtil.StringToDate(time) } |
| | | val year = c.get(Calendar.YEAR) |
| | | val month = c.get(Calendar.MONTH) + 1 |
| | | val map = mutableMapOf<Int, MutableList<Int>>() |
| | |
| | | map.forEach { (p, v) -> |
| | | // FIXME: 2020/11/10 此处根据周期和当前月份计算得到当前月份所在周期的始末月,只适用于周期小于等于12个月的情况。后续待修改 |
| | | val startMon = ceil(month.toDouble() / p).toInt().minus(1).times(p).plus(1) |
| | | val endMon = startMon + p - 1 |
| | | var endMon = startMon + p - 1 |
| | | if (endMon > month) endMon = month |
| | | val r = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply { |
| | | createCriteria().andEqualTo("lrSubmitid", userId) |
| | | .andEqualTo("lrYear", year) |
| | | .andGreaterThanOrEqualTo("lrMonth", startMon.toByte()) |
| | | .andLessThanOrEqualTo("lrMonth", endMon.toByte()) |
| | | and( |
| | | createCriteria().apply { |
| | | v.forEach { |
| | | orEqualTo("lsSubtypeid", it) |
| | | } |
| | | } |
| | | ) |
| | | .andEqualTo("lrYear", year) |
| | | .andGreaterThanOrEqualTo("lrMonth", startMon.toByte()) |
| | | .andLessThanOrEqualTo("lrMonth", endMon.toByte()) |
| | | .andIn("lsSubtypeid", v) |
| | | }) |
| | | records.addAll(r) |
| | | val monMap = mutableMapOf<Int, LedgerRecord>() |
| | | r.forEach { |
| | | if (monMap.containsKey(it.lsSubtypeid)) { |
| | | val record = monMap[it.lsSubtypeid]!! |
| | | if (record.lrMonth < it.lrMonth) { |
| | | monMap[it.lsSubtypeid] = it |
| | | } |
| | | } else { |
| | | monMap[it.lsSubtypeid] = it |
| | | } |
| | | } |
| | | monMap.forEach { (_, u) -> |
| | | records.add(u) |
| | | } |
| | | } |
| | | |
| | | return records |
| | | } |
| | | |
| | | override fun copyLedger(userId: String, time: String, copyLedgerList: List<CopyLedgerVo>): BaseResponse<String> { |
| | | val year = time.split("-")[0] |
| | | val month = time.split("-")[1] |
| | | val date = DateUtil.StringToDate(time, DateUtil.DateStyle.YYYY_MM) |
| | | copyLedgerList.forEach { |
| | | //去重判断 |
| | | val r = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply { |
| | | createCriteria().andEqualTo("lrSubmitid", userId) |
| | | .andEqualTo("lsSubtypeid", it.subTypeId) |
| | | .andEqualTo("lrYear", year) |
| | | .andEqualTo("lrMonth", month) |
| | | }) |
| | | if (r.size > 0) { |
| | | return@forEach |
| | | } |
| | | |
| | | val y = it.time?.split("-")?.get(0) ?: return@forEach |
| | | val m = it.time?.split("-")?.get(1) ?: return@forEach |
| | | ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply { |
| | | createCriteria().andEqualTo("lrSubmitid", userId) |
| | | .andEqualTo("lsSubtypeid", it.subTypeId) |
| | | .andEqualTo("lrYear", y) |
| | | .andEqualTo("lrMonth", m) |
| | | }).forEach record@{ lr -> |
| | | //获取记录对应的文件信息 |
| | | val fileList = ledgerMediaFileMapper.selectByExample(Example(LedgerMediaFile::class.java).apply { |
| | | createCriteria().andEqualTo("lrGuid", lr.lrGuid) |
| | | }) |
| | | if (fileList.size == 0) return@record |
| | | val file = fileList[0] ?: return@record |
| | | |
| | | //修改记录信息,复制为新的台账 |
| | | lr.lrGuid = UUIDGenerator.generate16ShortUUID() |
| | | lr.lrYear = year.toInt() |
| | | lr.lrMonth = month.toByte() |
| | | lr.lrIssubmitontime = true |
| | | lr.lrSubmitdate = date |
| | | lr.lrExtension2 = "copy"//表明是复制的台账 |
| | | ledgerRecordMapper.insert(lr) |
| | | |
| | | //修改对应的文件信息 |
| | | file.apply { |
| | | mfGuid = UUIDGenerator.generate16ShortUUID() |
| | | lrGuid = lr.lrGuid |
| | | mfSavetime = Date() |
| | | } |
| | | ledgerMediaFileMapper.insert(file) |
| | | } |
| | | } |
| | | |
| | | return BaseResponse(true) |
| | | } |
| | | |
| | | override fun checkLedger( |
| | | verifierId: String, |
| | | remark: String?, |
| | | recordList: List<LedgerCheckVo>, |
| | | ): BaseResponse<Boolean> { |
| | | val recordIdList = mutableListOf<String?>() |
| | | recordList.forEach { recordIdList.add(it.recordId) } |
| | | val records = ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply { |
| | | createCriteria().andIn("lrGuid", recordIdList) |
| | | .andIsNotNull("lrGuid") |
| | | }) |
| | | return if (records.isEmpty()) { |
| | | BaseResponse(false, "所选记录不存在") |
| | | } else { |
| | | records.forEach { |
| | | for (r in recordList) { |
| | | if (r.recordId == it.lrGuid) { |
| | | it.lrVerifierid = verifierId |
| | | it.lrVerifierrealname |
| | | it.lrVerifydate = Date() |
| | | it.lrIsverify = r.result |
| | | it.lrVerifyrst = r.remark |
| | | it.lrAiverifytime = if (it.lrAiverifytime == null) 0 else it.lrAiverifytime++ |
| | | it.lrIsai = false |
| | | |
| | | ledgerRecordMapper.updateByPrimaryKey(it) |
| | | continue |
| | | } |
| | | } |
| | | } |
| | | BaseResponse(true) |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 删除台账的文件记录 |
| | | * @param lrGuid 台账记录id |
| | | */ |
| | | private fun deleteLedgerFile(lrGuid: String): LedgerMediaFile? { |
| | | return ledgerMediaFileRep.select(lrGuid)?.apply { |
| | | if (this.mfPath1 != notInvolvedPath) { |
| | | this.mfPath1.split(";").forEach { p -> |
| | | val path = imgPath + p |
| | | FileUtil.deleteFile(path) |
| | | } |
| | | // this.mfPath1 = notInvolvedPath |
| | | // ledgerMediaFileMapper.updateByPrimaryKey(this) |
| | | } |
| | | } |
| | | } |
| | | } |