1
1
package com.tencent.devops.turbo.service
2
2
3
+ import com.tencent.bk.sdk.iam.constants.CallbackMethodEnum
4
+ import com.tencent.bk.sdk.iam.dto.callback.request.CallbackRequestDTO
5
+ import com.tencent.bk.sdk.iam.dto.callback.response.CallbackBaseResponseDTO
6
+ import com.tencent.bk.sdk.iam.dto.callback.response.FetchInstanceInfoResponseDTO
7
+ import com.tencent.bk.sdk.iam.dto.callback.response.InstanceInfoDTO
8
+ import com.tencent.bk.sdk.iam.dto.callback.response.ListInstanceResponseDTO
3
9
import com.tencent.devops.common.api.exception.TurboException
4
10
import com.tencent.devops.common.api.exception.code.TURBO_NO_DATA_FOUND
5
11
import com.tencent.devops.common.api.exception.code.TURBO_PARAM_INVALID
6
12
import com.tencent.devops.common.api.exception.code.TURBO_THIRDPARTY_SYSTEM_FAIL
7
13
import com.tencent.devops.common.api.pojo.Page
8
14
import com.tencent.devops.common.api.util.OkhttpUtil
9
15
import com.tencent.devops.common.auth.api.AuthRegisterApi
16
+ import com.tencent.devops.common.auth.callback.FetchInstanceInfo
17
+ import com.tencent.devops.common.auth.callback.ListInstanceInfo
10
18
import com.tencent.devops.common.client.Client
11
19
import com.tencent.devops.common.db.PageUtils
12
20
import com.tencent.devops.common.service.prometheus.BkTimed
13
21
import com.tencent.devops.common.util.JsonUtil
14
22
import com.tencent.devops.common.util.MathUtil
23
+ import com.tencent.devops.common.util.constants.COMMON_NUM_0L
24
+ import com.tencent.devops.common.util.constants.COMMON_NUM_10L
25
+ import com.tencent.devops.common.util.constants.COMMON_NUM_1L
15
26
import com.tencent.devops.common.util.constants.SYSTEM_ADMIN
16
27
import com.tencent.devops.project.api.service.ServiceProjectResource
17
28
import com.tencent.devops.turbo.dao.mongotemplate.TurboPlanDao
@@ -33,6 +44,7 @@ import com.tencent.devops.turbo.vo.TurboPlanStatusBatchUpdateReqVO
33
44
import org.slf4j.LoggerFactory
34
45
import org.springframework.beans.BeanUtils
35
46
import org.springframework.beans.factory.annotation.Autowired
47
+ import org.springframework.data.domain.Sort
36
48
import org.springframework.data.repository.findByIdOrNull
37
49
import org.springframework.stereotype.Service
38
50
import java.time.LocalDate
@@ -750,4 +762,82 @@ class TurboPlanService @Autowired constructor(
750
762
" all project id turbo plan status updated successfully!"
751
763
}
752
764
}
765
+
766
+ /* *
767
+ * iam(蓝盾)回调实现方法
768
+ */
769
+ fun getInstanceByResource (callBackInfo : CallbackRequestDTO ): String {
770
+ logger.info(" CallbackRequestDTO: {}" , callBackInfo)
771
+ val result: CallbackBaseResponseDTO = when (callBackInfo.method) {
772
+ CallbackMethodEnum .LIST_INSTANCE -> handleListInstance(callBackInfo)
773
+ CallbackMethodEnum .FETCH_INSTANCE_INFO -> handleFetchInstanceInfo(callBackInfo)
774
+ else -> CallbackBaseResponseDTO ()
775
+ }
776
+ return JsonUtil .toJson(result)
777
+ }
778
+
779
+ /* *
780
+ * 按项目id分页获取方案清单
781
+ */
782
+ private fun handleListInstance (callBackInfo : CallbackRequestDTO ): CallbackBaseResponseDTO {
783
+ return callBackInfo.filter.parent?.id?.let { parentId ->
784
+ listInstance(parentId, callBackInfo.page.offset, callBackInfo.page.limit)
785
+ } ? : ListInstanceInfo ().buildListInstanceFailResult()
786
+ }
787
+
788
+ /* *
789
+ * 按方案id批量获取方案清单
790
+ */
791
+ private fun handleFetchInstanceInfo (callBackInfo : CallbackRequestDTO ): CallbackBaseResponseDTO {
792
+ val idList = callBackInfo.filter.idList
793
+ return if (idList.isNullOrEmpty()) {
794
+ FetchInstanceInfo ().buildFetchInstanceFailResult()
795
+ } else {
796
+ val turboPlanIdSet = idList.mapNotNull { it.toString() }.toSet()
797
+ fetchInstance(turboPlanIdSet)
798
+ }
799
+ }
800
+
801
+ /* *
802
+ * 按项目id
803
+ */
804
+ private fun listInstance (projectId : String , offset : Long? , limit : Long? ): ListInstanceResponseDTO {
805
+ val safeOffset = (offset ? : COMMON_NUM_0L ).coerceAtLeast(COMMON_NUM_0L )
806
+ val safeLimit = (limit ? : COMMON_NUM_10L ).coerceAtLeast(COMMON_NUM_1L )
807
+ val pageNum = safeOffset / safeLimit + COMMON_NUM_1L
808
+ val pageable =
809
+ PageUtils .convertPageSizeToPageable(pageNum.toInt(), safeLimit.toInt(), " _id" , Sort .Direction .ASC .name)
810
+
811
+ val turboPlanEntityList = turboPlanDao.getAllTurboPlanList(null , null , projectId, pageable).records
812
+ val instanceInfoList = turboPlanEntityList.map { it.toDTO() }
813
+ val result = ListInstanceInfo ()
814
+ return if (instanceInfoList.isEmpty()) result.buildListInstanceFailResult() else result.buildListInstanceResult(
815
+ instanceInfoList,
816
+ instanceInfoList.size.toLong()
817
+ )
818
+ }
819
+
820
+ /* *
821
+ * 按方案id
822
+ */
823
+ private fun fetchInstance (turboPlanIdSet : Set <String >): FetchInstanceInfoResponseDTO {
824
+ val turboPlanEntityList = turboPlanRepository.findByIdIn(turboPlanIdSet.toList())
825
+ val instanceInfos = turboPlanEntityList.map { it.toDTO() }
826
+ val result = FetchInstanceInfo ()
827
+ return if (instanceInfos.isEmpty()) result.buildFetchInstanceFailResult() else result.buildFetchInstanceResult(
828
+ instanceInfos
829
+ )
830
+ }
831
+
832
+ /* *
833
+ * entity转DTO
834
+ */
835
+ private fun TTurboPlanEntity.toDTO (): InstanceInfoDTO {
836
+ return InstanceInfoDTO ().apply {
837
+ id = this @toDTO.id
838
+ displayName = this @toDTO.planName
839
+ iamApprover =
840
+ listOf (if (this @toDTO.createdBy.isNullOrBlank()) this @toDTO.createdBy else this @toDTO.updatedBy)
841
+ }
842
+ }
753
843
}
0 commit comments