Jelajahi Sumber

预案演练计划代码提交

jingyuanchao 2 tahun lalu
induk
melakukan
740032e89e
22 mengubah file dengan 1982 tambahan dan 0 penghapusan
  1. 200 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/domain/CoreDrillPlan.java
  2. 51 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/domain/CoreDrillPlanToExecOrg.java
  3. 48 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/domain/CoreDrillPlanToRole.java
  4. 60 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/dto/CoreDrillPlanInsertDto.java
  5. 43 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/dto/CoreDrillPlanPageDto.java
  6. 60 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/dto/CoreDrillPlanUpdateDto.java
  7. 8 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/vo/CoreDrillPlanDetailDto.java
  8. 71 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/vo/CoreDrillPlanPageVo.java
  9. 17 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/vo/CoreDrillPlanRoleVo.java
  10. 95 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/controller/CoreDrillPlanController.java
  11. 72 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillPlanMapper.java
  12. 22 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillPlanToExecOrgMapper.java
  13. 24 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillPlanToRoleMapper.java
  14. 74 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/ICoreDrillPlanService.java
  15. 72 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/ICoreDrillPlanToExecOrgService.java
  16. 72 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/ICoreDrillPlanToRoleService.java
  17. 281 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java
  18. 110 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanToExecOrgServiceImpl.java
  19. 109 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanToRoleServiceImpl.java
  20. 449 0
      soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillPlanMapper.xml
  21. 18 0
      soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillPlanToExecOrgMapper.xml
  22. 26 0
      soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillPlanToRoleMapper.xml

+ 200 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/domain/CoreDrillPlan.java

@@ -0,0 +1,200 @@
+package com.xunmei.common.core.domain.drill.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.xunmei.common.core.web.domain.BaseEntity;
+
+/**
+ * 预案演练计划对象 core_drill_plan
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("core_drill_plan")
+@ApiModel(value = "CoreDrillPlan对象" , description = "预案演练计划")
+public class CoreDrillPlan extends BaseEntity
+        {
+private static final long serialVersionUID=1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 计划名称 */
+            @ApiModelProperty(value = "计划名称")
+    private String planName;
+
+    /** 计划周期:0:无周期,4:每季度,4:每半年,6:每年 */
+            @ApiModelProperty(value = "计划周期:0:无周期,4:每季度,4:每半年,6:每年")
+    private Long planCycle;
+
+    /** 演练次数 */
+            @ApiModelProperty(value = "演练次数")
+    private Long execTimes;
+
+    /** 计划状态:0:启用,1禁用 */
+            @ApiModelProperty(value = "计划状态:0:启用,1禁用")
+    private Long planStatus;
+
+    /** 执行机构类型 */
+            @ApiModelProperty(value = "执行机构类型")
+    private Long execOrgType;
+
+    /** 开始日期 */
+            @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+            @ApiModelProperty(value = "开始日期")
+    private Date planStartDate;
+
+    /** 结束日期 */
+            @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+            @ApiModelProperty(value = "结束日期")
+    private Date planEndDate;
+
+    /** 立即生成任务 */
+            @ApiModelProperty(value = "立即生成任务")
+    private Integer buildTaskNow;
+
+    /** 计划创建机构id */
+            @ApiModelProperty(value = "计划创建机构id")
+    private Long createOrgId;
+
+    /** 计划创建机构名称 */
+            @ApiModelProperty(value = "计划创建机构名称")
+    private String createOrgName;
+
+    /** 计划创建机构path */
+            @ApiModelProperty(value = "计划创建机构path")
+    private String createOrgPath;
+
+    /** 计划所属机构 */
+            @ApiModelProperty(value = "计划所属机构")
+    private Long belongOrgId;
+
+    /** 计划所属机构名称 */
+            @ApiModelProperty(value = "计划所属机构名称")
+    private String belongOrgName;
+
+    /** 计划所属机构path */
+            @ApiModelProperty(value = "计划所属机构path")
+    private String belongOrgPath;
+
+    /** 是否是标准计划,0:否,1:是 */
+            @ApiModelProperty(value = "是否是标准计划,0:否,1:是")
+    private Integer standard;
+
+    /** 是否已下发,0:否,1:是 */
+            @ApiModelProperty(value = "是否已下发,0:否,1:是")
+    private Integer issue;
+
+    /** 是否是被下发的计划,0:否,1:是 */
+            @ApiModelProperty(value = "是否是被下发的计划,0:否,1:是")
+    private Integer beIssue;
+
+    /** 下发计划id */
+            @ApiModelProperty(value = "下发计划id")
+    private Long parentId;
+
+    /** 文件 */
+            @ApiModelProperty(value = "文件")
+    private String fileList;
+
+    /** 是否删除,0:未删除,1:已删除 */
+            @ApiModelProperty(value = "是否删除,0:未删除,1:已删除")
+    private Integer deleted;
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
+@Override
+public String toString(){
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+
+
+                .append("id" ,getId())
+
+
+                .append("planName" ,getPlanName())
+
+
+                .append("planCycle" ,getPlanCycle())
+
+
+                .append("execTimes" ,getExecTimes())
+
+
+                .append("planStatus" ,getPlanStatus())
+
+
+                .append("execOrgType" ,getExecOrgType())
+
+
+                .append("planStartDate" ,getPlanStartDate())
+
+
+                .append("planEndDate" ,getPlanEndDate())
+
+
+                .append("buildTaskNow" ,getBuildTaskNow())
+
+
+
+
+                .append("createOrgId" ,getCreateOrgId())
+
+
+                .append("createOrgName" ,getCreateOrgName())
+
+
+                .append("createOrgPath" ,getCreateOrgPath())
+
+
+                .append("belongOrgId" ,getBelongOrgId())
+
+
+                .append("belongOrgName" ,getBelongOrgName())
+
+
+                .append("belongOrgPath" ,getBelongOrgPath())
+
+
+                .append("standard" ,getStandard())
+
+
+                .append("issue" ,getIssue())
+
+
+                .append("beIssue" ,getBeIssue())
+
+
+                .append("parentId" ,getParentId())
+
+
+                .append("fileList" ,getFileList())
+
+
+                .append("deleted" ,getDeleted())
+
+
+                .append("createBy" ,getCreateBy())
+
+
+                .append("createTime" ,getCreateTime())
+
+
+                .append("updateBy" ,getUpdateBy())
+
+
+                .append("updateTime" ,getUpdateTime())
+        .toString();
+        }
+        }

+ 51 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/domain/CoreDrillPlanToExecOrg.java

@@ -0,0 +1,51 @@
+package com.xunmei.common.core.domain.drill.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.xunmei.common.core.web.domain.BaseEntity;
+
+/**
+ * 演练计划与执行机构关系对象 core_drill_plan_to_exec_org
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("core_drill_plan_to_exec_org")
+@ApiModel(value = "CoreDrillPlanToExecOrg对象", description = "演练计划与执行机构关系")
+public class CoreDrillPlanToExecOrg extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    @TableField(value = "plan_id")
+    @ApiModelProperty(value = "演练计划id")
+    private Long planId;
+
+    @TableField(value = "org_id")
+    @ApiModelProperty(value = "机构id")
+    private Long orgId;
+
+    @TableField(exist = false)
+    private String orgName;
+
+    @TableField(exist = false)
+    private String orgPath;
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("planId", getPlanId())
+                .append("orgId", getOrgId())
+                .toString();
+    }
+}

+ 48 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/domain/CoreDrillPlanToRole.java

@@ -0,0 +1,48 @@
+package com.xunmei.common.core.domain.drill.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.xunmei.common.core.web.domain.BaseEntity;
+
+/**
+ * 演练计划执行角色关联对象 core_drill_plan_to_role
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("core_drill_plan_to_role")
+@ApiModel(value = "CoreDrillPlanToRole对象", description = "演练计划执行角色关联")
+public class CoreDrillPlanToRole extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+
+    @TableField("plan_id")
+    private Long planId;
+
+    @TableField("role_id")
+    private Long roleId;
+
+    @TableField(exist = false)
+    private String roleName;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("planId", getPlanId())
+                .append("roleId", getRoleId())
+                .toString();
+    }
+}

+ 60 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/dto/CoreDrillPlanInsertDto.java

@@ -0,0 +1,60 @@
+package com.xunmei.common.core.domain.drill.dto;
+
+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;
+
+/**
+ * @author jingyuanchao
+ * @date 2023/9/8 21:20
+ */
+@Data
+public class CoreDrillPlanInsertDto {
+
+
+    @NotBlank(message = "计划名称不能为空")
+    @ApiModelProperty(value = "计划名称")
+    private String planName;
+
+    @NotNull(message = "计划周期不能为空")
+    @ApiModelProperty(value = "计划周期")
+    private Integer planCycle;
+
+    @ApiModelProperty(value = "计划开始时间")
+    private Date startDate;
+    @ApiModelProperty(value = "计划结束时间")
+    private Date endDate;
+    @NotNull(message = "执行次数不能为空")
+    @ApiModelProperty(value = "执行次数")
+    private Integer execTimes;
+
+    @ApiModelProperty(value = "计划状态")
+    private int planStatus;
+
+    @ApiModelProperty(value = "是否立即生效", notes = "0:否,1:是")
+    private Boolean buildTaskNow=Boolean.FALSE;
+
+    @Size(min = 1,message = "计划培训角色")
+    @ApiModelProperty(value = "计划执行角色")
+    private List<Long> planRoleId;
+
+    @ApiModelProperty(value = "培训机构类型")
+    private Integer execOrgType;
+
+    @ApiModelProperty(value = "计划执行角色")
+    private List<Long> planExecOrgIdList;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "计划所属机构")
+    private Long belongOrgId;
+
+    @ApiModelProperty(value = "附件")
+    private List<String> fileList;
+}

+ 43 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/dto/CoreDrillPlanPageDto.java

@@ -0,0 +1,43 @@
+package com.xunmei.common.core.domain.drill.dto;
+
+import com.xunmei.common.core.web.domain.PageRequest;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @author jingyuanchao
+ * @date 2023/9/8 21:20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class CoreDrillPlanPageDto extends PageRequest {
+
+    //页面左侧机构 针对的是培训机构也就是计划所属机构
+
+    @ApiModelProperty(value = "执行机构类型")
+    private Integer execOrgType;
+
+    @ApiModelProperty(value = "计划所属机构(培训机构)")
+    private Long belongOrgId;
+
+    @ApiModelProperty(value = "计划所属机构(培训机构)")
+    private String belongOrgPath;
+
+    @ApiModelProperty(value = "计划周期")
+    private Integer planCycle;
+
+    @ApiModelProperty(value = "计划状态")
+    private Integer planStatus;
+
+    @ApiModelProperty(value = "计划执行角色")
+    private Long planRoleId;
+
+    @ApiModelProperty(value = "计划名称")
+    private String planName;
+
+    @ApiModelProperty(value = "计划id")
+    private Long id;
+}

+ 60 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/dto/CoreDrillPlanUpdateDto.java

@@ -0,0 +1,60 @@
+package com.xunmei.common.core.domain.drill.dto;
+
+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;
+
+/**
+ * @author jingyuanchao
+ * @date 2023/9/8 21:21
+ */
+@Data
+public class CoreDrillPlanUpdateDto {
+    private Long id;
+
+    @NotBlank(message = "计划名称不能为空")
+    @ApiModelProperty(value = "计划名称")
+    private String planName;
+
+    @NotNull(message = "计划周期不能为空")
+    @ApiModelProperty(value = "计划周期")
+    private Integer planCycle;
+
+    @ApiModelProperty(value = "计划开始时间")
+    private Date startDate;
+    @ApiModelProperty(value = "计划结束时间")
+    private Date endDate;
+    @NotNull(message = "执行次数不能为空")
+    @ApiModelProperty(value = "执行次数")
+    private Integer execTimes;
+
+    @ApiModelProperty(value = "计划状态")
+    private int planStatus;
+
+    @ApiModelProperty(value = "是否立即生效", notes = "0:否,1:是")
+    private Boolean buildTaskNow = Boolean.FALSE;
+
+    @Size(min = 1, message = "计划培训角色")
+    @ApiModelProperty(value = "计划执行角色")
+    private List<Long> planRoleId;
+
+    @ApiModelProperty(value = "培训机构类型")
+    private Integer execOrgType;
+
+    @ApiModelProperty(value = "计划执行角色")
+    private List<Long> planExecOrgIdList;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "计划所属机构")
+    private Long belongOrgId;
+
+    @ApiModelProperty(value = "附件")
+    private List<String> fileList;
+}

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

@@ -0,0 +1,8 @@
+package com.xunmei.common.core.domain.drill.vo;
+
+/**
+ * @author jingyuanchao
+ * @date 2023/9/8 21:21
+ */
+public class CoreDrillPlanDetailDto {
+}

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

@@ -0,0 +1,71 @@
+package com.xunmei.common.core.domain.drill.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanPageVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author jingyuanchao
+ * @date 2023/9/8 21:20
+ */
+@Data
+public class CoreDrillPlanPageVo {
+
+    @ApiModelProperty(value = "序号")
+    private Integer no;
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "计划名称")
+    private String planName;
+
+    @ApiModelProperty(value = "计划创建机构")
+    private Long createOrgId;
+
+    @ApiModelProperty(value = "计划创建机构名称")
+    private String createOrgName;
+    @ApiModelProperty(value = "计划所属机构id")
+    private Long belongOrgId;
+    @ApiModelProperty(value = "计划所属机构名称")
+    private String belongOrgName;
+
+    @ApiModelProperty(value = "培训机构类型")
+    private Integer execOrgType;
+
+    @ApiModelProperty(value = "计划周期")
+    private Integer planCycle;
+
+    @ApiModelProperty(value = "执行次数")
+    private Integer execTimes;
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "修改人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "计划状态")
+    private Integer planStatus;
+
+    @ApiModelProperty(value = "是否是标准计划,0:否,1:是", notes = "仅标准计划才存在下发的可能")
+    private Integer standard;
+
+    @ApiModelProperty(value = "是否已下发", notes = "0:否,1:是")
+    private Integer issue;
+
+    @ApiModelProperty(value = "下发计划id", notes = "标准计划此字段为空")
+    private Long parentId;
+
+    @ApiModelProperty(value = "是否由顶级机构创建", notes = "0:否 1:是")
+    private int createByTopOrg;
+
+    private String planRoleNameList;
+
+
+    private List<CoreDrillPlanPageVo> children;
+}

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

@@ -0,0 +1,17 @@
+package com.xunmei.common.core.domain.drill.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author jingyuanchao
+ * @date 2023/8/24 16:41
+ */
+@Data
+public class CoreDrillPlanRoleVo {
+    @ApiModelProperty(value = "演练计划关联角色id")
+    private Long roleId;
+    @ApiModelProperty(value = "演练计划关联角色名称")
+    private String roleName;
+
+}

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

@@ -0,0 +1,95 @@
+package com.xunmei.core.drill.controller;
+
+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.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;
+
+/**
+ * 预案演练计划Controller
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+@Api(tags = {"CoreDrillPlan" })
+@RestController
+@RequestMapping("/drillPlan")
+public class CoreDrillPlanController extends BaseController {
+    @Autowired
+    private ICoreDrillPlanService coreDrillPlanService;
+
+/**
+ * 查询预案演练计划列表
+ */
+@ApiOperation(value = "查询CoreDrillPlan列表")
+@RequiresPermissions("core:drillPlan:list")
+@GetMapping("/list")
+    public TableDataInfo<CoreDrillPlanPageVo> list(CoreDrillPlanPageDto coreDrillPlan) {
+
+        return coreDrillPlanService.selectPage( coreDrillPlan);
+    }
+
+
+
+    /**
+     * 获取预案演练计划详细信息
+     */
+    @ApiOperation(value = "获取CoreDrillPlan详细信息")
+    @RequiresPermissions("core:drillPlan:query")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(coreDrillPlanService.selectCoreDrillPlanById(id));
+    }
+
+    /**
+     * 新增预案演练计划
+     */
+    @ApiOperation(value = "新增CoreDrillPlan")
+    @RequiresPermissions("core:drillPlan:add")
+    @Log(title = "预案演练计划" , businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody CoreDrillPlan coreDrillPlan) {
+        return toAjax(coreDrillPlanService.insertCoreDrillPlan(coreDrillPlan));
+    }
+
+    /**
+     * 修改预案演练计划
+     */
+    @ApiOperation(value = "修改CoreDrillPlan")
+    @RequiresPermissions("core:drillPlan:edit")
+    @Log(title = "预案演练计划" , businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody @Validated CoreDrillPlanUpdateDto coreDrillPlan) {
+        return toAjax(coreDrillPlanService.updateCoreDrillPlan(coreDrillPlan));
+    }
+
+    /**
+     * 删除预案演练计划
+     */
+    @ApiOperation(value = "删除CoreDrillPlan")
+    @RequiresPermissions("core:drillPlan:remove")
+    @Log(title = "预案演练计划" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(coreDrillPlanService.deleteCoreDrillPlanByIds(ids));
+    }
+}

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

@@ -0,0 +1,72 @@
+package com.xunmei.core.drill.mapper;
+
+import java.util.List;
+
+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.CoreDrillPlanPageVo;
+import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanPageDto;
+import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanPageVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 预案演练计划Mapper接口
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+public interface CoreDrillPlanMapper extends BaseMapper<CoreDrillPlan> {
+    /**
+     * 查询预案演练计划
+     *
+     * @param id 预案演练计划主键
+     * @return 预案演练计划
+     */
+    CoreDrillPlan selectCoreDrillPlanById(Long id);
+
+    /**
+     * 查询预案演练计划列表
+     *
+     * @param coreDrillPlan 预案演练计划
+     * @return 预案演练计划集合
+     */
+    List<CoreDrillPlan> selectCoreDrillPlanList(CoreDrillPlan coreDrillPlan);
+
+    /**
+     * 新增预案演练计划
+     *
+     * @param coreDrillPlan 预案演练计划
+     * @return 结果
+     */
+    int insertCoreDrillPlan(CoreDrillPlan coreDrillPlan);
+
+    /**
+     * 修改预案演练计划
+     *
+     * @param coreDrillPlan 预案演练计划
+     * @return 结果
+     */
+    int updateCoreDrillPlan(CoreDrillPlan coreDrillPlan);
+
+    /**
+     * 删除预案演练计划
+     *
+     * @param id 预案演练计划主键
+     * @return 结果
+     */
+    int deleteCoreDrillPlanById(Long id);
+
+    /**
+     * 批量删除预案演练计划
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteCoreDrillPlanByIds(Long[] ids);
+
+    Page<CoreDrillPlanPageVo> selectPageData(Page<CoreDrillPlanPageVo> pageRequest, @Param("request") CoreDrillPlanPageDto request);
+
+    List<CoreDrillPlanPageVo> selectChildrenPlan(@Param("request") CoreDrillPlanPageDto request);
+}

+ 22 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillPlanToExecOrgMapper.java

@@ -0,0 +1,22 @@
+package com.xunmei.core.drill.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlanToExecOrg;
+import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlanToExecOrg;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 演练计划与执行机构关系Mapper接口
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+public interface CoreDrillPlanToExecOrgMapper extends BaseMapper<CoreDrillPlanToExecOrg> {
+    List<CoreDrillPlanToExecOrg> selectLisByPlanId(@Param("planId") Long planId);
+
+
+    List<Long> selectOrgIdByPlanId(@Param("planId") Long planId);
+}

+ 24 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillPlanToRoleMapper.java

@@ -0,0 +1,24 @@
+package com.xunmei.core.drill.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlanToRole;
+import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanRoleVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 演练计划执行角色关联Mapper接口
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+public interface CoreDrillPlanToRoleMapper extends BaseMapper<CoreDrillPlanToRole> {
+
+    List<CoreDrillPlanRoleVo> selectRoleNameByPlanId(@Param("planId") Long planId);
+
+    List<CoreDrillPlanToRole> selectListByPlanId(@Param("planId") Long planId);
+
+    List<Long> selectRoleIdByPlanId(@Param("planId") Long planId);
+}

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

@@ -0,0 +1,74 @@
+package com.xunmei.core.drill.service;
+
+import java.util.List;
+
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlan;
+import com.baomidou.mybatisplus.extension.service.IService;
+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 com.xunmei.common.core.web.page.TableDataInfo;
+
+/**
+ * 预案演练计划Service接口
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+public interface ICoreDrillPlanService extends IService<CoreDrillPlan> {
+    /**
+     * 查询预案演练计划
+     *
+     * @param id 预案演练计划主键
+     * @return 预案演练计划
+     */
+     CoreDrillPlan selectCoreDrillPlanById(Long id);
+
+    /**
+     * 查询预案演练计划列表
+     *
+     * @param coreDrillPlan 预案演练计划
+     * @return 预案演练计划集合
+     */
+    List<CoreDrillPlan> selectCoreDrillPlanList(CoreDrillPlan coreDrillPlan);
+
+    /**
+     * 新增预案演练计划
+     *
+     * @param coreDrillPlan 预案演练计划
+     * @return 结果
+     */
+    int insertCoreDrillPlan(CoreDrillPlan coreDrillPlan);
+
+    /**
+     * 修改预案演练计划
+     *
+     * @param coreDrillPlan 预案演练计划
+     * @return 结果
+     */
+    int updateCoreDrillPlan(CoreDrillPlanUpdateDto coreDrillPlan);
+
+    /**
+     * 批量删除预案演练计划
+     *
+     * @param ids 需要删除的预案演练计划主键集合
+     * @return 结果
+     */
+    int deleteCoreDrillPlanByIds(Long[] ids);
+
+    /**
+     * 删除预案演练计划信息
+     *
+     * @param id 预案演练计划主键
+     * @return 结果
+     */
+    int deleteCoreDrillPlanById(Long id);
+
+    /**
+     * 查询预案演练计划分页数据
+     *
+     * @param coreDrillPlan 查询条件对象
+     * @return Page
+     */
+    TableDataInfo<CoreDrillPlanPageVo> selectPage(CoreDrillPlanPageDto coreDrillPlan);
+}

+ 72 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/ICoreDrillPlanToExecOrgService.java

@@ -0,0 +1,72 @@
+package com.xunmei.core.drill.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlanToExecOrg;
+
+import java.util.List;
+
+/**
+ * 演练计划与执行机构关系Service接口
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+public interface ICoreDrillPlanToExecOrgService extends IService<CoreDrillPlanToExecOrg> {
+    /**
+     * 查询演练计划与执行机构关系
+     *
+     * @param planId 演练计划与执行机构关系主键
+     * @return 演练计划与执行机构关系
+     */
+     CoreDrillPlanToExecOrg selectCoreDrillPlanToExecOrgByPlanId(Long planId);
+
+    /**
+     * 查询演练计划与执行机构关系列表
+     *
+     * @param coreDrillPlanToExecOrg 演练计划与执行机构关系
+     * @return 演练计划与执行机构关系集合
+     */
+    List<CoreDrillPlanToExecOrg> selectCoreDrillPlanToExecOrgList(CoreDrillPlanToExecOrg coreDrillPlanToExecOrg);
+
+    /**
+     * 新增演练计划与执行机构关系
+     *
+     * @param coreDrillPlanToExecOrg 演练计划与执行机构关系
+     * @return 结果
+     */
+    int insertCoreDrillPlanToExecOrg(CoreDrillPlanToExecOrg coreDrillPlanToExecOrg);
+
+    /**
+     * 修改演练计划与执行机构关系
+     *
+     * @param coreDrillPlanToExecOrg 演练计划与执行机构关系
+     * @return 结果
+     */
+    int updateCoreDrillPlanToExecOrg(CoreDrillPlanToExecOrg coreDrillPlanToExecOrg);
+
+    /**
+     * 批量删除演练计划与执行机构关系
+     *
+     * @param planIds 需要删除的演练计划与执行机构关系主键集合
+     * @return 结果
+     */
+    int deleteCoreDrillPlanToExecOrgByPlanIds(Long[] planIds);
+
+    /**
+     * 删除演练计划与执行机构关系信息
+     *
+     * @param planId 演练计划与执行机构关系主键
+     * @return 结果
+     */
+    int deleteCoreDrillPlanToExecOrgByPlanId(Long planId);
+
+    /**
+     * 查询演练计划与执行机构关系分页数据
+     *
+     * @param coreDrillPlanToExecOrg 查询条件对象
+     * @return Page
+     */
+    TableDataInfo<CoreDrillPlanToExecOrg> selectPage(CoreDrillPlanToExecOrg coreDrillPlanToExecOrg);
+}

+ 72 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/ICoreDrillPlanToRoleService.java

@@ -0,0 +1,72 @@
+package com.xunmei.core.drill.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlanToRole;
+import com.xunmei.common.core.web.page.TableDataInfo;
+
+import java.util.List;
+
+/**
+ * 演练计划执行角色关联Service接口
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+public interface ICoreDrillPlanToRoleService extends IService<CoreDrillPlanToRole> {
+    /**
+     * 查询演练计划执行角色关联
+     *
+     * @param planId 演练计划执行角色关联主键
+     * @return 演练计划执行角色关联
+     */
+     CoreDrillPlanToRole selectCoreDrillPlanToRoleByPlanId(Long planId);
+
+    /**
+     * 查询演练计划执行角色关联列表
+     *
+     * @param coreDrillPlanToRole 演练计划执行角色关联
+     * @return 演练计划执行角色关联集合
+     */
+    List<CoreDrillPlanToRole> selectCoreDrillPlanToRoleList(CoreDrillPlanToRole coreDrillPlanToRole);
+
+    /**
+     * 新增演练计划执行角色关联
+     *
+     * @param coreDrillPlanToRole 演练计划执行角色关联
+     * @return 结果
+     */
+    int insertCoreDrillPlanToRole(CoreDrillPlanToRole coreDrillPlanToRole);
+
+    /**
+     * 修改演练计划执行角色关联
+     *
+     * @param coreDrillPlanToRole 演练计划执行角色关联
+     * @return 结果
+     */
+    int updateCoreDrillPlanToRole(CoreDrillPlanToRole coreDrillPlanToRole);
+
+    /**
+     * 批量删除演练计划执行角色关联
+     *
+     * @param planIds 需要删除的演练计划执行角色关联主键集合
+     * @return 结果
+     */
+    int deleteCoreDrillPlanToRoleByPlanIds(Long[] planIds);
+
+    /**
+     * 删除演练计划执行角色关联信息
+     *
+     * @param planId 演练计划执行角色关联主键
+     * @return 结果
+     */
+    int deleteCoreDrillPlanToRoleByPlanId(Long planId);
+
+    /**
+     * 查询演练计划执行角色关联分页数据
+     *
+     * @param coreDrillPlanToRole 查询条件对象
+     * @return Page
+     */
+    TableDataInfo<CoreDrillPlanToRole> selectPage(CoreDrillPlanToRole coreDrillPlanToRole);
+}

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

@@ -0,0 +1,281 @@
+package com.xunmei.core.drill.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson2.JSON;
+import com.xunmei.common.core.constant.ErrorMsgConstants;
+import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlanToExecOrg;
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlanToRole;
+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 com.xunmei.common.core.domain.drill.vo.CoreDrillPlanRoleVo;
+import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan;
+import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlanToExecOrg;
+import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlanToRole;
+import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanEditDto;
+import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanPageDto;
+import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanPageVo;
+import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanRoleVo;
+import com.xunmei.common.core.utils.DateUtils;
+import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.core.drill.mapper.CoreDrillPlanToExecOrgMapper;
+import com.xunmei.core.drill.mapper.CoreDrillPlanToRoleMapper;
+import com.xunmei.core.drill.service.ICoreDrillPlanToExecOrgService;
+import com.xunmei.core.drill.service.ICoreDrillPlanToRoleService;
+import com.xunmei.system.api.RemoteOrgService;
+import com.xunmei.system.api.domain.SysOrg;
+import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.core.drill.mapper.CoreDrillPlanMapper;
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlan;
+import com.xunmei.core.drill.service.ICoreDrillPlanService;
+
+/**
+ * 预案演练计划Service业务层处理
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+@Service
+public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, CoreDrillPlan> implements ICoreDrillPlanService {
+    @Autowired
+    private CoreDrillPlanMapper coreDrillPlanMapper;
+    @Autowired
+    private CoreDrillPlanToRoleMapper coreDrillPlanToRoleMapper;
+    @Autowired
+    private ICoreDrillPlanToRoleService coreDrillPlanToRoleService;
+    @Autowired
+    private ICoreDrillPlanToExecOrgService coreDrillPlanToExecOrgService;
+    @Autowired
+    private CoreDrillPlanToExecOrgMapper coreDrillPlanToExecOrgMapper;
+    @Autowired
+    private RemoteOrgService orgService;
+
+    @Override
+    public TableDataInfo<CoreDrillPlanPageVo> selectPage(CoreDrillPlanPageDto request) {
+        //下穿
+        if (request.getCheckSub()) {
+            SysOrg r = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgById(request.getBelongOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
+            request.setBelongOrgPath(r.getPath());
+        }
+
+        Page<CoreDrillPlanPageVo> page = coreDrillPlanMapper.selectPageData(request.getPageRequest(), request);
+        for (CoreDrillPlanPageVo record : page.getRecords()) {
+            dealData(record, page.getRecords(), request.getOrgId(), request);
+        }
+        //抓换为TableDataInfo适配前端
+        return TableDataInfo.build();
+    }
+
+    private void dealData(CoreDrillPlanPageVo record, List<CoreDrillPlanPageVo> records, Long orgId, CoreDrillPlanPageDto request) {
+        record.setNo(records.indexOf(record) + 1);
+        if (ObjectUtil.equal(record.getCreateOrgId(), orgId)) {
+            record.setCreateByTopOrg(1);
+        }
+        String roleNameList = coreDrillPlanToRoleMapper.selectRoleNameByPlanId(record.getId()).stream().map(CoreDrillPlanRoleVo::getRoleName).collect(Collectors.joining(","));
+        record.setPlanRoleNameList(roleNameList);
+        request.setId(record.getId());
+        List<CoreDrillPlanPageVo> children = coreDrillPlanMapper.selectChildrenPlan(request);
+        record.setChildren(children);
+        for (CoreDrillPlanPageVo child : children) {
+            if (ObjectUtil.equal(child.getCreateOrgId(), orgId)) {
+                child.setCreateByTopOrg(1);
+            }
+            child.setPlanRoleNameList(roleNameList);
+        }
+    }
+
+    /**
+     * 查询预案演练计划
+     *
+     * @param id 预案演练计划主键
+     * @return 预案演练计划
+     */
+    @Override
+    public CoreDrillPlan selectCoreDrillPlanById(Long id) {
+        return coreDrillPlanMapper.selectById(id);
+    }
+
+    /**
+     * 查询预案演练计划列表
+     *
+     * @param coreDrillPlan 预案演练计划
+     * @return 预案演练计划
+     */
+    @Override
+    public List<CoreDrillPlan> selectCoreDrillPlanList(CoreDrillPlan coreDrillPlan) {
+        return coreDrillPlanMapper.selectList(new QueryWrapper<>(coreDrillPlan));
+    }
+
+    /**
+     * 新增预案演练计划
+     *
+     * @param coreDrillPlan 预案演练计划
+     * @return 结果
+     */
+    @Override
+    public int insertCoreDrillPlan(CoreDrillPlan coreDrillPlan) {
+        coreDrillPlan.setCreateTime(DateUtils.getNowDate());
+        return coreDrillPlanMapper.insert(coreDrillPlan);
+    }
+
+    /**
+     * 修改预案演练计划
+     *
+     * @param coreDrillPlan 预案演练计划
+     * @return 结果
+     */
+    @Override
+    public int updateCoreDrillPlan(CoreDrillPlanUpdateDto request) {
+        final CoreDrillPlan plan = getById(request.getId());
+        //此处判断能否修改,如果可以 需要删除任务,且还需要判断是否需要生成任务
+        Boolean can = checkCanUpdate(request, plan);
+        if (!can) {
+            throw new RuntimeException("当前任务已生成且存在已执行情况,无法修改培训机构类型,具体培训机构,培训角色,培训周期等信息!");
+        }
+        //可以修改计划
+        BeanUtils.copyProperties(request, plan);
+        plan.setUpdateTime(DateUtils.getNowDate());
+        plan.setFileList(ObjectUtil.isNotEmpty(request.getFileList()) ? JSON.toJSONString(request.getFileList()) : null);
+        plan.setUpdateBy(SecurityUtils.getLoginUser().getSysUser().getId().toString());
+        coreDrillPlanToRoleMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
+        coreDrillPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
+        List<CoreDrillPlanToRole> trainingPlanToRoleList = batchSavePlanToRole(request.getPlanRoleId(), plan.getId());
+        List<CoreDrillPlanToExecOrg> trainingPlanToExecOrgList = batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
+        final int i = coreDrillPlanMapper.updateById(plan);
+        if (plan.getStandard() == 1) {
+            //如果标准计划可以修改,那么需要删除所有计划与任务,重新创建计划任务
+            //    updateStandardPlan(plan, trainingPlanToRoleList, trainingPlanToExecOrgList);
+        } else {
+            //普通计划
+            // updateCommonPlan(plan);
+        }
+
+
+        return i;
+    }
+
+    private Boolean checkCanUpdate(CoreDrillPlanUpdateDto request, CoreDrillPlan 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;
+        //判断计划是否有任务已经执行过
+        // TODO
+        //final Integer done = coreEduTrainingTaskMapper.checkHasTaskIsDone(Arrays.asList(planId));
+        final Integer done = 1;
+        //判断标准计划能否修改:存在下发的计划生成了任务且任务存在已执行
+        Integer standardPlanHasDone = 1;
+        //Integer standardPlanHasDone = coreEduTrainingTaskMapper.checkHasTaskIsDoneByPlanParentId(planId);
+        if (standardPlanHasDone != null) {
+            throw new RuntimeException("该计划下存在任务已执行的情况,无法修改!");
+        }
+        //计划周期
+        if (ObjectUtil.notEqual(request.getPlanCycle(), plan.getPlanCycle())) {
+            flag = false;
+        }
+        //执行机构类型
+        if (ObjectUtil.notEqual(request.getExecOrgType(), plan.getExecOrgType())) {
+            flag = false;
+        }
+        //执行角色
+        List<Long> roleIdLit = coreDrillPlanToRoleMapper.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 = coreDrillPlanToExecOrgMapper.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;
+    }
+
+    public List<CoreDrillPlanToRole> batchSavePlanToRole(List<Long> roleIdList, Long planId) {
+        List<CoreDrillPlanToRole> planRoleList = new ArrayList<>();
+        for (Long roleId : roleIdList) {
+            CoreDrillPlanToRole role = new CoreDrillPlanToRole();
+            role.setRoleId(roleId);
+            role.setPlanId(planId);
+            planRoleList.add(role);
+        }
+        if (CollectionUtil.isNotEmpty(planRoleList)) {
+            coreDrillPlanToRoleService.saveBatch(planRoleList);
+        }
+        return planRoleList;
+    }
+
+    public List<CoreDrillPlanToExecOrg> batchSavePlanToExecOrg(List<Long> orgIdList, Long planId) {
+
+        List<CoreDrillPlanToExecOrg> planOrgList = new ArrayList<CoreDrillPlanToExecOrg>();
+        for (Long orgId : orgIdList) {
+            CoreDrillPlanToExecOrg org = new CoreDrillPlanToExecOrg();
+            org.setOrgId(orgId);
+            org.setPlanId(planId);
+            planOrgList.add(org);
+        }
+        if (ObjectUtil.isNotEmpty(planOrgList)) {
+            coreDrillPlanToExecOrgService.saveBatch(planOrgList);
+        }
+
+        return planOrgList;
+    }
+
+    /**
+     * 批量删除预案演练计划
+     *
+     * @param ids 需要删除的预案演练计划主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCoreDrillPlanByIds(Long[] ids) {
+        return coreDrillPlanMapper.deleteBatchIds(Arrays.asList((ids)));
+    }
+
+    /**
+     * 删除预案演练计划信息
+     *
+     * @param id 预案演练计划主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCoreDrillPlanById(Long id) {
+        return coreDrillPlanMapper.deleteById(id);
+    }
+}

+ 110 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanToExecOrgServiceImpl.java

@@ -0,0 +1,110 @@
+package com.xunmei.core.drill.service.impl;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlanToExecOrg;
+import com.xunmei.core.drill.mapper.CoreDrillPlanToExecOrgMapper;
+import com.xunmei.core.drill.service.ICoreDrillPlanToExecOrgService;
+import com.xunmei.system.api.RemoteOrgService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.util.Arrays;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xunmei.common.core.web.page.TableDataInfo;
+
+
+/**
+ * 演练计划与执行机构关系Service业务层处理
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+@Service
+public class CoreDrillPlanToExecOrgServiceImpl extends ServiceImpl<CoreDrillPlanToExecOrgMapper, CoreDrillPlanToExecOrg> implements ICoreDrillPlanToExecOrgService {
+    @Autowired
+    private CoreDrillPlanToExecOrgMapper coreDrillPlanToExecOrgMapper;
+    @Autowired
+    private RemoteOrgService orgService;
+
+    @Override
+    public TableDataInfo<CoreDrillPlanToExecOrg> selectPage(CoreDrillPlanToExecOrg request) {
+
+        Page<CoreDrillPlanToExecOrg> page;
+
+
+        return TableDataInfo.build();
+
+
+
+
+    }
+
+
+    /**
+     * 查询演练计划与执行机构关系
+     *
+     * @param planId 演练计划与执行机构关系主键
+     * @return 演练计划与执行机构关系
+     */
+    @Override
+    public CoreDrillPlanToExecOrg selectCoreDrillPlanToExecOrgByPlanId(Long planId) {
+        return coreDrillPlanToExecOrgMapper.selectById(planId);
+    }
+
+    /**
+     * 查询演练计划与执行机构关系列表
+     *
+     * @param coreDrillPlanToExecOrg 演练计划与执行机构关系
+     * @return 演练计划与执行机构关系
+     */
+    @Override
+    public List<CoreDrillPlanToExecOrg> selectCoreDrillPlanToExecOrgList(CoreDrillPlanToExecOrg coreDrillPlanToExecOrg) {
+        return coreDrillPlanToExecOrgMapper.selectList(new QueryWrapper<>(coreDrillPlanToExecOrg));
+    }
+
+    /**
+     * 新增演练计划与执行机构关系
+     *
+     * @param coreDrillPlanToExecOrg 演练计划与执行机构关系
+     * @return 结果
+     */
+    @Override
+    public int insertCoreDrillPlanToExecOrg(CoreDrillPlanToExecOrg coreDrillPlanToExecOrg) {
+            return coreDrillPlanToExecOrgMapper.insert(coreDrillPlanToExecOrg);
+    }
+
+    /**
+     * 修改演练计划与执行机构关系
+     *
+     * @param coreDrillPlanToExecOrg 演练计划与执行机构关系
+     * @return 结果
+     */
+    @Override
+    public int updateCoreDrillPlanToExecOrg(CoreDrillPlanToExecOrg coreDrillPlanToExecOrg) {
+        return coreDrillPlanToExecOrgMapper.updateById(coreDrillPlanToExecOrg);
+    }
+
+    /**
+     * 批量删除演练计划与执行机构关系
+     *
+     * @param planIds 需要删除的演练计划与执行机构关系主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCoreDrillPlanToExecOrgByPlanIds(Long[] planIds) {
+        return coreDrillPlanToExecOrgMapper.deleteBatchIds(Arrays.asList((planIds)));
+    }
+
+    /**
+     * 删除演练计划与执行机构关系信息
+     *
+     * @param planId 演练计划与执行机构关系主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCoreDrillPlanToExecOrgByPlanId(Long planId) {
+        return coreDrillPlanToExecOrgMapper.deleteById(planId);
+    }
+}

+ 109 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanToRoleServiceImpl.java

@@ -0,0 +1,109 @@
+package com.xunmei.core.drill.service.impl;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.domain.drill.domain.CoreDrillPlanToRole;
+import com.xunmei.core.drill.mapper.CoreDrillPlanToRoleMapper;
+import com.xunmei.core.drill.service.ICoreDrillPlanToRoleService;
+import com.xunmei.system.api.RemoteOrgService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.util.Arrays;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xunmei.common.core.web.page.TableDataInfo;
+
+/**
+ * 演练计划执行角色关联Service业务层处理
+ *
+ * @author xunmei
+ * @date 2023-09-08
+ */
+@Service
+public class CoreDrillPlanToRoleServiceImpl extends ServiceImpl<CoreDrillPlanToRoleMapper, CoreDrillPlanToRole> implements ICoreDrillPlanToRoleService {
+    @Autowired
+    private CoreDrillPlanToRoleMapper coreDrillPlanToRoleMapper;
+    @Autowired
+    private RemoteOrgService orgService;
+
+    @Override
+    public TableDataInfo<CoreDrillPlanToRole> selectPage(CoreDrillPlanToRole coreDrillPlanToRole) {
+
+        //获取数据
+
+        //抓换为TableDataInfo适配前端
+        return TableDataInfo.build();
+
+
+
+
+    }
+
+
+    /**
+     * 查询演练计划执行角色关联
+     *
+     * @param planId 演练计划执行角色关联主键
+     * @return 演练计划执行角色关联
+     */
+    @Override
+    public CoreDrillPlanToRole selectCoreDrillPlanToRoleByPlanId(Long planId) {
+        return coreDrillPlanToRoleMapper.selectById(planId);
+    }
+
+    /**
+     * 查询演练计划执行角色关联列表
+     *
+     * @param coreDrillPlanToRole 演练计划执行角色关联
+     * @return 演练计划执行角色关联
+     */
+    @Override
+    public List<CoreDrillPlanToRole> selectCoreDrillPlanToRoleList(CoreDrillPlanToRole coreDrillPlanToRole) {
+        return coreDrillPlanToRoleMapper.selectList(new QueryWrapper<>(coreDrillPlanToRole));
+    }
+
+    /**
+     * 新增演练计划执行角色关联
+     *
+     * @param coreDrillPlanToRole 演练计划执行角色关联
+     * @return 结果
+     */
+    @Override
+    public int insertCoreDrillPlanToRole(CoreDrillPlanToRole coreDrillPlanToRole) {
+            return coreDrillPlanToRoleMapper.insert(coreDrillPlanToRole);
+    }
+
+    /**
+     * 修改演练计划执行角色关联
+     *
+     * @param coreDrillPlanToRole 演练计划执行角色关联
+     * @return 结果
+     */
+    @Override
+    public int updateCoreDrillPlanToRole(CoreDrillPlanToRole coreDrillPlanToRole) {
+        return coreDrillPlanToRoleMapper.updateById(coreDrillPlanToRole);
+    }
+
+    /**
+     * 批量删除演练计划执行角色关联
+     *
+     * @param planIds 需要删除的演练计划执行角色关联主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCoreDrillPlanToRoleByPlanIds(Long[] planIds) {
+        return coreDrillPlanToRoleMapper.deleteBatchIds(Arrays.asList((planIds)));
+    }
+
+    /**
+     * 删除演练计划执行角色关联信息
+     *
+     * @param planId 演练计划执行角色关联主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCoreDrillPlanToRoleByPlanId(Long planId) {
+        return coreDrillPlanToRoleMapper.deleteById(planId);
+    }
+}

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

@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xunmei.core.drill.mapper.CoreDrillPlanMapper">
+
+    <resultMap type="com.xunmei.common.core.domain.drill.domain.CoreDrillPlan" id="CoreDrillPlanResult">
+                <result property="id" column="id"/>
+                <result property="planName" column="plan_name"/>
+                <result property="planCycle" column="plan_cycle"/>
+                <result property="execTimes" column="exec_times"/>
+                <result property="planStatus" column="plan_status"/>
+                <result property="execOrgType" column="exec_org_type"/>
+                <result property="planStartDate" column="plan_start_date"/>
+                <result property="planEndDate" column="plan_end_date"/>
+                <result property="buildTaskNow" column="build_task_now"/>
+                <result property="createOrgId" column="create_org_id"/>
+                <result property="createOrgName" column="create_org_name"/>
+                <result property="createOrgPath" column="create_org_path"/>
+                <result property="belongOrgId" column="belong_org_id"/>
+                <result property="belongOrgName" column="belong_org_name"/>
+                <result property="belongOrgPath" column="belong_org_path"/>
+                <result property="standard" column="standard"/>
+                <result property="issue" column="issue"/>
+                <result property="beIssue" column="be_issue"/>
+                <result property="parentId" column="parent_id"/>
+                <result property="fileList" column="file_list"/>
+                <result property="deleted" column="deleted"/>
+                <result property="createBy" column="create_by"/>
+                <result property="createTime" column="create_time"/>
+                <result property="updateBy" column="update_by"/>
+                <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <sql id="selectCoreDrillPlanVo">
+        select id, plan_name, plan_cycle, exec_times, plan_status, exec_org_type, plan_start_date, plan_end_date, build_task_now, remark, create_org_id, create_org_name, create_org_path, belong_org_id, belong_org_name, belong_org_path, standard, issue, be_issue, parent_id, file_list, deleted, create_by, create_time, update_by, update_time
+        from core_drill_plan
+    </sql>
+
+    <select id="selectCoreDrillPlanList" parameterType="com.xunmei.common.core.domain.drill.domain.CoreDrillPlan"
+            resultMap="CoreDrillPlanResult">
+        <include refid="selectCoreDrillPlanVo"/>
+        <where>
+                        <if test="planName != null  and planName != ''">
+                            and plan_name like concat('%', #{planName}, '%')
+                        </if>
+                        <if test="planCycle != null ">
+                            and plan_cycle = #{planCycle}
+                        </if>
+                        <if test="execTimes != null ">
+                            and exec_times = #{execTimes}
+                        </if>
+                        <if test="planStatus != null ">
+                            and plan_status = #{planStatus}
+                        </if>
+                        <if test="execOrgType != null ">
+                            and exec_org_type = #{execOrgType}
+                        </if>
+                        <if test="planStartDate != null ">
+                            and plan_start_date = #{planStartDate}
+                        </if>
+                        <if test="planEndDate != null ">
+                            and plan_end_date = #{planEndDate}
+                        </if>
+                        <if test="buildTaskNow != null ">
+                            and build_task_now = #{buildTaskNow}
+                        </if>
+                        <if test="createOrgId != null ">
+                            and create_org_id = #{createOrgId}
+                        </if>
+                        <if test="createOrgName != null  and createOrgName != ''">
+                            and create_org_name like concat('%', #{createOrgName}, '%')
+                        </if>
+                        <if test="createOrgPath != null  and createOrgPath != ''">
+                            and create_org_path = #{createOrgPath}
+                        </if>
+                        <if test="belongOrgId != null ">
+                            and belong_org_id = #{belongOrgId}
+                        </if>
+                        <if test="belongOrgName != null  and belongOrgName != ''">
+                            and belong_org_name like concat('%', #{belongOrgName}, '%')
+                        </if>
+                        <if test="belongOrgPath != null  and belongOrgPath != ''">
+                            and belong_org_path = #{belongOrgPath}
+                        </if>
+                        <if test="standard != null ">
+                            and standard = #{standard}
+                        </if>
+                        <if test="issue != null ">
+                            and issue = #{issue}
+                        </if>
+                        <if test="beIssue != null ">
+                            and be_issue = #{beIssue}
+                        </if>
+                        <if test="parentId != null ">
+                            and parent_id = #{parentId}
+                        </if>
+                        <if test="fileList != null  and fileList != ''">
+                            and file_list = #{fileList}
+                        </if>
+                        <if test="deleted != null ">
+                            and deleted = #{deleted}
+                        </if>
+        </where>
+    </select>
+
+    <select id="selectCoreDrillPlanById" parameterType="Long"
+            resultMap="CoreDrillPlanResult">
+            <include refid="selectCoreDrillPlanVo"/>
+            where id = #{id}
+    </select>
+
+    <insert id="insertCoreDrillPlan" parameterType="com.xunmei.common.core.domain.drill.domain.CoreDrillPlan" useGeneratedKeys="true" keyProperty="id">
+        insert into core_drill_plan
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+                    <if test="planName != null">plan_name,
+                    </if>
+                    <if test="planCycle != null">plan_cycle,
+                    </if>
+                    <if test="execTimes != null">exec_times,
+                    </if>
+                    <if test="planStatus != null">plan_status,
+                    </if>
+                    <if test="execOrgType != null">exec_org_type,
+                    </if>
+                    <if test="planStartDate != null">plan_start_date,
+                    </if>
+                    <if test="planEndDate != null">plan_end_date,
+                    </if>
+                    <if test="buildTaskNow != null">build_task_now,
+                    </if>
+                    <if test="remark != null">remark,
+                    </if>
+                    <if test="createOrgId != null">create_org_id,
+                    </if>
+                    <if test="createOrgName != null">create_org_name,
+                    </if>
+                    <if test="createOrgPath != null">create_org_path,
+                    </if>
+                    <if test="belongOrgId != null">belong_org_id,
+                    </if>
+                    <if test="belongOrgName != null">belong_org_name,
+                    </if>
+                    <if test="belongOrgPath != null">belong_org_path,
+                    </if>
+                    <if test="standard != null">standard,
+                    </if>
+                    <if test="issue != null">issue,
+                    </if>
+                    <if test="beIssue != null">be_issue,
+                    </if>
+                    <if test="parentId != null">parent_id,
+                    </if>
+                    <if test="fileList != null">file_list,
+                    </if>
+                    <if test="deleted != null">deleted,
+                    </if>
+                    <if test="createBy != null">create_by,
+                    </if>
+                    <if test="createTime != null">create_time,
+                    </if>
+                    <if test="updateBy != null">update_by,
+                    </if>
+                    <if test="updateTime != null">update_time,
+                    </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+                    <if test="planName != null">#{planName},
+                    </if>
+                    <if test="planCycle != null">#{planCycle},
+                    </if>
+                    <if test="execTimes != null">#{execTimes},
+                    </if>
+                    <if test="planStatus != null">#{planStatus},
+                    </if>
+                    <if test="execOrgType != null">#{execOrgType},
+                    </if>
+                    <if test="planStartDate != null">#{planStartDate},
+                    </if>
+                    <if test="planEndDate != null">#{planEndDate},
+                    </if>
+                    <if test="buildTaskNow != null">#{buildTaskNow},
+                    </if>
+                    <if test="remark != null">#{remark},
+                    </if>
+                    <if test="createOrgId != null">#{createOrgId},
+                    </if>
+                    <if test="createOrgName != null">#{createOrgName},
+                    </if>
+                    <if test="createOrgPath != null">#{createOrgPath},
+                    </if>
+                    <if test="belongOrgId != null">#{belongOrgId},
+                    </if>
+                    <if test="belongOrgName != null">#{belongOrgName},
+                    </if>
+                    <if test="belongOrgPath != null">#{belongOrgPath},
+                    </if>
+                    <if test="standard != null">#{standard},
+                    </if>
+                    <if test="issue != null">#{issue},
+                    </if>
+                    <if test="beIssue != null">#{beIssue},
+                    </if>
+                    <if test="parentId != null">#{parentId},
+                    </if>
+                    <if test="fileList != null">#{fileList},
+                    </if>
+                    <if test="deleted != null">#{deleted},
+                    </if>
+                    <if test="createBy != null">#{createBy},
+                    </if>
+                    <if test="createTime != null">#{createTime},
+                    </if>
+                    <if test="updateBy != null">#{updateBy},
+                    </if>
+                    <if test="updateTime != null">#{updateTime},
+                    </if>
+        </trim>
+    </insert>
+
+    <update id="updateCoreDrillPlan" parameterType="com.xunmei.common.core.domain.drill.domain.CoreDrillPlan">
+        update core_drill_plan
+        <trim prefix="SET" suffixOverrides=",">
+                    <if test="planName != null">plan_name =
+                        #{planName},
+                    </if>
+                    <if test="planCycle != null">plan_cycle =
+                        #{planCycle},
+                    </if>
+                    <if test="execTimes != null">exec_times =
+                        #{execTimes},
+                    </if>
+                    <if test="planStatus != null">plan_status =
+                        #{planStatus},
+                    </if>
+                    <if test="execOrgType != null">exec_org_type =
+                        #{execOrgType},
+                    </if>
+                    <if test="planStartDate != null">plan_start_date =
+                        #{planStartDate},
+                    </if>
+                    <if test="planEndDate != null">plan_end_date =
+                        #{planEndDate},
+                    </if>
+                    <if test="buildTaskNow != null">build_task_now =
+                        #{buildTaskNow},
+                    </if>
+                    <if test="remark != null">remark =
+                        #{remark},
+                    </if>
+                    <if test="createOrgId != null">create_org_id =
+                        #{createOrgId},
+                    </if>
+                    <if test="createOrgName != null">create_org_name =
+                        #{createOrgName},
+                    </if>
+                    <if test="createOrgPath != null">create_org_path =
+                        #{createOrgPath},
+                    </if>
+                    <if test="belongOrgId != null">belong_org_id =
+                        #{belongOrgId},
+                    </if>
+                    <if test="belongOrgName != null">belong_org_name =
+                        #{belongOrgName},
+                    </if>
+                    <if test="belongOrgPath != null">belong_org_path =
+                        #{belongOrgPath},
+                    </if>
+                    <if test="standard != null">standard =
+                        #{standard},
+                    </if>
+                    <if test="issue != null">issue =
+                        #{issue},
+                    </if>
+                    <if test="beIssue != null">be_issue =
+                        #{beIssue},
+                    </if>
+                    <if test="parentId != null">parent_id =
+                        #{parentId},
+                    </if>
+                    <if test="fileList != null">file_list =
+                        #{fileList},
+                    </if>
+                    <if test="deleted != null">deleted =
+                        #{deleted},
+                    </if>
+                    <if test="createBy != null">create_by =
+                        #{createBy},
+                    </if>
+                    <if test="createTime != null">create_time =
+                        #{createTime},
+                    </if>
+                    <if test="updateBy != null">update_by =
+                        #{updateBy},
+                    </if>
+                    <if test="updateTime != null">update_time =
+                        #{updateTime},
+                    </if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteCoreDrillPlanById" parameterType="Long">
+        delete
+        from core_drill_plan where id = #{id}
+    </delete>
+
+    <delete id="deleteCoreDrillPlanByIds" parameterType="String">
+        delete from core_drill_plan where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+    <sql id="pageIncludeSP">
+        <if test="request.execOrgType!=null">
+            and sp.exec_org_type = #{request.execOrgType}
+        </if>
+        <if test="request.planCycle!=null">
+            and sp.plan_cycle = #{request.planCycle}
+        </if>
+        <if test="request.planStatus!=null">
+            and sp.plan_status = #{request.planStatus}
+        </if>
+        <if test="request.planName!=null">
+            and p.plan_name like concat('%',#{request.planName},'%')
+        </if>
+        <choose>
+            <when test="request.checkSub==true">
+                and sp.belong_org_path like concat(#{request.belongOrgPath},'%')
+            </when>
+            <otherwise>
+                and sp.belong_org_id = #{request.belongOrgId}
+            </otherwise>
+        </choose>
+    </sql>
+    <sql id="pageIncludeP">
+        <if test="request.execOrgType!=null">
+            and p.exec_org_type = #{request.execOrgType}
+        </if>
+        <if test="request.planCycle!=null">
+            and p.plan_cycle = #{request.planCycle}
+        </if>
+        <if test="request.planStatus!=null">
+            and p.plan_status = #{request.planStatus}
+        </if>
+        <if test="request.planName!=null">
+            and p.plan_name like concat('%',#{request.planName},'%')
+        </if>
+        <choose>
+            <when test="request.checkSub==true">
+                and p.belong_org_path like concat(#{request.belongOrgPath},'%')
+            </when>
+            <otherwise>
+                and p.belong_org_id = #{request.belongOrgId}
+            </otherwise>
+        </choose>
+    </sql>
+    <sql id="pageRoleIncludeReuqest">
+        select distinct p1.id
+        from core_edu_training_plan p1
+                 inner join core_edu_training_plan_to_role r1 on p1.id = r1.plan_id
+        where p1.deleted = 0
+          and p1.plan_status = 0
+          and r1.role_id = #{request.planRoleId}
+    </sql>
+    <select id="selectPageData" resultType="com.xunmei.common.core.domain.drill.vo.CoreDrillPlanPageVo">
+        select
+        p.id as id,
+        p.plan_name,
+        p.create_org_id,
+        p.create_org_name,
+        p.exec_org_type,
+        p.plan_cycle,
+        p.exec_times,
+        p.remark,
+        u.name as updateBy,
+        p.plan_status,
+        p.issue,
+        p.standard,
+        P.belong_org_id,
+        P.belong_org_name from core_edu_training_plan p left join sys_user u on p.update_by=u.id
+        where p.deleted = 0 and p.parent_id is null
+        and p.standard=1 and p.issue=1
+        <if test="request.planRoleId!=null">
+            and p.id in ( <include refid="pageRoleIncludeReuqest"/>)
+        </if>
+        and p.id in ( select sp.parent_id from core_edu_training_plan sp where sp.deleted = 0 and sp.parent_id is not
+        null<include refid="pageIncludeSP"/>)
+        <!-- 不是标准计划但是也没下发: 行社自建的计划 -->
+        or ( p.standard=0 and p.issue=0 and p.deleted=0 and p.parent_id is null
+        <if test="request.planRoleId!=null">
+            and p.id in ( <include refid="pageRoleIncludeReuqest"/>)
+        </if>
+        <include refid="pageIncludeP"/>)
+        <!-- 是标准计划但是未下发 -->
+        or ( p.standard=1 and p.issue=0 and p.deleted=0 and p.parent_id is null
+        <if test="request.planRoleId!=null">
+            and p.id in ( <include refid="pageRoleIncludeReuqest"/>)
+        </if>
+        <include refid="pageIncludeP"/>)
+        or ( p.standard=1 and p.issue=1 and p.deleted=0 and p.parent_id is null
+        <if test="request.planRoleId!=null">
+            and p.id in ( <include refid="pageRoleIncludeReuqest"/>)
+        </if>
+        <include refid="pageIncludeP"/>)
+        order by p.create_time desc
+
+
+    </select>
+
+    <select id="selectChildrenPlan" resultType="com.xunmei.common.core.domain.drill.vo.CoreDrillPlanPageVo">
+        select
+        sp.id as id,
+        sp.plan_name,
+        sp.create_org_id,
+        sp.create_org_name,
+        sp.exec_org_type,
+        sp.plan_cycle,
+        sp.exec_times,
+        sp.remark,
+        sp.plan_status,
+        u.name as updateBy,
+        sp.issue,
+        sp.standard,
+        sp.belong_org_id as belongOrgId,
+        sp.belong_org_name as belongOrgName from core_drill_plan sp left join sys_user u on sp.update_by=u.id
+        where sp.deleted = 0 and sp.parent_id is not null
+        <if test="request.id!=null">
+            and sp.parent_id = #{request.id}
+        </if>
+        <if test="request.execOrgType!=null">
+            and sp.exec_org_type = #{request.execOrgType}
+        </if>
+        <if test="request.planCycle!=null">
+            and sp.plan_cycle = #{request.planCycle}
+        </if>
+        <if test="request.planStatus!=null">
+            and sp.plan_status = #{request.planStatus}
+        </if>
+        <choose>
+            <when test="request.checkSub==true">
+                and sp.belong_org_path like concat(#{request.belongOrgPath},'%')
+            </when>
+            <otherwise>
+                and sp.belong_org_id = #{request.belongOrgId}
+            </otherwise>
+        </choose>
+    </select>
+</mapper>

+ 18 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillPlanToExecOrgMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xunmei.core.drill.mapper.CoreDrillPlanToExecOrgMapper">
+    <select id="selectLisByPlanId" resultType="com.xunmei.common.core.domain.drill.domain.CoreDrillPlanToExecOrg">
+        select g.plan_id as planId, g.org_id as orgId, o.name as orgName
+        from core_edu_training_plan_to_exec_org g
+                 inner join sys_org o on g.org_id = o.id
+        where g.plan_id = #{planId}
+    </select>
+
+    <select id="selectOrgIdByPlanId" resultType="java.lang.Long">
+        select distinct org_id
+        from core_edu_training_plan_to_exec_org
+        where plan_id = #{planId}
+    </select>
+</mapper>

+ 26 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillPlanToRoleMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xunmei.core.drill.mapper.CoreDrillPlanToRoleMapper">
+
+    <select id="selectRoleNameByPlanId" resultType="com.xunmei.common.core.domain.drill.vo.CoreDrillPlanRoleVo">
+        select r.id as roleId, r.role_name as roleName
+        from core_drill_plan_to_role pr
+                 inner join sys_role r on pr.role_id = r.id
+        where pr.plan_id = #{planId}
+
+    </select>
+    <select id="selectListByPlanId" resultType="com.xunmei.common.core.domain.drill.domain.CoreDrillPlanToRole">
+        select pr.plan_id as planId, pr.role_id as roleId, r.role_name as roleName
+        from core_edu_training_plan_to_role pr
+                 inner join sys_role r on pr.role_id = r.id
+        where plan_id = #{planId}
+    </select>
+
+    <select id="selectRoleIdByPlanId" resultType="java.lang.Long">
+        select distinct role_id
+        from core_edu_training_plan_to_role
+        where plan_id = #{planId}
+    </select>
+</mapper>