Prechádzať zdrojové kódy

Merge branch 'V0.0.2' of http://10.87.10.227:4000/jzyd_yyds/soc into V0.0.2

jiawuxian 2 rokov pred
rodič
commit
869d8283f9
23 zmenil súbory, kde vykonal 252 pridanie a 319 odobranie
  1. 24 1
      project_data/sql/0.0.2/soc/soc.sql
  2. 2 2
      soc-auth/src/main/java/com/xunmei/auth/service/FJNXLoginService.java
  3. 4 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/vo/CoreDrillPlanDetailVo.java
  4. 4 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/CoreEduTrainingTaskReportDto.java
  5. 3 2
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingPlanDetailVo.java
  6. 2 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingTaskReportVo.java
  7. 17 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/drill/DrillPlanStatus.java
  8. 17 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/edu/EduTrainingPlanStatus.java
  9. 0 55
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/exception/BusinessException.java
  10. 3 84
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/AssertUtil.java
  11. 14 33
      soc-common/soc-common-security/src/main/java/com/xunmei/common/security/handler/GlobalExceptionHandler.java
  12. 14 14
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/controller/CoreDrillPlanController.java
  13. 5 5
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillPlanMapper.java
  14. 5 5
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/ICoreDrillPlanService.java
  15. 45 20
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java
  16. 3 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java
  17. 7 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/CoreEduTrainingPlanController.java
  18. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingPlanMapper.java
  19. 2 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingPlanService.java
  20. 61 90
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java
  21. 8 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java
  22. 6 0
      soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillPlanMapper.xml
  23. 4 0
      soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingPlanMapper.xml

+ 24 - 1
project_data/sql/0.0.2/soc/soc.sql

@@ -1972,12 +1972,29 @@ INSERT INTO `core_safety_index_calculate_rule_item`(`id`, `rule_id`, `indicator_
 INSERT INTO `core_safety_index_calculate_rule_item`(`id`, `rule_id`, `indicator_note`, `calculate_type`, `indicator_days`, `item_type`, `item_value`, `order_num`) VALUES (3846752731742210, 3846752731185152, '未登连续五天', 2, 5, NULL, 3.00, NULL);
 INSERT INTO `core_safety_index_calculate_rule_item`(`id`, `rule_id`, `indicator_note`, `calculate_type`, `indicator_days`, `item_type`, `item_value`, `order_num`) VALUES (3846752731742211, 3846752731185152, ' 未登连续十天', 2, 10, NULL, 5.00, NULL);
 
+-- 新增教育培训资料类型字典
 delete from sys_dict_type where dict_type='edu_materials_type';
 delete from sys_dict_data where dict_type='edu_materials_type';
 INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark) VALUES ('教育培训资料类型', 'edu_materials_type', '0', 'slsjyc', now(), '', null, null);
 INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (1, '资料类型1', '1', 'edu_materials_type', null, 'default', 'N', '0', 'slsjyc', now(), 'slsjyc', now(), null);
 INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (2, '资料类型2', '2', 'edu_materials_type', null, 'default', 'N', '0', 'slsjyc', now(), 'slsjyc', now(), null);
 
+-- 新增教育培训计划状态字典
+delete from sys_dict_type where dict_type='edu_plan_status';
+delete from sys_dict_data where dict_type='edu_plan_status';
+INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark) VALUES ('教育培训计划状态', 'edu_plan_status', '0', null, now(), '', null, null);
+INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (0, '草稿', '0', 'edu_plan_status', null, 'default', 'N', '0', null, now(), '', null, null);
+INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (1, '使用中', '1', 'edu_plan_status', null, 'default', 'N', '0', null, now(), null, now(), null);
+INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (2, '停用', '2', 'edu_plan_status', null, 'default', 'N', '0', null, now(), '', null, null);
+
+-- 新增预案演练计划状态字典
+delete from sys_dict_type where dict_type='drill_plan_status';
+delete from sys_dict_data where dict_type='drill_plan_status';
+INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark) VALUES ('预案演练计划状态', 'drill_plan_status', '0', null, now(), '', null, null);
+INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (0, '草稿', '0', 'drill_plan_status', null, 'default', 'N', '0', null, now(), '', null, null);
+INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (1, '使用中', '1', 'drill_plan_status', null, 'default', 'N', '0', null, now(), null, now(), null);
+INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES (2, '停用', '2', 'drill_plan_status', null, 'default', 'N', '0', null, now(), '', null, null);
+
 -- -------------------------------------------------------
 -- ----------新增数据 end  ----------------------------
 -- -------------------------------------------------------
@@ -2045,7 +2062,13 @@ update sys_menu set icon='#' where icon is null or icon ='';
 DELETE from sys_menu WHERE perms in ('device:protection:add','device:protection:edit','device:protection:remove');
 
 -- 隐藏知识库标签管理菜单
-delete  from sys_role_menu rm  where rm.menu_id in ( select id from sys_menu  where menu_name='知识库标签管理' union all select sm.id from sys_menu m inner join sys_menu sm on m.id=sm.parent_id where  m.menu_name='知识库标签管理')
+delete  from sys_role_menu rm  where rm.menu_id in ( select id from sys_menu  where menu_name='知识库标签管理' union all select sm.id from sys_menu m inner join sys_menu sm on m.id=sm.parent_id where  m.menu_name='知识库标签管理');
+
+-- 修改表字段释义
+alter table core_edu_training_plan
+    modify plan_status int null comment '计划状态:0草稿,1使用中,2停用';
+alter table core_drill_plan
+    modify plan_status int null comment '计划状态:0草稿,1使用中,2停用';
 
 -- -------------------------------------------------------
 -- ----------更新数据 end  ----------------------------

+ 2 - 2
soc-auth/src/main/java/com/xunmei/auth/service/FJNXLoginService.java

@@ -184,7 +184,7 @@ public class FJNXLoginService{
         }
         JSONObject accountJson = new JSONObject(accountInfo);
 
-        if("true".equals(accountJson.getStr("result"))){
+        if(!"true".equals(accountJson.getStr("result"))){
             throw new RuntimeException("验证token失败,登录失败!");
         }
 
@@ -205,7 +205,7 @@ public class FJNXLoginService{
         JSONObject userContent = new JSONObject(userJson.getStr("data"));
         String sap_user = userContent.getStr("sap_user");
 
-        JSONObject info = new JSONObject(userJson.getStr("sap_user"));
+        JSONObject info = new JSONObject(sap_user);
 
         String username = info.getStr("username");
 

+ 4 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/vo/CoreDrillPlanDetailVo.java

@@ -26,6 +26,10 @@ public class CoreDrillPlanDetailVo {
     @ApiModelProperty(value = "执行次数")
     private Integer execTimes;
 
+
+    @ApiModelProperty(value = "是否是标准计划,0:否,1:是", notes = "仅标准计划才存在下发的可能")
+    private Integer standard;
+
     @ApiModelProperty(value = "计划开始时间")
     private Date startDate;
     @ApiModelProperty(value = "计划结束时间")

+ 4 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/CoreEduTrainingTaskReportDto.java

@@ -5,11 +5,14 @@ import lombok.Data;
 
 import javax.validation.constraints.NotNull;
 import java.util.Date;
-import java.util.List;
 
 @Data
 public class CoreEduTrainingTaskReportDto {
 
+    @NotNull(message = "请选择统计维度!")
+    @ApiModelProperty(value = "查询类型", notes = "1:按计划查询,2:按任务统计")
+    private Integer selectType;
+
     @NotNull(message = "请选择计划进行查看!")
     @ApiModelProperty(value = "教育培训计划Id")
     private Long planId;

+ 3 - 2
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingPlanDetailVo.java

@@ -4,8 +4,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 import java.util.Date;
 import java.util.List;
@@ -26,6 +24,9 @@ public class CoreEduTrainingPlanDetailVo {
     @ApiModelProperty(value = "计划周期")
     private Integer planCycle;
 
+    @ApiModelProperty(value = "是否是标准计划,0:否,1:是", notes = "仅标准计划才存在下发的可能")
+    private Integer standard;
+
     @ApiModelProperty(value = "执行次数")
     private Integer execTimes;
 

+ 2 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingTaskReportVo.java

@@ -19,8 +19,9 @@ public class CoreEduTrainingTaskReportVo {
 
     @ApiModelProperty(value = "机构名称")
     private String orgName;
-    private String orgPath;
 
+    @JsonIgnore
+    private String orgPath;
 
     @ApiModelProperty(value = "应培训数量")
     private Integer shouldFinish;

+ 17 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/drill/DrillPlanStatus.java

@@ -0,0 +1,17 @@
+package com.xunmei.common.core.enums.drill;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum DrillPlanStatus {
+
+    DRAFT(0, "草稿"),
+    USING(1, "使用中"),
+    DELETED(2, "停用"),
+    ;
+    private int code;
+
+    private String desc;
+}

+ 17 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/edu/EduTrainingPlanStatus.java

@@ -0,0 +1,17 @@
+package com.xunmei.common.core.enums.edu;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum EduTrainingPlanStatus {
+
+    DRAFT(0, "草稿"),
+    USING(1, "使用中"),
+    DELETED(2, "停用"),
+    ;
+    private int code;
+
+    private String desc;
+}

+ 0 - 55
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/exception/BusinessException.java

@@ -1,55 +0,0 @@
-package com.xunmei.common.core.exception;
-
-import lombok.Data;
-
-@Data
-public class BusinessException extends RuntimeException {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     *  错误码
-     */
-    protected Integer errorCode;
-
-    /**
-     *  错误信息
-     */
-    protected String errorMsg;
-
-    public BusinessException() {
-        super();
-    }
-
-    public BusinessException(String errorMsg) {
-        super(errorMsg);
-        this.errorMsg = errorMsg;
-    }
-
-    public BusinessException(Integer errorCode, String errorMsg) {
-        super(errorMsg);
-        this.errorCode = errorCode;
-        this.errorMsg = errorMsg;
-    }
-
-    public BusinessException(Integer errorCode, String errorMsg, Throwable cause) {
-        super(errorMsg, cause);
-        this.errorCode = errorCode;
-        this.errorMsg = errorMsg;
-    }
-
-    public BusinessException(ErrorEnum error) {
-        super(error.getErrorMsg());
-        this.errorCode = error.getErrorCode();
-        this.errorMsg = error.getErrorMsg();
-    }
-
-    @Override
-    public String getMessage() {
-        return errorMsg;
-    }
-
-    @Override
-    public synchronized Throwable fillInStackTrace() {
-        return this;
-    }
-}

+ 3 - 84
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/AssertUtil.java

@@ -1,16 +1,11 @@
 package com.xunmei.common.core.utils;
 
 import cn.hutool.core.util.ObjectUtil;
-import com.xunmei.common.core.exception.BusinessException;
-import com.xunmei.common.core.exception.CommonErrorEnum;
-import com.xunmei.common.core.exception.ErrorEnum;
+import com.xunmei.common.core.exception.SystemException;
 import org.hibernate.validator.HibernateValidator;
 
-import javax.validation.ConstraintViolation;
 import javax.validation.Validation;
 import javax.validation.Validator;
-import java.text.MessageFormat;
-import java.util.*;
 
 /**
  * 校验工具类
@@ -30,57 +25,6 @@ public class AssertUtil {
      */
     private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
 
-    /**
-     * 注解验证参数(校验到失败就结束)
-     *
-     * @param obj
-     */
-    public static <T> void fastFailValidate(T obj) {
-        Set<ConstraintViolation<T>> constraintViolations = failFastValidator.validate(obj);
-        if (constraintViolations.size() > 0) {
-            throwException(CommonErrorEnum.PARAM_VALID, constraintViolations.iterator().next().getMessage());
-        }
-    }
-
-    /**
-     * 注解验证参数(全部校验,抛出异常)
-     *
-     * @param obj
-     */
-    public static <T> void allCheckValidateThrow(T obj) {
-        Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);
-        if (constraintViolations.size() > 0) {
-            StringBuilder errorMsg = new StringBuilder();
-            Iterator<ConstraintViolation<T>> iterator = constraintViolations.iterator();
-            while (iterator.hasNext()) {
-                ConstraintViolation<T> violation = iterator.next();
-                //拼接异常信息
-                errorMsg.append(violation.getPropertyPath().toString()).append(":").append(violation.getMessage()).append(",");
-            }
-            //去掉最后一个逗号
-            throwException(CommonErrorEnum.PARAM_VALID, errorMsg.toString().substring(0, errorMsg.length() - 1));
-        }
-    }
-
-
-    /**
-     * 注解验证参数(全部校验,返回异常信息集合)
-     *
-     * @param obj
-     */
-    public static <T> Map<String, String> allCheckValidate(T obj) {
-        Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);
-        if (constraintViolations.size() > 0) {
-            Map<String, String> errorMessages = new HashMap<>();
-            Iterator<ConstraintViolation<T>> iterator = constraintViolations.iterator();
-            while (iterator.hasNext()) {
-                ConstraintViolation<T> violation = iterator.next();
-                errorMessages.put(violation.getPropertyPath().toString(), violation.getMessage());
-            }
-            return errorMessages;
-        }
-        return new HashMap<>();
-    }
 
     //如果不是true,则抛异常
     public static void isTrue(boolean expression, String msg) {
@@ -89,12 +33,6 @@ public class AssertUtil {
         }
     }
 
-    public static void isTrue(boolean expression, ErrorEnum errorEnum, Object... args) {
-        if (!expression) {
-            throwException(errorEnum, args);
-        }
-    }
-
     //如果是true,则抛异常
     public static void isFalse(boolean expression, String msg) {
         if (expression) {
@@ -102,12 +40,6 @@ public class AssertUtil {
         }
     }
 
-    //如果是true,则抛异常
-    public static void isFalse(boolean expression, ErrorEnum errorEnum, Object... args) {
-        if (expression) {
-            throwException(errorEnum, args);
-        }
-    }
 
     //如果不是非空对象,则抛异常
     public static void isNotEmpty(Object obj, String msg) {
@@ -117,13 +49,6 @@ public class AssertUtil {
     }
 
     //如果不是非空对象,则抛异常
-    public static void isNotEmpty(Object obj, ErrorEnum errorEnum, Object... args) {
-        if (isEmpty(obj)) {
-            throwException(errorEnum, args);
-        }
-    }
-
-    //如果不是非空对象,则抛异常
     public static void isEmpty(Object obj, String msg) {
         if (!isEmpty(obj)) {
             throwException(msg);
@@ -147,14 +72,8 @@ public class AssertUtil {
     }
 
     private static void throwException(String msg) {
-        throwException(null, msg);
-    }
-
-    private static void throwException(ErrorEnum errorEnum, Object... arg) {
-        if (Objects.isNull(errorEnum)) {
-            errorEnum = CommonErrorEnum.SYSTEM_ERROR;
-        }
-        throw new BusinessException(errorEnum.getErrorCode(), MessageFormat.format(errorEnum.getErrorMsg(), arg));
+        //throwException(null, msg);
+        throw new SystemException(msg);
     }
 
 

+ 14 - 33
soc-common/soc-common-security/src/main/java/com/xunmei/common/security/handler/GlobalExceptionHandler.java

@@ -18,20 +18,18 @@ import javax.servlet.http.HttpServletRequest;
 
 /**
  * 全局异常处理器
- * 
+ *
  * @author xunmei
  */
 @RestControllerAdvice
-public class GlobalExceptionHandler
-{
+public class GlobalExceptionHandler {
     private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
 
     /**
      * 权限码异常
      */
     @ExceptionHandler(NotPermissionException.class)
-    public AjaxResult handleNotPermissionException(NotPermissionException e, HttpServletRequest request)
-    {
+    public AjaxResult handleNotPermissionException(NotPermissionException e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',权限码校验失败'{}'", requestURI, e.getMessage());
         return AjaxResult.error(HttpStatus.FORBIDDEN, "没有访问权限,请联系管理员授权");
@@ -41,8 +39,7 @@ public class GlobalExceptionHandler
      * 角色权限异常
      */
     @ExceptionHandler(NotRoleException.class)
-    public AjaxResult handleNotRoleException(NotRoleException e, HttpServletRequest request)
-    {
+    public AjaxResult handleNotRoleException(NotRoleException e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',角色权限校验失败'{}'", requestURI, e.getMessage());
         return AjaxResult.error(HttpStatus.FORBIDDEN, "没有访问权限,请联系管理员授权");
@@ -53,8 +50,7 @@ public class GlobalExceptionHandler
      */
     @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
     public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,
-            HttpServletRequest request)
-    {
+                                                          HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod());
         return AjaxResult.error(e.getMessage());
@@ -64,8 +60,7 @@ public class GlobalExceptionHandler
      * 业务异常
      */
     @ExceptionHandler(ServiceException.class)
-    public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request)
-    {
+    public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) {
         log.error(e.getMessage(), e);
         Integer code = e.getCode();
         return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage());
@@ -75,8 +70,7 @@ public class GlobalExceptionHandler
      * 拦截未知的运行时异常
      */
     @ExceptionHandler(RuntimeException.class)
-    public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request)
-    {
+    public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',发生未知异常.", requestURI, e);
         return AjaxResult.error(e.getMessage());
@@ -86,8 +80,7 @@ public class GlobalExceptionHandler
      * 系统异常
      */
     @ExceptionHandler(Exception.class)
-    public AjaxResult handleException(Exception e, HttpServletRequest request)
-    {
+    public AjaxResult handleException(Exception e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',发生系统异常.", requestURI, e);
         return AjaxResult.error(e.getMessage());
@@ -97,8 +90,7 @@ public class GlobalExceptionHandler
      * 自定义验证异常
      */
     @ExceptionHandler(BindException.class)
-    public AjaxResult handleBindException(BindException e)
-    {
+    public AjaxResult handleBindException(BindException e) {
         log.error(e.getMessage(), e);
         String message = e.getAllErrors().get(0).getDefaultMessage();
         return AjaxResult.error(message);
@@ -106,21 +98,19 @@ public class GlobalExceptionHandler
 
     /**
      * 自定义验证异常
-     *//*
+     */
     @ExceptionHandler(MethodArgumentNotValidException.class)
-    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e)
-    {
+    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
         log.error(e.getMessage(), e);
         String message = e.getBindingResult().getFieldError().getDefaultMessage();
         return AjaxResult.error(message);
-    }*/
+    }
 
     /**
      * 内部认证异常
      */
     @ExceptionHandler(InnerAuthException.class)
-    public AjaxResult handleInnerAuthException(InnerAuthException e)
-    {
+    public AjaxResult handleInnerAuthException(InnerAuthException e) {
         return AjaxResult.error(e.getMessage());
     }
 
@@ -128,8 +118,7 @@ public class GlobalExceptionHandler
      * 演示模式异常
      */
     @ExceptionHandler(DemoModeException.class)
-    public AjaxResult handleDemoModeException(DemoModeException e)
-    {
+    public AjaxResult handleDemoModeException(DemoModeException e) {
         return AjaxResult.error("演示模式,不允许操作");
     }
 
@@ -145,12 +134,4 @@ public class GlobalExceptionHandler
         return AjaxResult.error(CommonErrorEnum.PARAM_VALID.getErrorCode(), message.substring(0, message.length() - 1));
     }
 
-    /**
-     * 自定义校验异常(如参数校验等)
-     */
-    @ExceptionHandler(value = BusinessException.class)
-    public AjaxResult businessExceptionHandler(BusinessException e) {
-        log.info("business exception!The reason is:{}", e.getMessage(), e);
-        return AjaxResult.error(e.getErrorCode(), e.getMessage());
-    }
 }

+ 14 - 14
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/controller/CoreDrillPlanController.java

@@ -5,26 +5,18 @@ import com.xunmei.common.core.domain.drill.dto.CoreDrillPlanInsertDto;
 import com.xunmei.common.core.domain.drill.dto.CoreDrillPlanPageDto;
 import com.xunmei.common.core.domain.drill.dto.CoreDrillPlanUpdateDto;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanPageVo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.xunmei.common.core.web.controller.BaseController;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.log.annotation.Log;
 import com.xunmei.common.log.enums.BusinessType;
 import com.xunmei.common.security.annotation.RequiresPermissions;
-import com.xunmei.common.core.domain.drill.domain.CoreDrillPlan;
 import com.xunmei.core.drill.service.ICoreDrillPlanService;
-import com.xunmei.common.core.web.controller.BaseController;
-import com.xunmei.common.core.web.domain.AjaxResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import com.xunmei.common.core.web.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -114,6 +106,14 @@ public class CoreDrillPlanController extends BaseController {
         return AjaxResult.success();
     }
 
+    @ApiOperation(value = "计划撤回")
+    @RequiresPermissions("core:drillPlan:edit")
+    @GetMapping("/revocationPlan/{planId}")
+    public AjaxResult revocationPlan(@PathVariable("planId") Long planId) {
+        return toAjax(coreDrillPlanService.revocationPlan(planId));
+    }
+
+
 
     @ApiOperation(value = "计划下拉框")
     @RequiresPermissions("core:drillPlan:list")

+ 5 - 5
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillPlanMapper.java

@@ -1,18 +1,16 @@
 package com.xunmei.core.drill.mapper;
 
-import java.util.List;
-
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xunmei.common.core.domain.drill.domain.CoreDrillPlan;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xunmei.common.core.domain.drill.dto.CoreDrillPlanPageDto;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDataVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanPageVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanRoleVo;
-import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanPageDto;
-import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanPageVo;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * 预案演练计划Mapper接口
  *
@@ -79,4 +77,6 @@ public interface CoreDrillPlanMapper extends BaseMapper<CoreDrillPlan> {
     List<Long> selectAllIdByParentId(@Param("planId") Long planId);
 
     List<CoreDrillPlanRoleVo> selectPlanRole(@Param("orgId") Long orgId);
+
+    int updatePlanStatus(@Param("planId") Long planId, @Param("planStatus") int status);
 }

+ 5 - 5
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/ICoreDrillPlanService.java

@@ -1,10 +1,8 @@
 package com.xunmei.core.drill.service;
 
-import java.util.List;
-
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.domain.IdName;
 import com.xunmei.common.core.domain.drill.domain.CoreDrillPlan;
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.domain.drill.dto.CoreDrillPlanInsertDto;
 import com.xunmei.common.core.domain.drill.dto.CoreDrillPlanPageDto;
 import com.xunmei.common.core.domain.drill.dto.CoreDrillPlanUpdateDto;
@@ -12,10 +10,10 @@ import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDataVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDetailVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanPageVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanRoleVo;
-import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanDataVo;
-import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanRoleVo;
 import com.xunmei.common.core.web.page.TableDataInfo;
 
+import java.util.List;
+
 /**
  * 预案演练计划Service接口
  *
@@ -87,4 +85,6 @@ public interface ICoreDrillPlanService extends IService<CoreDrillPlan> {
 
     List<IdName<String, String>> planList(Long orgId);
 
+    int revocationPlan(Long planId);
+
 }

+ 45 - 20
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java

@@ -21,7 +21,9 @@ import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDetailVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanPageVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanRoleVo;
 import com.xunmei.common.core.enums.OrgTypeEnum;
+import com.xunmei.common.core.enums.drill.DrillPlanStatus;
 import com.xunmei.common.core.exception.SystemException;
+import com.xunmei.common.core.utils.AssertUtil;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.utils.SecurityUtils;
@@ -211,7 +213,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         int insert = coreDrillPlanMapper.insert(plan);
 
         //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
-        if ((!checkOrgType(org.getType())) && ObjectUtil.equal(0, plan.getPlanStatus()) && (ObjectUtil.equal(0, plan.getPlanCycle()) || ObjectUtil.equal(1, plan.getBuildTaskNow()))) {
+        if ((!checkOrgType(org.getType())) && ObjectUtil.equal(DrillPlanStatus.USING.getCode(), plan.getPlanStatus()) && (ObjectUtil.equal(0, plan.getPlanCycle()) || ObjectUtil.equal(1, plan.getBuildTaskNow()))) {
             final CoreDrillPlanDataVo detailPlanData = this.getCoreDrillPlanDataVo(plan.getId());
             coreDrillTaskService.createTaskForNow(detailPlanData, plan.getPlanStartDate(), plan.getPlanEndDate());
         }
@@ -237,6 +239,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     @Transactional(rollbackFor = Exception.class)
     public int updateCoreDrillPlan(CoreDrillPlanUpdateDto request) {
         final CoreDrillPlan plan = getById(request.getId());
+        AssertUtil.isEmpty(plan, "计划不存在!");
         //此处判断能否修改,如果可以 需要删除任务,且还需要判断是否需要生成任务
         Boolean can = checkCanUpdate(request, plan);
         if (!can) {
@@ -269,23 +272,11 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             return;
         }
         Long planId = plan.getId();
-        //删除原有数据, 然后重新生成计划,任务
-        List<Long> planIdList = coreDrillPlanMapper.selectAllIdByParentId(planId);
-        if (ObjectUtil.isNotEmpty(planIdList)) {
-            coreDrillPlanMapper.deleteBatchIds(planIdList);
-            coreDrillPlanToExecOrgMapper.delete(new LambdaQueryWrapper<CoreDrillPlanToExecOrg>().in(CoreDrillPlanToExecOrg::getPlanId, planIdList));
-            coreDrillPlanToRoleMapper.delete(new LambdaQueryWrapper<CoreDrillPlanToRole>().in(CoreDrillPlanToRole::getPlanId, planIdList));
-        }
-        List<CoreDrillTask> taskIdList = coreDrillTaskMapper.selectList(new LambdaQueryWrapper<CoreDrillTask>().in(CoreDrillTask::getPlanId, planIdList).select(CoreDrillTask::getId));
-        List<Long> collect = taskIdList.stream().map(CoreDrillTask::getId).collect(Collectors.toList());
-        if (ObjectUtil.isNotEmpty(collect)) {
-            coreDrillTaskMapper.deleteBatchIds(collect);
-            coreDrillTaskToRoleMapper.delete(new LambdaQueryWrapper<CoreDrillTaskToRole>().in(CoreDrillTaskToRole::getDrillTaskId, collect));
 
-        }
+        deletePlanAndTaskByParentPlanId(planId);
         List<CoreDrillPlan> planList = buildPlanData(plan, drillPlanToRoleList);
 
-        if (plan.getPlanStatus()==1){
+        if (plan.getPlanStatus()==DrillPlanStatus.DELETED.getCode()){
             log.info("计划已被修改为禁用,不再生成任务!");
             return;
         }
@@ -300,6 +291,26 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         }
     }
 
+    private void deletePlanAndTaskByParentPlanId(Long planId) {
+        //删除原有数据, 然后重新生成计划,任务
+        List<Long> planIdList = coreDrillPlanMapper.selectAllIdByParentId(planId);
+        if (ObjectUtil.isEmpty(planIdList)){
+            return;
+        }
+        if (ObjectUtil.isNotEmpty(planIdList)) {
+            coreDrillPlanMapper.deleteBatchIds(planIdList);
+            coreDrillPlanToExecOrgMapper.delete(new LambdaQueryWrapper<CoreDrillPlanToExecOrg>().in(CoreDrillPlanToExecOrg::getPlanId, planIdList));
+            coreDrillPlanToRoleMapper.delete(new LambdaQueryWrapper<CoreDrillPlanToRole>().in(CoreDrillPlanToRole::getPlanId, planIdList));
+        }
+        List<CoreDrillTask> taskIdList = coreDrillTaskMapper.selectList(new LambdaQueryWrapper<CoreDrillTask>().in(CoreDrillTask::getPlanId, planIdList).select(CoreDrillTask::getId));
+        List<Long> collect = taskIdList.stream().map(CoreDrillTask::getId).collect(Collectors.toList());
+        if (ObjectUtil.isNotEmpty(collect)) {
+            coreDrillTaskMapper.deleteBatchIds(collect);
+            coreDrillTaskToRoleMapper.delete(new LambdaQueryWrapper<CoreDrillTaskToRole>().in(CoreDrillTaskToRole::getDrillTaskId, collect));
+
+        }
+    }
+
     private void updateCommonPlan(CoreDrillPlan plan) {
         /*
                    判断能否修改: 如果上面返回了true; 说明两种情况
@@ -314,14 +325,14 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             return;
         }
 
-        if (plan.getPlanStatus()==1){
-            log.info("计划已被修改为禁用,不再生成任务!");
+        if (plan.getPlanStatus()==DrillPlanStatus.DELETED.getCode()){
+            log.info("计划已被修改为"+DrillPlanStatus.DELETED.getDesc()+",不再生成任务!");
             return;
         }
 
         //此为情况一,计划没有生成任务或者生成了任务但未执行
         final CoreDrillPlanDataVo dataVo = getCoreDrillPlanDataVo(plan.getId());
-        if (ObjectUtil.equal(1, plan.getBuildTaskNow()) && ObjectUtil.equal(0, plan.getPlanStatus())) {
+        if (ObjectUtil.equal(1, plan.getBuildTaskNow()) && ObjectUtil.equal(DrillPlanStatus.USING.getCode(), plan.getPlanStatus())) {
             coreDrillTaskMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
             CompletableFuture.runAsync(() -> {
                 //说明有任务并且都没执行过,需要重新生成任务
@@ -647,7 +658,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
                 for (CoreDrillPlan drillPlan : list) {
                     CompletableFuture.runAsync(() -> {
                         //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
-                        if ((ObjectUtil.equal(0, plan.getPlanStatus()) && (ObjectUtil.equal(0, plan.getPlanCycle()) || ObjectUtil.equal(1, plan.getBuildTaskNow())))) {
+                        if ((ObjectUtil.equal(DrillPlanStatus.USING.getCode(), plan.getPlanStatus()) && (ObjectUtil.equal(0, plan.getPlanCycle()) || ObjectUtil.equal(1, plan.getBuildTaskNow())))) {
                             final CoreDrillPlanDataVo detailPlanData = getCoreDrillPlanDataVo(drillPlan.getId());
                             coreDrillTaskService.createTaskForNow(detailPlanData, plan.getPlanStartDate(), plan.getPlanEndDate());
                         }
@@ -659,6 +670,20 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int revocationPlan(Long planId) {
+        final CoreDrillPlan plan = coreDrillPlanMapper.selectById(planId);
+        AssertUtil.isNotEmpty(plan, "计划不存在!");
+        //仅标准计划存在撤回的情况
+        Integer hasDoneTask = coreDrillTaskMapper.checkHasTask(planId);
+        AssertUtil.notEqual(hasDoneTask, 1, "计划已有任务执行,无法撤销");
+        deletePlanAndTaskByParentPlanId(planId);
+        plan.setPlanStatus(DrillPlanStatus.DELETED.getCode());
+        plan.setIssue(0);
+        return coreDrillPlanMapper.updateById(plan);
+    }
+
+    @Override
     public CoreDrillPlanDataVo getCoreDrillPlanDataVo(Long id) {
         final CoreDrillPlanDataVo dataVo = coreDrillPlanMapper.getDetailPlanData(id);
         dataVo.setFileList(ObjectUtil.isNotEmpty(dataVo.getFile()) ? JSON.parseArray(dataVo.getFile(), String.class) : null);
@@ -695,7 +720,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
                 .eq(CoreDrillPlan::getStandard, standard)
                 .eq(CoreDrillPlan::getIssue, issue)
                 .eq(CoreDrillPlan::getDeleted, 0)
-                .eq(CoreDrillPlan::getPlanStatus, 0)
+                .eq(CoreDrillPlan::getPlanStatus, DrillPlanStatus.USING.getCode())
                 .select(CoreDrillPlan::getId, CoreDrillPlan::getPlanName)
         );
     }

+ 3 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java

@@ -26,6 +26,7 @@ import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 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.DrillPlanStatus;
 import com.xunmei.common.core.enums.drill.DrillRecStatus;
 import com.xunmei.common.core.enums.drill.DrillType;
 import com.xunmei.common.core.exception.SystemException;
@@ -590,14 +591,14 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
         if (null == cycle) {
             planList = coreDrillPlanMapper.selectList(new LambdaQueryWrapper<CoreDrillPlan>()
                     .eq(CoreDrillPlan::getStandard, 0)
-                    .eq(CoreDrillPlan::getPlanStatus, 0)
+                    .eq(CoreDrillPlan::getPlanStatus, DrillPlanStatus.USING.getCode())
                     .in(CoreDrillPlan::getPlanCycle, cycleList)
                     .eq(CoreDrillPlan::getDeleted, 0)
                     .select(CoreDrillPlan::getId, CoreDrillPlan::getPlanCycle));
         } else {
             planList = coreDrillPlanMapper.selectList(new LambdaQueryWrapper<CoreDrillPlan>()
                     .eq(CoreDrillPlan::getStandard, 0)
-                    .eq(CoreDrillPlan::getPlanStatus, 0)
+                    .eq(CoreDrillPlan::getPlanStatus, DrillPlanStatus.USING.getCode())
                     .eq(CoreDrillPlan::getPlanCycle, cycle)
                     .eq(CoreDrillPlan::getDeleted, 0)
                     .select(CoreDrillPlan::getId, CoreDrillPlan::getPlanCycle));

+ 7 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/CoreEduTrainingPlanController.java

@@ -104,6 +104,13 @@ public class CoreEduTrainingPlanController extends BaseController {
         return AjaxResult.success();
     }
 
+    @ApiOperation(value = "计划撤回")
+    @RequiresPermissions("core:plan:edit")
+    @GetMapping("/revocationPlan/{planId}")
+    public AjaxResult revocationPlan(@PathVariable("planId") Long planId) {
+        return toAjax(coreEduTrainingPlanService.revocationPlan(planId));
+    }
+
 
     @ApiOperation(value = "计划下拉框")
     @RequiresPermissions("core:plan:list")

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingPlanMapper.java

@@ -79,4 +79,6 @@ public interface CoreEduTrainingPlanMapper extends BaseMapper<CoreEduTrainingPla
 
     List<Long> selectIdByParentId(@Param("planId") Long planId);
     List<Long> selectAllIdByParentId(@Param("planId") Long planId);
+
+    int updatePlanStatus(@Param("planId") Long planId, @Param("status") int status);
 }

+ 2 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingPlanService.java

@@ -10,7 +10,6 @@ import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanDataVo;
 import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanDetailVo;
 import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanRoleVo;
 import com.xunmei.common.core.web.page.TableDataInfo;
-import com.xunmei.system.api.domain.SysOrg;
 
 import java.util.List;
 
@@ -86,4 +85,6 @@ public interface ICoreEduTrainingPlanService extends IService<CoreEduTrainingPla
 
 
     List<IdName<String, String>> planList(Long orgId);
+
+    Integer revocationPlan(Long planId);
 }

+ 61 - 90
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java

@@ -21,7 +21,9 @@ import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanDetailVo;
 import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanPageVo;
 import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanRoleVo;
 import com.xunmei.common.core.enums.OrgTypeEnum;
+import com.xunmei.common.core.enums.edu.EduTrainingPlanStatus;
 import com.xunmei.common.core.exception.SystemException;
+import com.xunmei.common.core.utils.AssertUtil;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.utils.SecurityUtils;
@@ -199,6 +201,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         plan.setFileList(ObjectUtil.isNotEmpty(request.getFileList()) ? JSON.toJSONString(request.getFileList()) : null);
         //batchSavePlanToRole(request.getPlanRoleId(), plan.getId());
         batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
+        plan.setPlanStatus(EduTrainingPlanStatus.DRAFT.getCode());
         plan.setStandard(0);
         plan.setIssue(0);
         //省联社或者办事处创建的计划才存在下发
@@ -208,7 +211,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         int insert = coreEduTrainingPlanMapper.insert(plan);
 
         //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
-        if ((!checkOrgType(org.getType())) && ObjectUtil.equal(0, plan.getPlanStatus()) && (ObjectUtil.equal(0, plan.getPlanCycle()) || ObjectUtil.equal(1, plan.getBuildTaskNow()))) {
+        if ((!checkOrgType(org.getType())) && ObjectUtil.equal(EduTrainingPlanStatus.USING.getCode(), plan.getPlanStatus()) && (ObjectUtil.equal(0, plan.getPlanCycle()) || ObjectUtil.equal(1, plan.getBuildTaskNow()))) {
             CoreEduTrainingPlanDataVo detailPlanData = this.getCoreEduTrainingPlanDataVo(plan.getId());
             coreEduTrainingTaskService.createTaskForNow(detailPlanData, plan.getStartDate(), plan.getEndDate());
         }
@@ -246,13 +249,13 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         plan.setFileList(ObjectUtil.isNotEmpty(request.getFileList()) ? JSON.toJSONString(request.getFileList()) : null);
         plan.setUpdateBy(SecurityUtils.getLoginUser().getSysUser().getId().toString());
         coreEduTrainingPlanToRoleMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
-        List<CoreEduTrainingPlanToRole> trainingPlanToRoleList = batchSavePlanToRole(request.getPlanRoleId(), plan.getId());
+        //List<CoreEduTrainingPlanToRole> trainingPlanToRoleList = batchSavePlanToRole(request.getPlanRoleId(), plan.getId());
         coreEduTrainingPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
         batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
         final int i = coreEduTrainingPlanMapper.updateById(plan);
         if (plan.getStandard() == 1) {
             //如果标准计划可以修改,那么需要删除所有计划与任务,重新创建计划任务
-            updateStandardPlan(plan, trainingPlanToRoleList);
+            updateStandardPlan(plan, null);//移除角色属性
         } else {
             //普通计划
             updateCommonPlan(plan);
@@ -268,8 +271,29 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             return;
         }
         Long planId = plan.getId();
+        deletePlanAndTaskByParentPlanId(planId);
+        List<CoreEduTrainingPlan> planList = buildPlanData(plan, trainingPlanToRoleList, false);
+
+        if (plan.getPlanStatus() == EduTrainingPlanStatus.DELETED.getCode()) {
+            log.info("计划已被修改为" + EduTrainingPlanStatus.DELETED.getDesc() + ",不再生成任务!");
+            return;
+        }
+
+        for (CoreEduTrainingPlan trainingPlan : planList) {
+            CoreEduTrainingPlanDataVo dataVo = getCoreEduTrainingPlanDataVo(trainingPlan.getId());
+            CompletableFuture.runAsync(() -> {
+                //说明有任务并且都没执行过,需要重新生成任务
+                coreEduTrainingTaskService.createTaskForNow(dataVo, plan.getStartDate(), plan.getEndDate());
+            }, threadPoolTaskExecutor);
+        }
+    }
+
+    private void deletePlanAndTaskByParentPlanId(Long planId) {
         //删除原有数据, 然后重新生成计划,任务
         List<Long> planIdList = coreEduTrainingPlanMapper.selectAllIdByParentId(planId);
+        if (ObjectUtil.isEmpty(planIdList)) {
+            return;
+        }
         if (ObjectUtil.isNotEmpty(planIdList)) {
             coreEduTrainingPlanMapper.deleteBatchIds(planIdList);
             coreEduTrainingPlanToExecOrgMapper.delete(new LambdaQueryWrapper<CoreEduTrainingPlanToExecOrg>().in(CoreEduTrainingPlanToExecOrg::getPlanId, planIdList));
@@ -282,20 +306,6 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             coreEduTrainingTaskToRoleMapper.delete(new LambdaQueryWrapper<CoreEduTrainingTaskToRole>().in(CoreEduTrainingTaskToRole::getEduTrainingTaskId, collect));
 
         }
-        List<CoreEduTrainingPlan> planList = buildPlanData(plan, trainingPlanToRoleList);
-
-        if (plan.getPlanStatus() == 1) {
-            log.info("计划已被修改为禁用,不再生成任务!");
-            return;
-        }
-
-        for (CoreEduTrainingPlan trainingPlan : planList) {
-            CoreEduTrainingPlanDataVo dataVo = getCoreEduTrainingPlanDataVo(trainingPlan.getId());
-            CompletableFuture.runAsync(() -> {
-                //说明有任务并且都没执行过,需要重新生成任务
-                coreEduTrainingTaskService.createTaskForNow(dataVo, plan.getStartDate(), plan.getEndDate());
-            },threadPoolTaskExecutor);
-        }
     }
 
     private void updateCommonPlan(CoreEduTrainingPlan plan) {
@@ -311,18 +321,19 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             //TODO 考虑是否同步修改已生成的任务的名称
             return;
         }
-        if (plan.getPlanStatus() == 1) {
-            log.info("计划已被修改为禁用,不再生成任务!");
+        if (plan.getPlanStatus() == EduTrainingPlanStatus.DELETED.getCode()) {
+            log.info("计划已被修改为" + EduTrainingPlanStatus.DELETED.getDesc() + ",不再生成任务!");
             return;
         }
         //此为情况一,计划没有生成任务或者生成了任务但未执行
         final CoreEduTrainingPlanDataVo dataVo = getCoreEduTrainingPlanDataVo(plan.getId());
         if (ObjectUtil.equal(1, plan.getBuildTaskNow()) && ObjectUtil.equal(0, plan.getPlanStatus())) {
             coreEduTrainingTaskMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
+            coreEduTrainingTaskToRoleMapper.delete(new LambdaQueryWrapper<CoreEduTrainingTaskToRole>().eq(CoreEduTrainingTaskToRole::getEduTrainingTaskId, plan.getId()));
             CompletableFuture.runAsync(() -> {
                 //说明有任务并且都没执行过,需要重新生成任务
                 coreEduTrainingTaskService.createTaskForNow(dataVo, plan.getStartDate(), plan.getEndDate());
-            },threadPoolTaskExecutor);
+            }, threadPoolTaskExecutor);
         }
     }
 
@@ -375,12 +386,12 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
 
     private void validateRoleAndOrgForStandard(CoreEduTrainingPlanEditDto request, CoreEduTrainingPlan plan) {
         // 执行角色
-        List<Long> roleIdLit = coreEduTrainingPlanToRoleMapper.selectRoleIdByPlanId(plan.getId());
+       /* List<Long> roleIdLit = coreEduTrainingPlanToRoleMapper.selectRoleIdByPlanId(plan.getId());
         List<Long> planRoleId = request.getPlanRoleId();
         if (ObjectUtil.isEmpty(planRoleId)) {
             throw new RuntimeException("下发计划仅允许修改培训次数!");
         }
-        validateListForStandard(roleIdLit, planRoleId, "下发计划仅允许修改培训次数!");
+        validateListForStandard(roleIdLit, planRoleId, "下发计划仅允许修改培训次数!");*/
 
         // 执行机构
         List<Long> execOrgIdList = coreEduTrainingPlanToExecOrgMapper.selectOrgIdByPlanId(plan.getId());
@@ -420,62 +431,6 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         return planList.size() == requestList.size() && planList.containsAll(requestList);
     }
 
-    /*private Boolean checkCanUpdate(CoreEduTrainingPlanEditDto request, CoreEduTrainingPlan plan) {
-        if (ObjectUtil.isAllEmpty(request.getExecOrgType(), request.getPlanExecOrgIdList())) {
-            throw new RuntimeException("培训机构类型和执行机构不能同时为空!");
-        }
-        //如果是下发的计划,执行频次不应低于省联社下发时设定的次数
-        if (ObjectUtil.equal(plan.getStandard(), 0) && request.getExecTimes() < plan.getExecTimes()) {
-            throw new RuntimeException("执行次数不应低于基准次数!");
-        }
-        final Long planId = plan.getId();
-        boolean flag = true;
-        //判断计划是否有任务已经执行过
-        final Integer done = coreEduTrainingTaskMapper.checkHasTaskIsDone(Arrays.asList(planId));
-        //判断标准计划能否修改:存在下发的计划生成了任务且任务存在已执行
-        Integer standardPlanHasDone = coreEduTrainingTaskMapper.checkHasTaskIsDoneByPlanParentId(planId);
-        if (standardPlanHasDone != null) {
-            throw new RuntimeException("该计划下存在任务已执行的情况,无法修改!");
-        }
-        //计划状态
-        if (ObjectUtil.notEqual(request.getPlanStatus(), plan.getPlanStatus())) {
-            flag = false;
-        }
-        //计划周期
-        if (ObjectUtil.notEqual(request.getPlanCycle(), plan.getPlanCycle())) {
-            flag = false;
-        }
-        //执行机构类型
-        if (ObjectUtil.notEqual(request.getExecOrgType(), plan.getExecOrgType())) {
-            flag = false;
-        }
-        //执行角色
-        List<Long> roleIdLit = coreEduTrainingPlanToRoleMapper.selectRoleIdByPlanId(planId);
-        List<Long> planRoleId = request.getPlanRoleId();
-        if (ObjectUtil.isEmpty(planRoleId)) {
-            flag = false;
-        }
-        for (Long roleId : roleIdLit) {
-            if (!planRoleId.contains(roleId)) {
-                flag = false;
-                break;
-            }
-        }
-        //执行机构
-        List<Long> execOrgIdList = coreEduTrainingPlanToExecOrgMapper.selectOrgIdByPlanId(planId);
-        final List<Long> planExecOrgIdList = request.getPlanExecOrgIdList();
-        if (execOrgIdList.size() != planExecOrgIdList.size()) {
-            flag = false;
-        }
-        for (Long orgId : execOrgIdList) {
-            if (!planExecOrgIdList.contains(orgId)) {
-                flag = false;
-                break;
-            }
-        }
-        return null == done || flag;
-    }*/
-
     @Override
     public CoreEduTrainingPlanDataVo getCoreEduTrainingPlanDataVo(Long id) {
         final CoreEduTrainingPlanDataVo dataVo = coreEduTrainingPlanMapper.getDetailPlanData(id);
@@ -624,8 +579,9 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         }
         // 下发 按钮显示逻辑:仅省联社安全保卫管理人员进入且由省联社管理安全保卫人员创建的计划才显示
         //todo 判断当前人的角色信息
-        List<CoreEduTrainingPlan> list = buildPlanData(plan, new ArrayList<>());
-
+        List<CoreEduTrainingPlan> list = buildPlanData(plan, new ArrayList<>(), true);
+        //下发后修改为使用中
+        plan.setPlanStatus(EduTrainingPlanStatus.USING.getCode());
         plan.setIssue(1);
         this.updateById(plan);
         //事务提交后执行
@@ -635,24 +591,25 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                 for (CoreEduTrainingPlan trainingPlan : list) {
                     CompletableFuture.runAsync(() -> {
                         //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
-                        if ((ObjectUtil.equal(0, plan.getPlanStatus()) && (ObjectUtil.equal(0, plan.getPlanCycle()) || ObjectUtil.equal(1, plan.getBuildTaskNow())))) {
+                        if ((ObjectUtil.equal(EduTrainingPlanStatus.USING.getCode(), plan.getPlanStatus())
+                                && (ObjectUtil.equal(0, plan.getPlanCycle()) || ObjectUtil.equal(1, plan.getBuildTaskNow())))) {
                             CoreEduTrainingPlanDataVo detailPlanData = getCoreEduTrainingPlanDataVo(trainingPlan.getId());
                             coreEduTrainingTaskService.createTaskForNow(detailPlanData, plan.getStartDate(), plan.getEndDate());
                         }
-                    },threadPoolTaskExecutor);
+                    }, threadPoolTaskExecutor);
                 }
             }
         });
 
     }
 
-    private List<CoreEduTrainingPlan> buildPlanData(CoreEduTrainingPlan plan, List<CoreEduTrainingPlanToRole> planRoleList) {
-        if (ObjectUtil.isEmpty(planRoleList)) {
+    private List<CoreEduTrainingPlan> buildPlanData(CoreEduTrainingPlan plan, List<CoreEduTrainingPlanToRole> planRoleList, Boolean isPublish) {
+        /*if (ObjectUtil.isEmpty(planRoleList)) {
             //获取执行角色
             LambdaQueryWrapper<CoreEduTrainingPlanToRole> ros = new LambdaQueryWrapper<>();
             ros.eq(CoreEduTrainingPlanToRole::getPlanId, plan.getId());
             planRoleList = coreEduTrainingPlanToRoleMapper.selectList(ros);
-        }
+        }*/
         //获取计划具体执行机构
         final List<SysOrg> planExecOrgList = this.getPlanExecOrg(plan);
 
@@ -678,6 +635,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
             coreEduTrainingPlan.setBelongOrgPath(sysOrg.getPath());
             coreEduTrainingPlan.setStandard(0);
             coreEduTrainingPlan.setIssue(0);
+            coreEduTrainingPlan.setPlanStatus(isPublish ? EduTrainingPlanStatus.USING.getCode() : EduTrainingPlanStatus.DELETED.getCode());
             coreEduTrainingPlan.setParentId(plan.getId());
             coreEduTrainingPlan.setCreateTime(new Date());
             coreEduTrainingPlan.setUpdateTime(new Date());
@@ -695,7 +653,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         if (planToExecOrgs.size() > 0) {
             coreEduTrainingPlanToExecOrgService.saveBatch(planToExecOrgs);
         }
-        List<CoreEduTrainingPlanToRole> insertPlanRoleList = new ArrayList<>();
+       /* List<CoreEduTrainingPlanToRole> insertPlanRoleList = new ArrayList<>();
         for (CoreEduTrainingPlan coreEduTrainingPlan : list) {
             //保存执行角色
             for (CoreEduTrainingPlanToRole planRole : planRoleList) {
@@ -705,16 +663,29 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                 insertPlanRoleList.add(role);
             }
         }
-        if (list.size() > 0) {
-            this.saveBatch(list);
-        }
         if (insertPlanRoleList.size() > 0) {
             coreEduTrainingPlanToRoleService.saveBatch(insertPlanRoleList);
+        }*/
+        if (list.size() > 0) {
+            this.saveBatch(list);
         }
 
+
         return list;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Integer revocationPlan(Long planId) {
+        CoreEduTrainingPlan plan = getById(planId);
+        //仅标准计划存在撤回的情况
+        Integer hasDoneTask = coreEduTrainingTaskMapper.checkHasTask(planId);
+        AssertUtil.notEqual(hasDoneTask, 1, "计划已有任务执行,无法撤销");
+        deletePlanAndTaskByParentPlanId(planId);
+        plan.setIssue(0);
+        plan.setPlanStatus(EduTrainingPlanStatus.DELETED.getCode());
+        return coreEduTrainingPlanMapper.updateById(plan);
+    }
 
     @Override
     public List<IdName<String, String>> planList(Long orgId) {
@@ -746,7 +717,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                 .eq(CoreEduTrainingPlan::getStandard, standard)
                 .eq(CoreEduTrainingPlan::getIssue, issue)
                 .eq(CoreEduTrainingPlan::getDeleted, 0)
-                .eq(CoreEduTrainingPlan::getPlanStatus, 0)
+                .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
                 .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanName)
         );
     }

+ 8 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java

@@ -26,6 +26,7 @@ import com.xunmei.common.core.domain.panel.enums.PanelTypeEnums;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.enums.ExportPdfType;
 import com.xunmei.common.core.enums.edu.EduTrainingDoStatus;
+import com.xunmei.common.core.enums.edu.EduTrainingPlanStatus;
 import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.web.domain.AjaxResult;
@@ -451,6 +452,11 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         List<CoreEduTrainingTaskReportVo> result = new ArrayList<>();
         List<CoreEduTrainingTaskReportVo> list = coreEduTrainingTaskMapper.selectReport(request, planId, planIdList);
 
+        buildResultData(sysOrgList, result, list);
+        return result;
+    }
+
+    private  void buildResultData(List<SysOrg> sysOrgList, List<CoreEduTrainingTaskReportVo> result, List<CoreEduTrainingTaskReportVo> list) {
         if (list.size() == 1 && list.get(0).getOrgId() == null) {
             //走到这 说明mapper没有查到数据 构建空数据返回
             for (SysOrg org : sysOrgList) {
@@ -480,7 +486,6 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
                 result.add(reportVo);
             }
         }
-        return result;
     }
 
     public static String calculatePercent(Integer num1, Integer num2) {
@@ -634,14 +639,14 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         if (null == cycle) {
             planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
                     .eq(CoreEduTrainingPlan::getStandard, 0)
-                    .eq(CoreEduTrainingPlan::getPlanStatus, 0)
+                    .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
                     .in(CoreEduTrainingPlan::getPlanCycle, cycleList)
                     .eq(CoreEduTrainingPlan::getDeleted, 0)
                     .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
         } else {
             planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
                     .eq(CoreEduTrainingPlan::getStandard, 0)
-                    .eq(CoreEduTrainingPlan::getPlanStatus, 0)
+                    .eq(CoreEduTrainingPlan::getPlanStatus, EduTrainingPlanStatus.USING.getCode())
                     .eq(CoreEduTrainingPlan::getPlanCycle, cycle)
                     .eq(CoreEduTrainingPlan::getDeleted, 0)
                     .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));

+ 6 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillPlanMapper.xml

@@ -639,4 +639,10 @@
         where parent_id = #{planId}
           and deleted = 0
     </select>
+
+    <update id="updatePlanStatus">
+        update core_drill_plan
+        set plan_status = #{planStatus}
+        where id = #{planId}
+    </update>
 </mapper>

+ 4 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingPlanMapper.xml

@@ -583,4 +583,8 @@
         where parent_id = #{planId}
           and deleted = 0
     </select>
+
+    <update id="updatePlanStatus">
+        update core_edu_training_plan set plan_status = #{status} where id = #{planId}
+    </update>
 </mapper>