From 196bb14112448857a885e32dc4149e308e00b01a Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 15 八月 2024 11:57:15 +0800
Subject: [PATCH] 2024.8.15 各项修正

---
 src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/LedgerServiceImpl.kt |  417 ++++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 300 insertions(+), 117 deletions(-)

diff --git a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/LedgerServiceImpl.kt b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/LedgerServiceImpl.kt
index c9521ac..96ca914 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/LedgerServiceImpl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/lightshare/service/Impl/LedgerServiceImpl.kt
@@ -3,12 +3,14 @@
 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
@@ -17,9 +19,16 @@
 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
@@ -27,11 +36,19 @@
 
 @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 {
@@ -42,13 +59,13 @@
         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)
         }
@@ -56,6 +73,10 @@
     }
 
     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)
@@ -73,17 +94,28 @@
                 needUpdate = it.getlNeedupdate(),
                 sceneType = it.getlScenetype(),
                 iconUrl = it.getlIconurl(),
-                realTime = it.getlRealTime()
+                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.onTime = r.lrIssubmitontime
                     l.verified
                     l.verifierName = r.lrVerifierrealname
                     l.verified = r.lrIsverify
-                    l.verifyRst = l.verifyRst
+                    l.verifyRst = r.lrVerifyrst
+                    l.involved = r.lrExtension2 != "notInvolved"
                     break
                 }
             }
@@ -93,9 +125,10 @@
         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>()
 
@@ -118,32 +151,32 @@
 
         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
@@ -160,7 +193,7 @@
                 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()
             })
         }
 
@@ -171,7 +204,12 @@
 
     }
 
-    override fun getLedgerDetail2(userId: String, ledgerSubTypeId: Int?, sceneType: Int, time: String?): List<LedgerVo> {
+    override fun getLedgerDetail2(
+        userId: String,
+        ledgerSubTypeId: Int?,
+        sceneType: Int,
+        time: String?,
+    ): List<LedgerVo> {
         val records = if (time != null) {
             getLedgerRecords(userId, ledgerSubTypeId, sceneType, time)
         } else {
@@ -187,17 +225,17 @@
         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()
+                }
             )
             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
@@ -214,39 +252,113 @@
                 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()
             })
         }
         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 }
+            userInfo?.extension2?.toInt()?.let { s -> it.sceneType = s }
 
             val today = Calendar.getInstance().apply { time = Date() }
-                    .get(Calendar.DAY_OF_MONTH)
+                .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 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 {
+                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->
+            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"
@@ -256,59 +368,30 @@
                 try {
                     //璋冪敤鏂囦欢淇濆瓨鏂规硶
                     FileUtil.uploadFile(file.bytes, basePath + path, fileName!!)
-                } catch (e: Exception) {
+                } 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
-            }
-
-            //鏌ヨ鏄惁宸叉湁璁板綍锛屽宸叉湁璁板綍灏嗗叾鏍囪涓�"鍒犻櫎"
-            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)
-
-            //鐢熸垚鍙拌处鏇存柊璁板綍
-            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) {
-                ledgerRecordMapper.insert(ledgerRecord)
+            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 {
-                ledgerRecordMapper.updateByPrimaryKey(ledgerRecord)
+                ledgerMedia.mfPath1 = picPath
+                ledgerMedia.mfDescription1 = it.remark1
+                ledgerMedia.mfSavetime = Date()
+                //鏇存柊鐨勫濯掍綋鏂囦欢璁板綍鏁版嵁
+                ledgerMediaFileMapper.updateByPrimaryKey(ledgerMedia)
             }
 
             return true
@@ -317,13 +400,79 @@
         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> {
         val result = mutableListOf<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)
 
@@ -331,7 +480,7 @@
             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)
                 }
             }
@@ -346,14 +495,19 @@
         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()
     }
 
-    override 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)
@@ -376,21 +530,29 @@
         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
@@ -419,7 +581,7 @@
                     .andEqualTo("lsSubtypeid", it.subTypeId)
                     .andEqualTo("lrYear", y)
                     .andEqualTo("lrMonth", m)
-            }).forEach record@ {lr ->
+            }).forEach record@{ lr ->
                 //鑾峰彇璁板綍瀵瑰簲鐨勬枃浠朵俊鎭�
                 val fileList = ledgerMediaFileMapper.selectByExample(Example(LedgerMediaFile::class.java).apply {
                     createCriteria().andEqualTo("lrGuid", lr.lrGuid)
@@ -449,7 +611,11 @@
         return BaseResponse(true)
     }
 
-    override fun checkLedger(verifierId: String, remark: String?, recordList: List<LedgerCheckVo>): BaseResponse<Boolean> {
+    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 {
@@ -478,4 +644,21 @@
             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)
+            }
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3