From aed297a5fbc8df9dab01b28da21f872ee546b43c Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期一, 13 十月 2025 16:15:11 +0800
Subject: [PATCH] 2025.10.13 1. 统一调整controller层的返回类型,通过添加全局响应增强器GlobalResponseAdvice来管理返回结果; 2. 新增mybatis-generator自定义插件,实现给数据库实体entity自动添加swagger注解@ApiModel和@ApiModelProperty
---
src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt | 181 +++++++++++++++++++++++++++++++++++----------
1 files changed, 140 insertions(+), 41 deletions(-)
diff --git a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt
index 20fcc11..c7db9cf 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/business/autooutput/datasource/AopDataSource.kt
@@ -1,11 +1,15 @@
package cn.flightfeather.supervision.business.autooutput.datasource
+import cn.flightfeather.supervision.common.exception.BizException
import cn.flightfeather.supervision.common.utils.Constant
import cn.flightfeather.supervision.domain.ds1.entity.*
import cn.flightfeather.supervision.domain.ds2.entity.LedgerRecord
import cn.flightfeather.supervision.domain.ds2.entity.LedgerSubType
import cn.flightfeather.supervision.domain.ds2.entity.UserMap
import cn.flightfeather.supervision.domain.ds2.entity.UserinfoTZ
+import cn.flightfeather.supervision.lightshare.vo.AreaVo
+import cn.flightfeather.supervision.lightshare.vo.EvaluationSubRuleVo
+import org.springframework.beans.BeanUtils
import tk.mybatis.mapper.entity.Example
import java.time.LocalDateTime
import java.time.ZoneId
@@ -25,8 +29,10 @@
* 璁剧疆鏁版嵁婧�
*/
fun setResource(topTaskGuid: String?, sceneType: Int, districtName: String?, townCode: String?) {
- val config = AopDataConfig(topTaskGuid = topTaskGuid, sceneType = sceneType, districtName = districtName,
- townCode = townCode)
+ val config = AopDataConfig(
+ topTaskGuid = topTaskGuid, sceneType = sceneType, districtName = districtName,
+ townCode = townCode
+ )
evaluationScene.config = config
val check = aopSceneTypeCheck.checkSceneType(sceneType)
if (check.first) {
@@ -35,6 +41,12 @@
initUserSource(config)
}
}
+
+// fun setResource(areaVo: AreaVo) {
+// val task = taskRep.findOneTask(areaVo)
+// val taskId = task?.tguid
+// val sceneType = areaVo.scensetypeid?.toInt() ?: throw BizException("鍦烘櫙绫诲瀷鏈缃紝鏃犳硶璇勪及")
+// }
fun setResource(config: AopDataConfig) {
config.sceneType ?: return
@@ -50,8 +62,10 @@
fun setResource(subtask: Subtask) {
val scene = aopDbMapper.scenseMapper.selectByPrimaryKey(subtask.scenseid)
val sceneType = scene.typeid?.toInt()
- val config = AopDataConfig(topTaskGuid = subtask.tguid, sceneType = sceneType,
- districtName = subtask.districtname, townCode = subtask.towncode)
+ val config = AopDataConfig(
+ topTaskGuid = subtask.tguid, sceneType = sceneType,
+ districtName = subtask.districtname, townCode = subtask.towncode
+ )
evaluationScene.config = config
// val check = aopSceneTypeCheck.checkSceneType(sceneType)
this.mode = 0
@@ -62,7 +76,35 @@
/**
* 杞鏁版嵁婧�
*/
- fun loop(callback: (index:Int, evaluationScene: EvaluationScene) -> Unit) {
+ fun loop(callback: (index: Int, evaluationScene: EvaluationScene) -> Unit) {
+ when (mode) {
+ 0 -> {
+ sceneSourceList.forEachIndexed { i, scene ->
+ evaluationScene.clear()
+ evaluationScene.index = i
+ evaluationScene.setDefaultScene(scene)
+ do {
+ callback(i, evaluationScene)
+ } while (evaluationScene.gotoNextSubTask())
+ }
+ }
+
+ 1 -> {
+ userSourceList.forEachIndexed { i, user ->
+ evaluationScene.clear()
+ evaluationScene.index = i
+ evaluationScene.setDefaultUserTZ(user)
+ callback(i, evaluationScene)
+ }
+ }
+ }
+ }
+
+ /**
+ * 鏍规嵁瀛愪换鍔″彧杞涓�娆�
+ * 褰撴暟鎹簮鏄�氳繃[setResource]浼犲叆[Subtask]鏃跺喅瀹氭椂
+ */
+ fun runBySubTask(callback: (index: Int, evaluationScene: EvaluationScene) -> Unit) {
when (mode) {
0 -> {
sceneSourceList.forEachIndexed { i, scene ->
@@ -72,6 +114,7 @@
callback(i, evaluationScene)
}
}
+
1 -> {
userSourceList.forEachIndexed { i, user ->
evaluationScene.clear()
@@ -85,12 +128,15 @@
// 浠庣洃绠$郴缁熻幏鍙栧満鏅�
private fun initSceneSource(config: AopDataConfig) {
- config.topTaskGuid ?: throw IllegalStateException("椤跺眰浠诲姟id涓嶈兘涓簄ull")
+ config.topTaskGuid ?: throw BizException("椤跺眰浠诲姟id涓嶈兘涓簄ull")
this.config = config
this.mode = 0
sceneSourceList.clear()
val taskSceneIdList =
aopDbMapper.scenseMapper.getSceneByType(config.topTaskGuid, config.sceneType, config.townCode)
+ taskSceneIdList.forEach {
+ println(it.name)
+ }
sceneSourceList.addAll(taskSceneIdList)
}
@@ -109,7 +155,7 @@
}
// 鍗曚釜璇勪及瀵硅薄
- inner class EvaluationScene(){
+ inner class EvaluationScene() {
var index = 0
var config: AopDataConfig? = null
@@ -120,7 +166,7 @@
fun setDefaultScene(s: Scense?) {
scene.value = s
- userInfoTZ.fetch = {_,_ ->
+ userInfoTZ.fetch = { _, _ ->
val svUserId = aopDbMapper.userinfoMapper.selectByExample(Example(Userinfo::class.java).apply {
createCriteria().andEqualTo("dGuid", scene.value?.guid)
})?.takeIf { m -> m.isNotEmpty() }?.get(0)?.guid
@@ -133,7 +179,7 @@
fun setDefaultUserTZ(u: UserinfoTZ?) {
userInfoTZ.value = u
- scene.fetch = {_,_ ->
+ scene.fetch = { _, _ ->
val svUserId = aopDbMapper.userMapMapper.selectByExample(Example(UserMap::class.java).apply {
createCriteria().andEqualTo("tzUserId", userInfoTZ.value?.guid)
})?.takeIf { m -> m.isNotEmpty() }?.get(0)?.svUserId
@@ -142,41 +188,54 @@
}
}
- val userInfo = InfoProxy<Userinfo>{_,_ ->
+ val userInfo = InfoProxy<Userinfo> { _, _ ->
scene.value?.guid ?: return@InfoProxy null
return@InfoProxy aopDbMapper.userinfoMapper.selectOne(Userinfo().apply {
dGuid = scene.value?.guid
})
}
+
//宸℃煡浠诲姟淇℃伅
- val subTask = InfoProxy<Subtask> {_,_ ->
+ var subTaskIndex = 0
+ val subTask = InfoProxy<Subtask> { _, _ ->
+ return@InfoProxy if (subTaskList.value?.isNotEmpty() == true) {
+ subTaskList.value?.get(subTaskIndex)
+ } else {
+ null
+ }
+ }
+
+ val subTaskList = InfoProxy<List<Subtask>> { _, _ ->
return@InfoProxy aopDbMapper.subtaskMapper.selectByExample(Example(Subtask::class.java).apply {
createCriteria().andEqualTo("scenseid", scene.value?.guid)
// .andBetween("planstarttime", config?.startTime, config?.endTime)
.andEqualTo("tguid", config?.topTaskGuid)
- })?.takeIf { it.isNotEmpty() }?.get(0)
+ })
}
//鐜板満宸℃煡淇℃伅
- val inspection = InfoProxy<Inspection>{_,_ ->
+ val inspection = InfoProxy<Inspection> { _, _ ->
val inspection = Inspection()
inspection.stguid = subTask.value?.stguid
return@InfoProxy aopDbMapper.inspectionMapper.selectOne(inspection)
}
//鍚勫満鏅壒鏈夌殑鍩烘湰淇℃伅
- val baseScene = InfoProxy<BaseScene> {_,_ ->
+ val baseScene = InfoProxy<BaseScene> { _, _ ->
return@InfoProxy when (config?.sceneType.toString()) {
// 鐩戠绯荤粺
Constant.SceneType.TYPE1.value -> {
aopDbMapper.sceneConstructionSiteMapper.selectByPrimaryKey(scene.value?.guid)
}
+
Constant.SceneType.TYPE2.value -> {
aopDbMapper.sceneWharfMapper.selectByPrimaryKey(scene.value?.guid)
}
+
Constant.SceneType.TYPE3.value -> {
aopDbMapper.sceneMixingPlantMapper.selectByPrimaryKey(scene.value?.guid)
}
+
Constant.SceneType.TYPE14.value -> {
aopDbMapper.sceneStorageYardMapper.selectByPrimaryKey(scene.value?.guid)
}
@@ -184,15 +243,17 @@
Constant.SceneType.TYPE5.value -> {
aopDbMapper.restaurantBaseInfoMapper.selectByPrimaryKey(userInfoTZ.value?.guid)
}
+
Constant.SceneType.TYPE6.value -> {
aopDbMapper.vehicleBaseInfoMapper.selectByPrimaryKey(userInfoTZ.value?.guid)
}
+
else -> null
}
}
//鍏蜂綋鐨勯棶棰�
- val problems = InfoProxy<MutableList<Problemlist>> {_,_ ->
+ val problems = InfoProxy<MutableList<Problemlist>> { _, _ ->
if (noRecord()) return@InfoProxy mutableListOf()
return@InfoProxy aopDbMapper.problemlistMapper.selectByExample(Example(Problemlist::class.java).apply {
createCriteria().andEqualTo("stguid", subTask.value?.stguid)
@@ -200,7 +261,7 @@
}
//璇勪及鎬诲垎
- val evaluation = InfoProxy<Evaluation> {_,_ ->
+ val evaluation = InfoProxy<Evaluation> { _, _ ->
if (noRecord()) return@InfoProxy null
return@InfoProxy aopDbMapper.evaluationMapper.selectByExample(Example(Evaluation::class.java).apply {
@@ -209,7 +270,7 @@
}
//璇勪及缁嗗垯寰楀垎
- val itemevaluationList = InfoProxy<MutableList<Itemevaluation>> {_,_ ->
+ val itemevaluationList = InfoProxy<MutableList<Itemevaluation>> { _, _ ->
return@InfoProxy aopDbMapper.itemevaluationMapper.selectByExample(Example(Itemevaluation::class.java).apply {
createCriteria().andEqualTo("stguid", subTask.value?.stguid)
})
@@ -233,13 +294,21 @@
val totalScore = InfoProxy<Int>()
//鑷姩璇勫垎瑙勫垯涓�绾у垎绫�
- val topItems = InfoProxy<MutableList<Evaluationsubrule2>>(config?.sceneType.toString()) { _, cacheMap ->
- val _topItems = mutableListOf<Evaluationsubrule2>()
- val _rules = mutableListOf<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>()
+ val topRules = InfoProxy<MutableList<EvaluationSubRuleVo>>(config?.sceneType.toString()) { _, cacheMap ->
+ val _topItems = mutableListOf<EvaluationSubRuleVo>()
+ val _rules = mutableListOf<Pair<EvaluationSubRuleVo, MutableList<EvaluationSubRuleVo>>>()
val rule = aopDbMapper.evaluationruleMapper.selectByExample(Example(Evaluationrule::class.java).apply {
createCriteria()
.andEqualTo("tasktypeid", 99)
.andEqualTo("scensetypeid", scene.value?.typeid)
+ and(createCriteria().orEqualTo("provincecode", scene.value?.provincecode).orIsNull("provincecode"))
+ and(createCriteria().orEqualTo("citycode", scene.value?.citycode).orIsNull("citycode"))
+ and(createCriteria().orEqualTo("districtcode", scene.value?.districtcode).orIsNull("districtcode"))
+ and(createCriteria().orEqualTo("towncode", scene.value?.towncode).orIsNull("towncode"))
+ orderBy("towncode").desc()
+ .orderBy("districtcode").desc()
+ .orderBy("citycode").desc()
+ .orderBy("provincecode").desc()
})
if (rule.isNotEmpty()) {
this@EvaluationScene.baseRule.value = rule[0]
@@ -249,7 +318,11 @@
val rules =
aopDbMapper.evaluationsubruleMapper.selectByExample(Example(Evaluationsubrule2::class.java).apply {
createCriteria().andEqualTo("erguid", ruleId)
- })
+ }).map {
+ val vo = EvaluationSubRuleVo()
+ BeanUtils.copyProperties(it, vo)
+ vo
+ }
rules.forEach {
if (it.ertype == 2) {
_topItems.add(it)
@@ -260,7 +333,7 @@
var t = 0
_topItems.forEach {
t += it.maxscore ?: 0
- val tempRules = mutableListOf<Evaluationsubrule2>()
+ val tempRules = mutableListOf<EvaluationSubRuleVo>()
for (i in rules) {
if (i.fatherid == it.guid && i.ertype == 3) {
tempRules.add(i)
@@ -272,7 +345,7 @@
}
tempRules.sortBy { t -> t.displayid }
tempRules.forEach { temp ->
- val tempSubRules = mutableListOf<Evaluationsubrule2>()
+ val tempSubRules = mutableListOf<EvaluationSubRuleVo>()
for (i in rules) {
if (i.fatherid == temp.guid && i.ertype == 4) {
tempSubRules.add(i)
@@ -293,10 +366,10 @@
// FIXME: 2023/8/9 瀛愯鍒欑殑鑾峰彇蹇呴』鍦╗topItems]璋冪敤涔嬪悗锛屽惁鍒欎负绌�
//鑷姩璇勫垎瑙勫垯浜岀骇鍜屼笁绾у垎绫�
- val rules = InfoProxy<MutableList<Pair<Evaluationsubrule2, MutableList<Evaluationsubrule2>>>>()
+ val rules = InfoProxy<MutableList<Pair<EvaluationSubRuleVo, MutableList<EvaluationSubRuleVo>>>>()
//蹇呭~鍙拌处鏁伴噺
- val ledgerCount = InfoProxy<Int>(config?.sceneType.toString()) {_, cacheMap ->
+ val ledgerCount = InfoProxy<Int>(config?.sceneType.toString()) { _, cacheMap ->
val tzSceneType = Constant.SceneType.typeMap(scene.value?.typeid)
val list = aopDbMapper.ledgerSubTypeMapper.selectCountByExample(Example(LedgerSubType::class.java).apply {
createCriteria().andEqualTo("lScenetype", tzSceneType).andEqualTo("lNeedupdate", true)
@@ -306,7 +379,7 @@
}
//鐢ㄦ埛瀹為檯鎻愪氦鍙拌处鏁伴噺
- val ledgerRecords = InfoProxy<List<LedgerRecord>> {_,_ ->
+ val ledgerRecords = InfoProxy<List<LedgerRecord>> { _, _ ->
return@InfoProxy aopDbMapper.ledgerRecordMapper.selectByExample(Example(LedgerRecord::class.java).apply {
createCriteria().andEqualTo("lrYear", config?.year)
.andEqualTo("lrMonth", config?.month)
@@ -325,9 +398,12 @@
orderBy("planstarttime").desc()
})
if (r.isNotEmpty()) {
- val thisMonth = LocalDateTime.ofInstant(subTask.value?.planstarttime?.toInstant(), ZoneId.systemDefault())
- .withDayOfMonth(1).toLocalDate()
- val lastMonth = LocalDateTime.ofInstant(r[0]?.planstarttime?.toInstant(), ZoneId.systemDefault()).withDayOfMonth(1).toLocalDate()
+ val thisMonth =
+ LocalDateTime.ofInstant(subTask.value?.planstarttime?.toInstant(), ZoneId.systemDefault())
+ .withDayOfMonth(1).toLocalDate()
+ val lastMonth =
+ LocalDateTime.ofInstant(r[0]?.planstarttime?.toInstant(), ZoneId.systemDefault()).withDayOfMonth(1)
+ .toLocalDate()
if (lastMonth.plusMonths(1).isEqual(thisMonth)) {
last.subTask.value = r[0]
}
@@ -340,21 +416,43 @@
*/
fun clear() {
scene.clear()
+ subTaskIndex = 0
+ subTaskList.clear()
userInfo.clear()
userInfoTZ.clear()
+ baseScene.clear()
+ problemTypes.clear()
+ ledgerCount.clear()
+ ledgerRecords.clear()
+
+ clearSubtask()
+ }
+
+ fun clearSubtask() {
subTask.clear()
inspection.clear()
- baseScene.clear()
problems.clear()
evaluation.clear()
itemevaluationList.clear()
- problemTypes.clear()
- baseRule.clear()
totalScore.clear()
- topItems.clear()
+ topRules.clear()
+ baseRule.clear()
rules.clear()
- ledgerCount.clear()
- ledgerRecords.clear()
+ }
+
+ /**
+ * 鍒囨崲鑷充笅涓�涓贰鏌ヤ换鍔�
+ * 涓�涓満鏅彲鑳藉悓鏃跺瓨鍦ㄥ涓贰鏌ヤ换鍔subTaskList]锛岄渶瑕佸姣忎釜宸℃煡浠诲姟鍒嗗埆杩涜璇勫垎
+ * @return 鏄惁鏈変笅涓�涓贰鏌ヤ换鍔�
+ */
+ fun gotoNextSubTask(): Boolean {
+ return if (subTaskIndex + 1 < (subTaskList.value?.size ?: 0)) {
+ clearSubtask()
+ subTaskIndex++
+ true
+ } else {
+ false
+ }
}
/**
@@ -383,12 +481,13 @@
if (defaultValue != null) {
return defaultValue
} else if (!fetched && _value == null) {
- _value = if (cacheMap.containsKey(key) && LocalDateTime.now().minusDays(1).isBefore(cacheTimeStamp)) {
- cacheMap[key]
- } else {
- cacheTimeStamp = LocalDateTime.now()
- fetch(defaultValue, cacheMap)
- }
+ _value =
+ if (cacheMap.containsKey(key) && LocalDateTime.now().minusDays(1).isBefore(cacheTimeStamp)) {
+ cacheMap[key]
+ } else {
+ cacheTimeStamp = LocalDateTime.now()
+ fetch(defaultValue, cacheMap)
+ }
fetched = true
}
return _value
--
Gitblit v1.9.3