| 
					
				 | 
			
			
				@@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.core.constant.DictConstants; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.core.constant.ErrorMsgConstants; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.core.constant.SecurityConstants; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.xunmei.common.core.constant.SystemParameterConstant; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.core.domain.DateRange; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.core.domain.R; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.core.domain.drill.domain.*; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -23,6 +24,7 @@ import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskReportVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.core.enums.ExportPdfType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.core.enums.OrgTypeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.core.enums.drill.DrillDoStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.xunmei.common.core.enums.drill.DrillRecStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.core.enums.drill.DrillType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.core.exception.SystemException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.common.core.utils.DateUtils; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -37,9 +39,11 @@ import com.xunmei.core.drill.mapper.CoreDrillTaskToUserMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.core.drill.service.ICoreDrillTaskService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.core.drill.service.ICoreDrillTaskToRoleService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.core.drill.service.ICoreDrillTaskToUserService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.xunmei.system.api.RemoteConfigService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.system.api.RemoteFileService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.system.api.RemoteOrgService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.system.api.RemoteRoleService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.xunmei.system.api.domain.SysConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.system.api.domain.SysDictData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.system.api.domain.SysOrg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.xunmei.system.api.domain.SysUser; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -89,6 +93,8 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private CoreDrillPlanMapper coreDrillPlanMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    RemoteConfigService remoteConfigService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public TableDataInfo<CoreDrillTaskPageVo> selectPage(CoreDrillTaskPageDto request) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -703,13 +709,48 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (drillTask == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new SystemException("获取预案演练数据失败!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //todo 确认是否能取消推荐 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (DrillDoStatus.DONE.getCode().equals(drillTask.getStatus())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //说明是已完成的案例,设置为正常案例 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (request.getRecStatus() > drillTask.getRecStatus()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //说明是向上级推荐优秀案例,需要判断是否已达上限 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            checkRecNum(drillTask, request.getRecStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //判断是否越级推荐 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (ObjectUtil.notEqual(drillTask.getRecStatus(), request.getRecStatus() - 1)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new SystemException("推荐状态异常!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (ObjectUtil.notEqual(DrillDoStatus.DONE.getCode(), drillTask.getStatus())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new SystemException("该预案演练任务未完成或已逾期!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return coreDrillTaskMapper.updateStatusById(request.getDrillTaskId(), request.getRecStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void checkRecNum(CoreDrillTask drillTask, Integer recStatus) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DrillRecStatus drillRecStatus = DrillRecStatus.getDrillRecStatus(recStatus); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (drillRecStatus == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new SystemException("推荐状态异常!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SysConfig sysConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (ObjectUtil.equal(drillRecStatus, DrillRecStatus.REC_REGION_EXCELLENT_CASE)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sysConfig = RemoteCallHandlerExecutor.executeRemoteCall(() -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    remoteConfigService.findSysConfigByCode(SystemParameterConstant.HS_REC_DRILL_TASK_MAX, SecurityConstants.INNER), ErrorMsgConstants.QUERY_CONFIG_ERROR); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Long count = coreDrillTaskMapper.selectCount(new LambdaQueryWrapper<CoreDrillTask>() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(CoreDrillTask::getRecStatus, DrillRecStatus.REC_REGION_EXCELLENT_CASE.getCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .likeRight(CoreDrillTask::getOrgPath, drillTask.getOrgPath())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (count != null && count >= Integer.parseInt(sysConfig.getConfigValue())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new SystemException("推荐地区优秀案例已达上限!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (ObjectUtil.equal(drillRecStatus, DrillRecStatus.REC_PROVINCE_EXCELLENT_CASE)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sysConfig = RemoteCallHandlerExecutor.executeRemoteCall(() -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    remoteConfigService.findSysConfigByCode(SystemParameterConstant.AREA_REC_DRILL_TASK_MAX, SecurityConstants.INNER), ErrorMsgConstants.QUERY_CONFIG_ERROR); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Long count = coreDrillTaskMapper.selectCount(new LambdaQueryWrapper<CoreDrillTask>() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .eq(CoreDrillTask::getRecStatus, DrillRecStatus.REC_PROVINCE_EXCELLENT_CASE.getCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .likeRight(CoreDrillTask::getOrgPath, drillTask.getOrgPath())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (count != null && count >= Integer.parseInt(sysConfig.getConfigValue())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new SystemException("推荐省级优秀案例已达上限!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |