Pārlūkot izejas kodu

-添加导师带徒流程
-添加导师库
-修改考评表
-修改目标表

jiangbiao 1 gadu atpakaļ
vecāks
revīzija
af334808af
52 mainītis faili ar 2505 papildinājumiem un 228 dzēšanām
  1. 4 0
      master/src/main/java/com/ruoyi/config/ActivitiConfig.java
  2. 4 0
      master/src/main/java/com/ruoyi/project/approve/controller/TApproveController.java
  3. 3 0
      master/src/main/java/com/ruoyi/project/common/CommonController.java
  4. 15 1
      master/src/main/java/com/ruoyi/project/ehs/controller/TApproveDangerController.java
  5. 340 5
      master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsApproveController.java
  6. 3 1
      master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFirstplanController.java
  7. 25 18
      master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFlplanController.java
  8. 5 0
      master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFtplanController.java
  9. 5 0
      master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsLjplanController.java
  10. 53 9
      master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsNewController.java
  11. 180 0
      master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsTrainerController.java
  12. 5 0
      master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsYsplanController.java
  13. 160 126
      master/src/main/java/com/ruoyi/project/training/bccnew/domain/TTsApprove.java
  14. 20 0
      master/src/main/java/com/ruoyi/project/training/bccnew/domain/TTsFlplan.java
  15. 20 0
      master/src/main/java/com/ruoyi/project/training/bccnew/domain/TTsFtplan.java
  16. 20 0
      master/src/main/java/com/ruoyi/project/training/bccnew/domain/TTsLjplan.java
  17. 217 0
      master/src/main/java/com/ruoyi/project/training/bccnew/domain/TTsTrainer.java
  18. 19 0
      master/src/main/java/com/ruoyi/project/training/bccnew/domain/TTsYsplan.java
  19. 1 0
      master/src/main/java/com/ruoyi/project/training/bccnew/mapper/TTsApproveMapper.java
  20. 63 0
      master/src/main/java/com/ruoyi/project/training/bccnew/mapper/TTsTrainerMapper.java
  21. 2 1
      master/src/main/java/com/ruoyi/project/training/bccnew/service/ITTsApproveService.java
  22. 61 0
      master/src/main/java/com/ruoyi/project/training/bccnew/service/ITTsTrainerService.java
  23. 15 6
      master/src/main/java/com/ruoyi/project/training/bccnew/service/impl/TTsApproveServiceImpl.java
  24. 7 7
      master/src/main/java/com/ruoyi/project/training/bccnew/service/impl/TTsNewServiceImpl.java
  25. 93 0
      master/src/main/java/com/ruoyi/project/training/bccnew/service/impl/TTsTrainerServiceImpl.java
  26. 2 2
      master/src/main/resources/application.yml
  27. 11 1
      master/src/main/resources/mybatis/training/bccnew/TTsApproveMapper.xml
  28. 9 5
      master/src/main/resources/mybatis/training/bccnew/TTsFlplanMapper.xml
  29. 10 5
      master/src/main/resources/mybatis/training/bccnew/TTsFtplanMapper.xml
  30. 9 5
      master/src/main/resources/mybatis/training/bccnew/TTsLjplanMapper.xml
  31. 126 0
      master/src/main/resources/mybatis/training/bccnew/TTsTrainerMapper.xml
  32. 8 3
      master/src/main/resources/mybatis/training/bccnew/TTsYsplanMapper.xml
  33. 50 0
      master/src/main/resources/processes/bccnew/dsdtNoPass.bpmn
  34. BIN
      master/src/main/resources/static/template/training/bccnewDsk.xlsx
  35. BIN
      master/src/main/resources/static/word/training/appraisalForm.docx
  36. BIN
      master/src/main/resources/static/word/training/commentImg/end1.png
  37. BIN
      master/src/main/resources/static/word/training/commentImg/end2.png
  38. 53 0
      ui/src/api/training/bccnew/trainer.js
  39. 8 0
      ui/src/api/training/bccnew/tsnew.js
  40. 254 0
      ui/src/views/approve/approveDetail/dsdtNoPass-detail.vue
  41. 8 2
      ui/src/views/approve/approveDetail/dsdtTraining-detail.vue
  42. 9 0
      ui/src/views/approve/myapprove/index.vue
  43. 9 0
      ui/src/views/approve/pending/index.vue
  44. 9 0
      ui/src/views/approve/taskdone/index.vue
  45. 1 1
      ui/src/views/training/bccnew/flPlan/index.vue
  46. 1 1
      ui/src/views/training/bccnew/ftPlan/index.vue
  47. 1 1
      ui/src/views/training/bccnew/ljPlan/index.vue
  48. 534 0
      ui/src/views/training/bccnew/trainer/index.vue
  49. 37 12
      ui/src/views/training/bccnew/tsnew/index.vue
  50. 12 12
      ui/src/views/training/bccnew/tsnew/score.vue
  51. 3 3
      ui/src/views/training/bccnew/tsnew/score_student.vue
  52. 1 1
      ui/src/views/training/bccnew/ysPlan/index.vue

+ 4 - 0
master/src/main/java/com/ruoyi/config/ActivitiConfig.java

@@ -157,6 +157,10 @@ public class ActivitiConfig {
         Resource spec16 = resourceLoader.getResource("classpath:/processes/bccnew/dsdtTraining.bpmn"); //加载流程图资源文件
         deploymentBuilder16.enableDuplicateFiltering().addInputStream(spec16.getFilename(), spec16.getInputStream()).name("导师带徒经理签字").deploy();//按流程id部署
 
+        DeploymentBuilder deploymentBuilder17 = repositoryService().createDeployment();
+        Resource spec17 = resourceLoader.getResource("classpath:/processes/bccnew/dsdtNoPass.bpmn"); //加载流程图资源文件
+        deploymentBuilder17.enableDuplicateFiltering().addInputStream(spec17.getFilename(), spec17.getInputStream()).name("导师带徒学员成绩不合格审批").deploy();//按流程id部署
+
     }
 }
 

+ 4 - 0
master/src/main/java/com/ruoyi/project/approve/controller/TApproveController.java

@@ -245,6 +245,10 @@ public class TApproveController extends BaseController {
                         TTsApprove t = tTsApproveService.selectTTsApproveById(Long.parseLong(pi.getBusinessKey()));
                         devProcess.setApNo(t.getApNo());
                         devProcess.setApproveObject(t);
+                    }else if (pi.getProcessDefinitionName().equals("导师带徒学员成绩不合格审批")) {
+                        TTsApprove t = tTsApproveService.selectTTsApproveById(Long.parseLong(pi.getBusinessKey()));
+                        devProcess.setApNo(t.getApNo());
+                        devProcess.setApproveObject(t);
                     }
                 } catch (Exception e) {
                     logger.error(e.toString());

+ 3 - 0
master/src/main/java/com/ruoyi/project/common/CommonController.java

@@ -330,6 +330,9 @@ public class CommonController extends BaseController
         }else if( type.equals("jzPlanTmpl") ) {
             downloadname = "装置级培训导入模板.xlsx";
             url = "static/template/training/bccnewJz.xlsx";
+        }else if( type.equals("trainerTmpl") ) {
+            downloadname = "导师库导入模板.xlsx";
+            url = "static/template/training/bccnewDsk.xlsx";
         }
 
         InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(url);

+ 15 - 1
master/src/main/java/com/ruoyi/project/ehs/controller/TApproveDangerController.java

@@ -331,6 +331,10 @@ public class TApproveDangerController extends BaseController {
                         TTsApprove t = tTsApproveService.selectTTsApproveById(Long.parseLong(pi.getBusinessKey()));
                         devProcess.setApNo(t.getApNo());
                         devProcess.setApproveObject(t);
+                    } else if (pi.getProcessDefinitionName().equals("导师带徒学员成绩不合格审批")) {
+                        TTsApprove t = tTsApproveService.selectTTsApproveById(Long.parseLong(pi.getBusinessKey()));
+                        devProcess.setApNo(t.getApNo());
+                        devProcess.setApproveObject(t);
                     }
                 } catch (Exception e) {
                     logger.error(e.toString());
@@ -474,6 +478,10 @@ public class TApproveDangerController extends BaseController {
                     TTsApprove t = tTsApproveService.selectTTsApproveById(Long.parseLong(pi.getBusinessKey()));
                     devTask.setApNo(t.getApNo());
                     devTask.setApproveObject(t);
+                } else if (pi.getProcessDefinitionName().equals("导师带徒学员成绩不合格审批")) {
+                    TTsApprove t = tTsApproveService.selectTTsApproveById(Long.parseLong(pi.getBusinessKey()));
+                    devTask.setApNo(t.getApNo());
+                    devTask.setApproveObject(t);
                 }
                 list.add(devTask);
             }
@@ -602,7 +610,13 @@ public class TApproveDangerController extends BaseController {
                 } else if (pi.getProcessDefinitionName().equals("导师带徒经理审批")) {
                     TTsApprove t = tTsApproveService.selectTTsApproveById(Long.parseLong(pi.getBusinessKey()));
                     SysUser user = sysUserService.selectUserById(Long.valueOf(t.getCreaterCode()));
-                    devProcess.setApNo(t.getId().toString());
+                    devProcess.setApNo(t.getApNo());
+                    devProcess.setApName(user.getNickName());
+                    devProcess.setApproveObject(t);
+                } else if (pi.getProcessDefinitionName().equals("导师带徒学员成绩不合格审批")) {
+                    TTsApprove t = tTsApproveService.selectTTsApproveById(Long.parseLong(pi.getBusinessKey()));
+                    SysUser user = sysUserService.selectUserById(Long.valueOf(t.getCreaterCode()));
+                    devProcess.setApNo(t.getApNo());
                     devProcess.setApName(user.getNickName());
                     devProcess.setApproveObject(t);
                 } else {

+ 340 - 5
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsApproveController.java

@@ -1,5 +1,6 @@
 package com.ruoyi.project.training.bccnew.controller;
 
+import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
@@ -7,14 +8,20 @@ import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.approve.damain.DevTask;
-import com.ruoyi.project.training.bccnew.domain.TTsApprove;
-import com.ruoyi.project.training.bccnew.service.ITTsApproveService;
-import com.ruoyi.project.training.bccnew.service.ITTsNewService;
+import com.ruoyi.project.system.service.ISysUserService;
+import com.ruoyi.project.training.bccnew.domain.*;
+import com.ruoyi.project.training.bccnew.service.*;
+import org.activiti.engine.ProcessEngine;
+import org.activiti.engine.ProcessEngines;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.task.Task;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
+import java.text.ParseException;
+import java.util.*;
 
 /**
  * 导师带徒审批Controller
@@ -30,6 +37,41 @@ public class TTsApproveController extends BaseController {
     @Autowired
     private ITTsNewService tTsNewService;
 
+    @Autowired
+    private ITTsLjplanService tTsLjplanService;
+
+    @Autowired
+    private ITTsYsplanService tTsYsplanService;
+
+    @Autowired
+    private ITTsFlplanService tTsFlplanService;
+
+    @Autowired
+    private ITTsFtplanService tTsFtplanService;
+
+
+    @Autowired
+    private ITTsLjplanContentService tTsLjplanContentService;
+
+    @Autowired
+    private ITTsYsplanContentService tTsYsplanContentService;
+
+    @Autowired
+    private ITTsFlplanContentService tTsFlplanContentService;
+
+    @Autowired
+    private ITTsFtplanContentService tTsFtplanContentService;
+
+    @Autowired
+    private ISysUserService userService;
+
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private TaskService taskService;
+
+
     /**
      * 查询导师带徒审批列表
      */
@@ -60,7 +102,34 @@ public class TTsApproveController extends BaseController {
     @GetMapping(value = "/{id}")
     public AjaxResult getInfo(@PathVariable("id") Long id) {
         TTsApprove tTsApprove = tTsApproveService.selectTTsApproveById(id);
-        tTsApprove.settTsNew(tTsNewService.selectTTsNewById(tTsApprove.getTrainingId()));
+        if (tTsApprove.getTrainingId() != null)
+            tTsApprove.settTsNew(tTsNewService.selectTTsNewById(tTsApprove.getTrainingId()));
+        switch (tTsApprove.getPlanType()) {
+            case "1":
+                if (tTsApprove.getContentId() != null) {
+                    tTsApprove.settTsLjplan(tTsLjplanService.selectTTsLjplanById(tTsApprove.getContentId()));
+                    tTsApprove.settTsNew(tTsNewService.selectTTsNewById(tTsApprove.gettTsLjplan().getNewId()));
+                }
+                break;
+            case "2":
+                if (tTsApprove.getContentId() != null) {
+                    tTsApprove.settTsYsplan(tTsYsplanService.selectTTsYsplanById(tTsApprove.getContentId()));
+                    tTsApprove.settTsNew(tTsNewService.selectTTsNewById(tTsApprove.gettTsYsplan().getNewId()));
+                }
+                break;
+            case "3":
+                if (tTsApprove.getContentId() != null) {
+                    tTsApprove.settTsFlplan(tTsFlplanService.selectTTsFlplanById(tTsApprove.getContentId()));
+                    tTsApprove.settTsNew(tTsNewService.selectTTsNewById(tTsApprove.gettTsFlplan().getNewId()));
+                }
+                break;
+            case "4":
+                if (tTsApprove.getContentId() != null) {
+                    tTsApprove.settTsFtplan(tTsFtplanService.selectTTsFtplanById(tTsApprove.getContentId()));
+                    tTsApprove.settTsNew(tTsNewService.selectTTsNewById(tTsApprove.gettTsFtplan().getNewId()));
+                }
+                break;
+        }
         return AjaxResult.success(tTsApprove);
     }
 
@@ -90,6 +159,272 @@ public class TTsApproveController extends BaseController {
         return tTsApproveService.handle(devTask, getNickName(), getUserId().toString());
     }
 
+
+    @Log(title = "导师带徒审批成绩", businessType = BusinessType.UPDATE)
+    @PutMapping("/handleScore")
+    public AjaxResult handleScore(@RequestBody DevTask devTask) {
+        TTsApprove tTsApprove = devTask.gettTsApprove();
+        //使用任务服务完成任务(提交任务)
+        String taskId = devTask.getTaskId();
+        // 使用任务id,获取任务对象,获取流程实例id
+        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+        //利用任务对象,获取流程实例id
+        String taskName = task.getName();//实例名
+        String processInstancesId = task.getProcessInstanceId();
+        // 判断流程
+        if ("1".equals(devTask.getCondition())) {
+            devTask.setComment("补考");
+            new Thread(() -> {
+                switch (tTsApprove.getPlanType()) {
+                    case "1": {
+                        TTsLjplan item = tTsLjplanService.selectTTsLjplanById(tTsApprove.getContentId());
+                        item.setScorePass("1");
+                        tTsLjplanService.updateTTsLjplan(item);
+                        break;
+                    }
+                    case "2": {
+                        TTsYsplan item = tTsYsplanService.selectTTsYsplanById(tTsApprove.getContentId());
+                        item.setScorePass("1");
+                        tTsYsplanService.updateTTsYsplan(item);
+                        break;
+                    }
+                    case "3": {
+                        TTsFlplan item = tTsFlplanService.selectTTsFlplanById(tTsApprove.getContentId());
+                        item.setScorePass("1");
+                        tTsFlplanService.updateTTsFlplan(item);
+                        break;
+                    }
+                    case "4": {
+                        TTsFtplan item = tTsFtplanService.selectTTsFtplanById(tTsApprove.getContentId());
+                        item.setScorePass("1");
+                        tTsFtplanService.updateTTsFtplan(item);
+                        break;
+                    }
+                }
+            }, "经理批准重考").start();
+        } else if ("0".equals(devTask.getCondition())) {
+            devTask.setComment("重新学习");
+            new Thread(() -> {
+                try {
+                    switch (tTsApprove.getPlanType()) {
+                        case "1": {
+                            //查询旧数据
+                            TTsLjplan item = tTsLjplanService.selectTTsLjplanById(tTsApprove.getContentId());
+                            item.setPlanStatus(1L);
+                            tTsLjplanService.updateTTsLjplan(item);
+                            TTsLjplanContent contentItem = new TTsLjplanContent();
+                            contentItem.setPid(item.getId());
+                            //                新增需要重新学习的数据
+                            item.setId(null);
+                            item.setCreatedate(new Date());
+                            item.setCreaterCode(getUserId().toString());
+                            item.setUpdatedate(null);
+                            item.setUpdaterCode(null);
+                            item.setPlanStatus(0L);
+                            item.setScorePass(null);
+                            item.setSortTmpl(item.getSortTmpl() + 1);//排序往后顺延1
+
+                            tTsLjplanService.insertTTsLjplan(item);
+                            //新增内容
+                            List<TTsLjplanContent> contents = tTsLjplanContentService.selectTTsLjplanContentList(contentItem);
+                            for (TTsLjplanContent content : contents) {
+                                content.setId(null);
+                                content.setPid(item.getId());
+                                if (content.getPlanDate() != null) {
+                                    //                        修改计划培训日期 TODO:应根据班组日期排班,暂时使用内容数量添加,后面改
+                                    content.setPlanDate(DateUtils.addDate(content.getPlanDate(), contents.size()));
+                                }
+                                tTsLjplanContentService.insertTTsLjplanContent(content);
+                            }
+                            //                查询剩余未完成的训培内容
+                            TTsLjplan query = new TTsLjplan();
+                            query.setNewId(item.getNewId());
+                            query.setPlanStatus(0L);
+                            for (TTsLjplan entity : tTsLjplanService.selectTTsLjplanListByNewId(query)) {
+                                if (Objects.equals(entity.getId(), item.getId()))
+                                    continue;
+                                contentItem.setPid(entity.getId());
+                                contents = tTsLjplanContentService.selectTTsLjplanContentList(contentItem);
+                                for (TTsLjplanContent content : contents) {
+                                    if (content.getPlanDate() != null) {
+                                        //                            修改计划培训日期 TODO:应根据班组日期排班,暂时使用内容数量添加,后面改
+                                        content.setPlanDate(DateUtils.addDate(content.getPlanDate(), contents.size()));
+                                        tTsLjplanContentService.updateTTsLjplanContent(content);
+                                    }
+                                }
+                            }
+                            break;
+                        }
+                        case "2": {
+                            //查询旧数据
+                            TTsYsplan item = tTsYsplanService.selectTTsYsplanById(tTsApprove.getContentId());
+                            item.setPlanStatus(1L);
+                            tTsYsplanService.updateTTsYsplan(item);
+                            TTsYsplanContent contentItem = new TTsYsplanContent();
+                            contentItem.setPid(item.getId());
+                            //                新增需要重新学习的数据
+                            item.setId(null);
+                            item.setCreatedate(new Date());
+                            item.setCreaterCode(getUserId().toString());
+                            item.setUpdatedate(null);
+                            item.setUpdaterCode(null);
+                            item.setPlanStatus(0L);
+                            item.setScorePass(null);
+                            item.setSortTmpl(item.getSortTmpl() + 1);//排序往后顺延1
+
+                            tTsYsplanService.insertTTsYsplan(item);
+                            //新增内容
+                            List<TTsYsplanContent> contents = tTsYsplanContentService.selectTTsYsplanContentList(contentItem);
+                            for (TTsYsplanContent content : contents) {
+                                content.setId(null);
+                                content.setPid(item.getId());
+                                if (content.getPlanDate() != null) {
+                                    //                        修改计划培训日期 TODO:应根据班组日期排班,暂时使用内容数量添加,后面改
+                                    content.setPlanDate(DateUtils.addDate(content.getPlanDate(), contents.size()));
+                                }
+                                tTsYsplanContentService.insertTTsYsplanContent(content);
+                            }
+                            //                查询剩余未完成的训培内容
+                            TTsYsplan query = new TTsYsplan();
+                            query.setNewId(item.getNewId());
+                            query.setPlanStatus(0L);
+                            for (TTsYsplan entity : tTsYsplanService.selectTTsYsplanListByNewId(query)) {
+                                if (Objects.equals(entity.getId(), item.getId()))
+                                    continue;
+                                contentItem.setPid(entity.getId());
+                                contents = tTsYsplanContentService.selectTTsYsplanContentList(contentItem);
+                                for (TTsYsplanContent content : contents) {
+                                    if (content.getPlanDate() != null) {
+                                        //                            修改计划培训日期 TODO:应根据班组日期排班,暂时使用内容数量添加,后面改
+                                        content.setPlanDate(DateUtils.addDate(content.getPlanDate(), contents.size()));
+                                        tTsYsplanContentService.updateTTsYsplanContent(content);
+                                    }
+                                }
+                            }
+                            break;
+                        }
+                        case "3": {
+                            //查询旧数据
+                            TTsFlplan item = tTsFlplanService.selectTTsFlplanById(tTsApprove.getContentId());
+                            item.setPlanStatus(1L);
+                            tTsFlplanService.updateTTsFlplan(item);
+                            TTsFlplanContent contentItem = new TTsFlplanContent();
+                            contentItem.setPid(item.getId());
+                            //                新增需要重新学习的数据
+                            item.setId(null);
+                            item.setCreatedate(new Date());
+                            item.setCreaterCode(getUserId().toString());
+                            item.setUpdatedate(null);
+                            item.setUpdaterCode(null);
+                            item.setPlanStatus(0L);
+                            item.setScorePass(null);
+                            item.setSortTmpl(item.getSortTmpl() + 1);//排序往后顺延1
+
+                            tTsFlplanService.insertTTsFlplan(item);
+                            //新增内容
+                            List<TTsFlplanContent> contents = tTsFlplanContentService.selectTTsFlplanContentList(contentItem);
+                            for (TTsFlplanContent content : contents) {
+                                content.setId(null);
+                                content.setPid(item.getId());
+                                if (content.getPlanDate() != null) {
+                                    //                        修改计划培训日期 TODO:应根据班组日期排班,暂时使用内容数量添加,后面改
+                                    content.setPlanDate(DateUtils.addDate(content.getPlanDate(), contents.size()));
+                                }
+                                tTsFlplanContentService.insertTTsFlplanContent(content);
+                            }
+                            //                查询剩余未完成的训培内容
+                            TTsFlplan query = new TTsFlplan();
+                            query.setNewId(item.getNewId());
+                            query.setPlanStatus(0L);
+                            for (TTsFlplan entity : tTsFlplanService.selectTTsFlplanListByNewId(query)) {
+                                if (Objects.equals(entity.getId(), item.getId()))
+                                    continue;
+                                contentItem.setPid(entity.getId());
+                                contents = tTsFlplanContentService.selectTTsFlplanContentList(contentItem);
+                                for (TTsFlplanContent content : contents) {
+                                    if (content.getPlanDate() != null) {
+                                        //                            修改计划培训日期 TODO:应根据班组日期排班,暂时使用内容数量添加,后面改
+                                        content.setPlanDate(DateUtils.addDate(content.getPlanDate(), contents.size()));
+                                        tTsFlplanContentService.updateTTsFlplanContent(content);
+                                    }
+                                }
+                            }
+                            break;
+                        }
+                        case "4": {
+                            //查询旧数据
+                            TTsFtplan item = tTsFtplanService.selectTTsFtplanById(tTsApprove.getContentId());
+                            item.setPlanStatus(1L);
+                            tTsFtplanService.updateTTsFtplan(item);
+                            TTsFtplanContent contentItem = new TTsFtplanContent();
+                            contentItem.setPid(item.getId());
+                            //                新增需要重新学习的数据
+                            item.setId(null);
+                            item.setCreatedate(new Date());
+                            item.setCreaterCode(getUserId().toString());
+                            item.setUpdatedate(null);
+                            item.setUpdaterCode(null);
+                            item.setPlanStatus(0L);
+                            item.setScorePass(null);
+                            item.setSortTmpl(item.getSortTmpl() + 1);//排序往后顺延1
+
+                            tTsFtplanService.insertTTsFtplan(item);
+                            //新增内容
+                            List<TTsFtplanContent> contents = tTsFtplanContentService.selectTTsFtplanContentList(contentItem);
+                            for (TTsFtplanContent content : contents) {
+                                content.setId(null);
+                                content.setPid(item.getId());
+                                if (content.getPlanDate() != null) {
+                                    //                        修改计划培训日期 TODO:应根据班组日期排班,暂时使用内容数量添加,后面改
+                                    content.setPlanDate(DateUtils.addDate(content.getPlanDate(), contents.size()));
+                                }
+                                tTsFtplanContentService.insertTTsFtplanContent(content);
+                            }
+                            //                查询剩余未完成的训培内容
+                            TTsFtplan query = new TTsFtplan();
+                            query.setNewId(item.getNewId());
+                            query.setPlanStatus(0L);
+                            for (TTsFtplan entity : tTsFtplanService.selectTTsFtplanListByNewId(query)) {
+                                if (Objects.equals(entity.getId(), item.getId()))
+                                    continue;
+                                contentItem.setPid(entity.getId());
+                                contents = tTsFtplanContentService.selectTTsFtplanContentList(contentItem);
+                                for (TTsFtplanContent content : contents) {
+                                    if (content.getPlanDate() != null) {
+                                        //                            修改计划培训日期 TODO:应根据班组日期排班,暂时使用内容数量添加,后面改
+                                        content.setPlanDate(DateUtils.addDate(content.getPlanDate(), contents.size()));
+                                        tTsFtplanContentService.updateTTsFtplanContent(content);
+                                    }
+                                }
+                            }
+                            break;
+                        }
+                    }
+                } catch (ParseException e) {
+                    throw new RuntimeException(e);
+                }
+            }, "经理批准重新学习").start();
+        }
+        String userId = getUserId().toString();
+        // 处理流程节点
+        Map<String, Object> param = new HashMap<>();
+        if (taskName.equals("装置经理")) {
+            tTsApprove.setApproverName(getNickName());
+            tTsApprove.setApprover(userId);
+            tTsApprove.setApproveTime(new Date());
+            param.put("condition", devTask.getCondition());
+        }
+        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
+        TaskService taskService = processEngine.getTaskService();
+        //认领任务
+        processEngine.getTaskService()
+                .claim(taskId, userId);
+        taskService.addComment(taskId, processInstancesId, devTask.getComment());
+        taskService.complete(taskId, param);
+        tTsApproveService.updateTTsApprove(tTsApprove);
+        return AjaxResult.success();
+    }
+
     /**
      * 删除导师带徒审批
      */

+ 3 - 1
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFirstplanController.java

@@ -1,5 +1,6 @@
 package com.ruoyi.project.training.bccnew.controller;
 
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
@@ -137,7 +138,8 @@ public class TTsFirstplanController extends BaseController {
             tTsFirstplan.setStudentConfirm(getNickName());
             tTsFirstplan.setTrainingPlanDate(new Date());
             tTsFirstplan.setCourseDate(new Date());
-            tTsFirstplan.setAssess(tTsFirstplan.getScore2() == null ? tTsFirstplan.getScore1() : tTsFirstplan.getScore2());
+            TTsFirstplan firstplan = tTsFirstplanService.selectTTsFirstplanById(tTsFirstplan.getId());
+            tTsFirstplan.setAssess(StringUtils.isEmpty(firstplan.getScore2()) ? firstplan.getScore1() : firstplan.getScore2());
         }
         return toAjax(tTsFirstplanService.updateTTsFirstplan(tTsFirstplan));
     }

+ 25 - 18
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFlplanController.java

@@ -8,7 +8,9 @@ import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.service.ISysUserService;
-import com.ruoyi.project.training.bccnew.domain.*;
+import com.ruoyi.project.training.bccnew.domain.TTsFlplan;
+import com.ruoyi.project.training.bccnew.domain.TTsFlplanContent;
+import com.ruoyi.project.training.bccnew.domain.TTsNew;
 import com.ruoyi.project.training.bccnew.service.*;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -71,7 +73,7 @@ public class TTsFlplanController extends BaseController {
                     entity.setContent(content.toString());
                     entity.setPlanStartData(planDate.toString());
                     list.add(entity);
-                    entity=item;
+                    entity = item;
                     content = new StringBuilder();
                     planDate = new StringBuilder();
                     if (item.getPlanDate() != null)
@@ -127,7 +129,7 @@ public class TTsFlplanController extends BaseController {
     @PostMapping
     public AjaxResult add(@RequestBody TTsFlplan tTsFlplan) {
         int i = tTsFlplanService.insertTTsFlplan(tTsFlplan);
-        if (CollectionUtils.isNotEmpty(tTsFlplan.getContents())){
+        if (CollectionUtils.isNotEmpty(tTsFlplan.getContents())) {
             for (TTsFlplanContent content : tTsFlplan.getContents()) {
                 content.setPid(tTsFlplan.getId());
                 tTsFlplanContentService.insertTTsFlplanContent(content);
@@ -150,7 +152,7 @@ public class TTsFlplanController extends BaseController {
                 need.setTimer(timer + 1);
                 if (need.getTimerNeed() == null)
                     need.setTimerNeed(0.0);
-                if (need.getTimerNeed() != null && need.getTimerNeed() <= timer + 1&&need.getPlanStatus()==0) {
+                if (need.getTimerNeed() != null && need.getTimerNeed() <= timer + 1 && need.getPlanStatus() == 0) {
                     need.setPlanStatus(2L);
                 }
             }
@@ -166,12 +168,12 @@ public class TTsFlplanController extends BaseController {
     @Log(title = "分离培训", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody TTsFlplan tTsFlplan) {
-        if (CollectionUtils.isNotEmpty(tTsFlplan.getContents())){
+        if (CollectionUtils.isNotEmpty(tTsFlplan.getContents())) {
             for (TTsFlplanContent content : tTsFlplan.getContents()) {
-                if (content.getId()==null) {
+                if (content.getId() == null) {
                     content.setPid(tTsFlplan.getId());
                     tTsFlplanContentService.insertTTsFlplanContent(content);
-                }else {
+                } else {
                     tTsFlplanContentService.updateTTsFlplanContent(content);
                 }
             }
@@ -180,38 +182,43 @@ public class TTsFlplanController extends BaseController {
         if ("好".equals(tTsFlplan.getScore1())) {
             tTsFlplan.setPlanStatus(5L);
         }
-        if (("满意".equals(tTsFlplan.getScore1())||"满意".equals(flplan.getScore1())) && "好".equals(tTsFlplan.getScore2())) {
+        if ((("满意".equals(tTsFlplan.getScore1()) || "差".equals(tTsFlplan.getScore1())) && tTsFlplan.getScore2() == null) ||
+                (("满意".equals(tTsFlplan.getScore2()) || "差".equals(tTsFlplan.getScore2())) && tTsFlplan.getScore3() == null)) {
+            tTsFlplan.setScorePass("0");
+            tTsApproveService.doApprove(flplan.getId(), "3", getUserId(), getNickName(), "dsdtNoPass");
+        }
+        if (("满意".equals(tTsFlplan.getScore1()) || "满意".equals(flplan.getScore1())) && "好".equals(tTsFlplan.getScore2())) {
             tTsFlplan.setPlanStatus(5L);
         }
-        if (("满意".equals(tTsFlplan.getScore1())||"满意".equals(flplan.getScore1())) && ("满意".equals(tTsFlplan.getScore2())||"满意".equals(flplan.getScore2())) && "好".equals(tTsFlplan.getScore3())) {
+        if (("满意".equals(tTsFlplan.getScore1()) || "满意".equals(flplan.getScore1())) && ("满意".equals(tTsFlplan.getScore2()) || "满意".equals(flplan.getScore2())) && "好".equals(tTsFlplan.getScore3())) {
             tTsFlplan.setPlanStatus(5L);
         }
-        if (("满意".equals(tTsFlplan.getScore1())||"满意".equals(flplan.getScore1())) && ("差".equals(tTsFlplan.getScore2())||"差".equals(flplan.getScore2())) && "好".equals(tTsFlplan.getScore3())) {
+        if (("满意".equals(tTsFlplan.getScore1()) || "满意".equals(flplan.getScore1())) && ("差".equals(tTsFlplan.getScore2()) || "差".equals(flplan.getScore2())) && "好".equals(tTsFlplan.getScore3())) {
             tTsFlplan.setPlanStatus(5L);
         }
-        if (("满意".equals(tTsFlplan.getScore1())||"满意".equals(flplan.getScore1())) && ("满意".equals(tTsFlplan.getScore2())||"满意".equals(flplan.getScore2())) && "差".equals(tTsFlplan.getScore3())) {
+        if (("满意".equals(tTsFlplan.getScore1()) || "满意".equals(flplan.getScore1())) && ("满意".equals(tTsFlplan.getScore2()) || "满意".equals(flplan.getScore2())) && "差".equals(tTsFlplan.getScore3())) {
             tTsFlplan.setPlanStatus(4L);
         }
-        if (("满意".equals(tTsFlplan.getScore1())||"满意".equals(flplan.getScore1())) && ("差".equals(tTsFlplan.getScore2())||"差".equals(flplan.getScore2())) && "满意".equals(tTsFlplan.getScore3())) {
+        if (("满意".equals(tTsFlplan.getScore1()) || "满意".equals(flplan.getScore1())) && ("差".equals(tTsFlplan.getScore2()) || "差".equals(flplan.getScore2())) && "满意".equals(tTsFlplan.getScore3())) {
             tTsFlplan.setPlanStatus(4L);
         }
-        if (("满意".equals(tTsFlplan.getScore1())||"满意".equals(flplan.getScore1())) && ("满意".equals(tTsFlplan.getScore2())||"满意".equals(flplan.getScore2())) && "满意".equals(tTsFlplan.getScore3())) {
+        if (("满意".equals(tTsFlplan.getScore1()) || "满意".equals(flplan.getScore1())) && ("满意".equals(tTsFlplan.getScore2()) || "满意".equals(flplan.getScore2())) && "满意".equals(tTsFlplan.getScore3())) {
             tTsFlplan.setPlanStatus(4L);
         }
-        if (("满意".equals(tTsFlplan.getScore1())||"满意".equals(flplan.getScore1())) && ("差".equals(tTsFlplan.getScore2())||"差".equals(flplan.getScore2())) && "差".equals(tTsFlplan.getScore3())) {
+        if (("满意".equals(tTsFlplan.getScore1()) || "满意".equals(flplan.getScore1())) && ("差".equals(tTsFlplan.getScore2()) || "差".equals(flplan.getScore2())) && "差".equals(tTsFlplan.getScore3())) {
             tTsFlplan.setPlanStatus(4L);
         }
-        if (("差".equals(tTsFlplan.getScore1())||"差".equals(flplan.getScore1())) && "好".equals(tTsFlplan.getScore2())) {
+        if (("差".equals(tTsFlplan.getScore1()) || "差".equals(flplan.getScore1())) && "好".equals(tTsFlplan.getScore2())) {
             tTsFlplan.setPlanStatus(5L);
         }
-        if (("差".equals(tTsFlplan.getScore1())||"差".equals(flplan.getScore1())) && "满意".equals(tTsFlplan.getScore2())) {
+        if (("差".equals(tTsFlplan.getScore1()) || "差".equals(flplan.getScore1())) && "满意".equals(tTsFlplan.getScore2())) {
             tTsFlplan.setPlanStatus(4L);
         }
-        if (("差".equals(tTsFlplan.getScore1())||"差".equals(flplan.getScore1())) && "差".equals(tTsFlplan.getScore2())) {
+        if (("差".equals(tTsFlplan.getScore1()) || "差".equals(flplan.getScore1())) && "差".equals(tTsFlplan.getScore2())) {
             tTsFlplan.setPlanStatus(4L);
         }
         tTsFlplanService.updateTTsFlplan(tTsFlplan);
-        if (tTsFlplan.getPlanStatus() !=null) {
+        if (tTsFlplan.getPlanStatus() != null) {
             if (tTsFlplan.getPlanStatus() == 5) {
                 TTsNew tTsNew = new TTsNew();
                 tTsNew.setPlanStatus(5L);

+ 5 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFtplanController.java

@@ -179,6 +179,11 @@ public class TTsFtplanController extends BaseController {
         if ("好".equals(tTsFtplan.getScore1())) {
             tTsFtplan.setPlanStatus(5L);
         }
+        if ((("满意".equals(tTsFtplan.getScore1()) || "差".equals(tTsFtplan.getScore1())) && tTsFtplan.getScore2() == null) ||
+                (("满意".equals(tTsFtplan.getScore2()) || "差".equals(tTsFtplan.getScore2())) && tTsFtplan.getScore3() == null)) {
+            tTsFtplan.setScorePass("0");
+            tTsApproveService.doApprove(ftplan.getId(), "4", getUserId(), getNickName(), "dsdtNoPass");
+        }
         if (("满意".equals(tTsFtplan.getScore1())||"满意".equals(ftplan.getScore1())) && "好".equals(tTsFtplan.getScore2())) {
             tTsFtplan.setPlanStatus(5L);
         }

+ 5 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsLjplanController.java

@@ -186,6 +186,11 @@ public class TTsLjplanController extends BaseController {
         if ("好".equals(tTsLjplan.getScore1())) {
             tTsLjplan.setPlanStatus(5L);
         }
+        if ((("满意".equals(tTsLjplan.getScore1()) || "差".equals(tTsLjplan.getScore1())) && tTsLjplan.getScore2() == null) ||
+                (("满意".equals(tTsLjplan.getScore2()) || "差".equals(tTsLjplan.getScore2())) && tTsLjplan.getScore3() == null)) {
+            tTsLjplan.setScorePass("0");
+            tTsApproveService.doApprove(ljplan.getId(), "1", getUserId(), getNickName(), "dsdtNoPass");
+        }
         if (("满意".equals(tTsLjplan.getScore1())||"满意".equals(ljplan.getScore1())) && "好".equals(tTsLjplan.getScore2())) {
             tTsLjplan.setPlanStatus(5L);
         }

+ 53 - 9
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsNewController.java

@@ -12,6 +12,7 @@ import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.service.ISysDictDataService;
 import com.ruoyi.project.system.service.ISysUserService;
 import com.ruoyi.project.training.bccnew.domain.*;
 import com.ruoyi.project.training.bccnew.service.*;
@@ -110,6 +111,9 @@ public class TTsNewController extends BaseController {
     @Autowired
     private ITTsApproveService tsApproveService;
 
+    @Autowired
+    private ISysDictDataService sysDictDataService;
+
     /**
      * 查询导师带徒列表
      */
@@ -176,7 +180,7 @@ public class TTsNewController extends BaseController {
                         List<TTsFlplan> flPlansNow = tTsFlplanService.selectTTsFlplanListByNewId(tTsFlplan);
                         if (flPlansNow.isEmpty()) {
                             tTsFlplan.setPlanStatus(3L);
-                            flPlansNow =  tTsFlplanService.selectTTsFlplanListByNewId(tTsFlplan);
+                            flPlansNow = tTsFlplanService.selectTTsFlplanListByNewId(tTsFlplan);
                         }
                         secAll = flPlansAll.size();
                         secNow = flPlansNow.size();
@@ -188,7 +192,7 @@ public class TTsNewController extends BaseController {
                         List<TTsFtplan> ftPlansNow = tTsFtplanService.selectTTsFtplanListByNewId(tTsFtplan);
                         if (ftPlansNow.isEmpty()) {
                             tTsFtplan.setPlanStatus(3L);
-                            ftPlansNow =  tTsFtplanService.selectTTsFtplanListByNewId(tTsFtplan);
+                            ftPlansNow = tTsFtplanService.selectTTsFtplanListByNewId(tTsFtplan);
                         }
                         secAll = ftPlansAll.size();
                         secNow = ftPlansNow.size();
@@ -244,9 +248,6 @@ public class TTsNewController extends BaseController {
     @Log(title = "导师带徒", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody TTsNew tTsNew) {
-        if (tTsNew.getPlanStatus() == 0) {
-            return toAjax(tTsNewService.updateTTsNew(tTsNew));
-        }
         return toAjax(tTsNewService.updateTTsNew(tTsNew));
     }
 
@@ -470,6 +471,29 @@ public class TTsNewController extends BaseController {
     private Map<String, Object> getAppraisalFormWordData(TTsNew tTsNew) {
         Map<String, Object> params = new HashMap<>();
         SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        //装置级培训
+        TTsFirstplan tTsFirstplan = new TTsFirstplan();
+        tTsFirstplan.setNewId(tTsNew.getNewId());
+        List<TTsFirstplan> tTsFirstplans = tTsFirstplanService.selectTTsFirstplanListByNewId(tTsFirstplan);
+        RowRenderData[] plantList  = new RowRenderData[tTsFirstplans.size() + 1];
+        plantList[0] = Rows.create("序号", "计划培训日期", "培训主题", "材料版本", "培训时长h", "讲师", "培训日期", "讲师签名", "考试评估方式", "评估结果", "学员签名");
+        int i = 0;
+        new HashSet<String>();
+        for (TTsFirstplan firstplan : tTsFirstplans) {
+            i++;
+            String planDate = "";
+            if (firstplan.getTrainingPlanDate() != null) {
+                planDate = formatter.format(firstplan.getTrainingPlanDate());
+            }
+            String trainDate = "";
+            if (firstplan.getCourseDate() != null) {
+                trainDate = formatter.format(firstplan.getCourseDate());
+            }
+            plantList[i] = Rows.create(String.valueOf(i), planDate, firstplan.getTopic(), firstplan.getMaterialVer(), String.valueOf(firstplan.getCourseHour())
+                    , firstplan.getTrainer(), trainDate, "{{@trainSign"+firstplan.getTrainer()+"}}",firstplan.getCourseType(), firstplan.getAssess(), "{{@traineeSignature}}");
+        }
+        params.put("staffId", tTsNew.getStaffId());
+        //导师带徒培训
         Date startDate = new Date(tTsNew.getStartdate().toString());
         startDate.setMonth(startDate.getMonth() + 1);
         Date endDate = tTsNew.getEnddate();
@@ -481,10 +505,19 @@ public class TTsNewController extends BaseController {
         SysUser apprentice = sysUserService.selectUserByStaffId(staffId);
         List<TTsApprove> tTsApproves = tsApproveService.selectTTsApproveByNewId(tTsNew.getNewId());
         if (CollectionUtils.isNotEmpty(tTsApproves)) {
-            SysUser manager = sysUserService.selectUserById(Long.valueOf(tTsApproves.get(0).getApprover()));
-            if (StringUtils.isNotEmpty(manager.getSignUrl()))
-                params.put("mgrSign", Pictures.ofLocal(fileName(manager.getSignUrl())).size(100, 40).create());
-            params.put("mentorComments",Texts.of(tTsNew.getMentorComments()).create());
+            if (tTsApproves.get(0).getApprover() != null) {
+                SysUser manager = sysUserService.selectUserById(Long.valueOf(tTsApproves.get(0).getApprover()));
+                if (StringUtils.isNotEmpty(manager.getSignUrl()))
+                    params.put("mgrSign", Pictures.ofLocal(fileName(manager.getSignUrl())).size(100, 40).create());
+                if (tTsNew.getPlanStatus() == 3) {// 模板路径
+                    String imgPath = "/static/word/training/commentImg/end2.png";
+                    params.put("mentorComments", Pictures.ofLocal(Objects.requireNonNull(getClass().getResource(imgPath)).getPath()).size(500, 80).create());
+                }
+                if (tTsNew.getPlanStatus() == 1) {// 模板路径
+                    String imgPath = "/static/word/training/commentImg/end1.png";
+                    params.put("mentorComments", Pictures.ofLocal(Objects.requireNonNull(getClass().getResource(imgPath)).getPath()).size(500, 80).create());
+                }
+            }
         }
         if (StringUtils.isNotEmpty(mentor.getSignUrl()))
             params.put("tutorSignature", Pictures.ofLocal(fileName(mentor.getSignUrl())).size(100, 40).create());
@@ -492,6 +525,8 @@ public class TTsNewController extends BaseController {
             params.put("traineeSignature", Pictures.ofLocal(fileName(apprentice.getSignUrl())).size(100, 40).create());
         params.put("tutor", Texts.of(mentor.getNickName()).create());
         params.put("trainee", Texts.of(apprentice.getNickName()).create());
+        String label = sysDictDataService.selectDictLabel("training_bccnew_status", tTsNew.getPlanStatus().toString());
+        params.put("appaisalResult", Texts.of(label).create());
         List<RowRenderData> planList = new ArrayList<>();
         String post = "";
         Long planType = tTsNew.getPlanType();
@@ -510,6 +545,8 @@ public class TTsNewController extends BaseController {
                 }
                 if (StringUtils.isNotEmpty(plan.getScore1())) {
                     planList.add(Rows.create(plan.getDetailPlan(), plan.getTopic(), dateStr, plan.getScore1(), apprentice.getNickName(), mentor.getNickName(), plan.getScore1().equals("好") ? "是" : "否"));
+                } else if (plan.getPlanStatus() == 4 || plan.getPlanStatus() == 1) {
+                    planList.add(Rows.create(plan.getDetailPlan(), plan.getTopic(), dateStr, "终止", apprentice.getNickName(), mentor.getNickName(), "否"));
                 } else {
                     planList.add(Rows.create(plan.getDetailPlan(), plan.getTopic(), dateStr, "", apprentice.getNickName(), mentor.getNickName(), ""));
                 }
@@ -535,6 +572,8 @@ public class TTsNewController extends BaseController {
                 }
                 if (StringUtils.isNotEmpty(plan.getScore1())) {
                     planList.add(Rows.create(plan.getDetailPlan(), plan.getTopic(), dateStr, plan.getScore1(), apprentice.getNickName(), mentor.getNickName(), plan.getScore1().equals("好") ? "是" : "否"));
+                } else if (plan.getPlanStatus() == 4 || plan.getPlanStatus() == 1) {
+                    planList.add(Rows.create(plan.getDetailPlan(), plan.getTopic(), dateStr, "终止", apprentice.getNickName(), mentor.getNickName(), "否"));
                 } else {
                     planList.add(Rows.create(plan.getDetailPlan(), plan.getTopic(), dateStr, "", apprentice.getNickName(), mentor.getNickName(), ""));
                 }
@@ -559,6 +598,8 @@ public class TTsNewController extends BaseController {
                 }
                 if (StringUtils.isNotEmpty(plan.getScore1())) {
                     planList.add(Rows.create(plan.getDetailPlan(), plan.getTopic(), dateStr, plan.getScore1(), apprentice.getNickName(), mentor.getNickName(), plan.getScore1().equals("好") ? "是" : "否"));
+                } else if (plan.getPlanStatus() == 4 || plan.getPlanStatus() == 1) {
+                    planList.add(Rows.create(plan.getDetailPlan(), plan.getTopic(), dateStr, "终止", apprentice.getNickName(), mentor.getNickName(), "否"));
                 } else {
                     planList.add(Rows.create(plan.getDetailPlan(), plan.getTopic(), dateStr, "", apprentice.getNickName(), mentor.getNickName(), ""));
                 }
@@ -583,6 +624,8 @@ public class TTsNewController extends BaseController {
                 }
                 if (StringUtils.isNotEmpty(plan.getScore1())) {
                     planList.add(Rows.create(plan.getDetailPlan(), plan.getTopic(), dateStr, plan.getScore1(), apprentice.getNickName(), mentor.getNickName(), plan.getScore1().equals("好") ? "是" : "否"));
+                } else if (plan.getPlanStatus() == 4 || plan.getPlanStatus() == 1) {
+                    planList.add(Rows.create(plan.getDetailPlan(), plan.getTopic(), dateStr, "终止", apprentice.getNickName(), mentor.getNickName(), "否"));
                 } else {
                     planList.add(Rows.create(plan.getDetailPlan(), plan.getTopic(), dateStr, "", apprentice.getNickName(), mentor.getNickName(), ""));
                 }
@@ -602,6 +645,7 @@ public class TTsNewController extends BaseController {
                 .map(MergeCellRule.Grid.of(0, 4), MergeCellRule.Grid.of(0, 5))
                 .map(MergeCellRule.Grid.of(0, 3), MergeCellRule.Grid.of(1, 3)).build();
         params.put("planList", Tables.of(planList.toArray(new RowRenderData[0])).mergeRule(rule).create());
+        params.put("plantList", Tables.of(plantList).create());
         // 渲染文本
         return params;
     }

+ 180 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsTrainerController.java

@@ -0,0 +1,180 @@
+package com.ruoyi.project.training.bccnew.controller;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.file.ExcelUtils;
+import com.ruoyi.project.cui.domain.TPipe;
+import com.ruoyi.project.system.domain.SysDept;
+import com.ruoyi.project.system.domain.SysDictData;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.project.training.bccnew.domain.TTsTrainer;
+import com.ruoyi.project.training.bccnew.service.ITTsTrainerService;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 蒸汽裂解装置导师带徒导师库Controller
+ *
+ * @author ssy
+ * @date 2024-08-12
+ */
+@RestController
+@RequestMapping("/bccnew/trainer")
+public class TTsTrainerController extends BaseController
+{
+    @Autowired
+    private ITTsTrainerService tTsTrainerService;
+
+    /**
+     * 查询蒸汽裂解装置导师带徒导师库列表
+     */
+    @PreAuthorize("@ss.hasPermi('bccnew:trainer:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TTsTrainer tTsTrainer)
+    {
+        startPage();
+        List<TTsTrainer> list = tTsTrainerService.selectTTsTrainerList(tTsTrainer);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出蒸汽裂解装置导师带徒导师库列表
+     */
+    @PreAuthorize("@ss.hasPermi('bccnew:trainer:export')")
+    @Log(title = "蒸汽裂解装置导师带徒导师库", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(TTsTrainer tTsTrainer)
+    {
+        List<TTsTrainer> list = tTsTrainerService.selectTTsTrainerList(tTsTrainer);
+        ExcelUtil<TTsTrainer> util = new ExcelUtil<TTsTrainer>(TTsTrainer.class);
+        return util.exportExcel(list, "trainer");
+    }
+
+    /**
+     * 获取蒸汽裂解装置导师带徒导师库详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('bccnew:trainer:query')")
+    @GetMapping(value = "/{trainerId}")
+    public AjaxResult getInfo(@PathVariable("trainerId") Long trainerId)
+    {
+        return AjaxResult.success(tTsTrainerService.selectTTsTrainerById(trainerId));
+    }
+
+    /**
+     * 新增蒸汽裂解装置导师带徒导师库
+     */
+    @PreAuthorize("@ss.hasPermi('bccnew:trainer:add')")
+    @Log(title = "蒸汽裂解装置导师带徒导师库", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TTsTrainer tTsTrainer)
+    {
+        return toAjax(tTsTrainerService.insertTTsTrainer(tTsTrainer));
+    }
+
+    /**
+     * 修改蒸汽裂解装置导师带徒导师库
+     */
+    @PreAuthorize("@ss.hasPermi('bccnew:trainer:edit')")
+    @Log(title = "蒸汽裂解装置导师带徒导师库", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TTsTrainer tTsTrainer)
+    {
+        return toAjax(tTsTrainerService.updateTTsTrainer(tTsTrainer));
+    }
+
+    /**
+     * 删除蒸汽裂解装置导师带徒导师库
+     */
+    @PreAuthorize("@ss.hasPermi('bccnew:trainer:remove')")
+    @Log(title = "蒸汽裂解装置导师带徒导师库", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{trainerIds}")
+    public AjaxResult remove(@PathVariable Long[] trainerIds)
+    {
+        return toAjax(tTsTrainerService.deleteTTsTrainerByIds(trainerIds));
+    }
+
+    @PreAuthorize("@ss.hasPermi('bccnew:trainer:add')")
+    @Log(title = "蒸汽裂解装置导师带徒导师库", businessType = BusinessType.INSERT)
+    @PostMapping("/importData")
+    public AjaxResult importData(@RequestParam("file") MultipartFile file) throws IOException
+    {
+        //获取操作人员ID
+        Long userId = getUserId();
+        Workbook workbook = ExcelUtils.getWorkBook(file);
+        Sheet sheet = workbook.getSheetAt(0);
+        List<TTsTrainer> list = new ArrayList<>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        int rowNum = sheet.getPhysicalNumberOfRows();
+        int failNumber = 0;
+        //报错行数统计
+        List<Integer> failRow =new ArrayList<Integer>();
+        for (int i = 1; i < rowNum; i++) {
+            try {
+                logger.info("读取行数:" + i);
+                Row row = sheet.getRow(i);
+                int cellNum = row.getPhysicalNumberOfCells();
+                TTsTrainer entity = new TTsTrainer();
+                for (int j = 0; j < cellNum; j++) {
+                    Cell cell = row.getCell(j);
+                    String cellValue = ExcelUtils.getCellValue(cell);
+                    logger.info("cellValue:" + cellValue);
+                    if (j == 0) {
+                        entity.setStaffId(cellValue);
+                    } else if (j == 1) {
+                        entity.setTrainerName(cellValue);
+                    } else if (j == 2) {
+                        entity.setTeam(cellValue);
+                    } else if (j == 3) {
+                        entity.setPost(cellValue);
+                    } else if (j == 4) {
+                        entity.setExperience(cellValue);
+                    } else if (j == 5) {
+                        entity.setApprenticePosition(cellValue);
+                    } else if (j == 6) {
+                        entity.setRemarks(cellValue);
+                    }
+                }
+                entity.setCreaterCode(userId.toString());
+                logger.info("entity:" + entity);
+                list.add(entity);
+            }catch (Exception e){
+                failNumber++;
+                failRow.add(i+1);
+            }
+        }
+        int successNumber = 0;
+        int failNum = 0;
+        for (TTsTrainer t : list
+        ) {
+            failNum++;
+            try {
+                add(t);
+                successNumber++;
+            }catch (Exception e){
+                failNumber++;
+                failRow.add(failNum+1);
+            }
+        }
+        logger.info("list:" + JSON.toJSONString(list));
+        logger.info("successNumber:" + successNumber);
+        logger.info("failNumber:" + failNumber);
+        logger.info("failRow:" + failRow);
+        return AjaxResult.success(String.valueOf(successNumber), failRow);
+    }
+}

+ 5 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsYsplanController.java

@@ -180,6 +180,11 @@ public class TTsYsplanController extends BaseController {
         if ("好".equals(tTsYsplan.getScore1())) {
             tTsYsplan.setPlanStatus(5L);
         }
+        if ((("满意".equals(tTsYsplan.getScore1()) || "差".equals(tTsYsplan.getScore1())) && tTsYsplan.getScore2() == null) ||
+                (("满意".equals(tTsYsplan.getScore2()) || "差".equals(tTsYsplan.getScore2())) && tTsYsplan.getScore3() == null)) {
+            tTsYsplan.setScorePass("0");
+            tTsApproveService.doApprove(ysplan.getId(), "2", getUserId(), getNickName(), "dsdtNoPass");
+        }
         if (("满意".equals(tTsYsplan.getScore1())||"满意".equals(ysplan.getScore1())) && "好".equals(tTsYsplan.getScore2())) {
             tTsYsplan.setPlanStatus(5L);
         }

+ 160 - 126
master/src/main/java/com/ruoyi/project/training/bccnew/domain/TTsApprove.java

@@ -1,122 +1,174 @@
 package com.ruoyi.project.training.bccnew.domain;
 
-import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.framework.web.domain.BaseEntity;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
+import java.util.Date;
+
 /**
  * 导师带徒审批对象 t_ts_approve
  *
  * @author ssy
  * @date 2024-06-25
  */
-public class TTsApprove extends BaseEntity
-{
+public class TTsApprove extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
-    /** id */
+    /**
+     * id
+     */
     private Long id;
 
     private Long trainingId;
 
-    /** 申请编号 */
+    private Long contentId;
+
+    /**
+     * 申请编号
+     */
     @Excel(name = "申请编号")
     private String apNo;
 
-    /** 流程编id */
+    /**
+     * 流程编id
+     */
     @Excel(name = "流程编id")
     private String processId;
 
-    /** 申请人id */
+    /**
+     * 申请人id
+     */
     @Excel(name = "申请人id")
     private String applicant;
 
-    /** 申请时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    /**
+     * 申请时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @Excel(name = "申请时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date applicationTime;
 
-    /** 申请人姓名 */
+    /**
+     * 申请人姓名
+     */
     @Excel(name = "申请人姓名")
     private String applicantName;
 
-    /** 审批人id */
+    /**
+     * 审批人id
+     */
     @Excel(name = "审批人id")
     private String approver;
 
-    /** 审批时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    /**
+     * 审批时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @Excel(name = "审批时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date approveTime;
 
-    /** 审批人姓名 */
+    /**
+     * 审批人姓名
+     */
     @Excel(name = "审批人姓名")
     private String approverName;
 
-    /** 状态 */
+    /**
+     * 状态
+     */
     @Excel(name = "状态")
     private Long status;
 
-    /** 删除标识 */
+    /**
+     * 删除标识
+     */
     private Long delFlag;
 
-    /** 创建人 */
+    /**
+     * 创建人
+     */
     @Excel(name = "创建人")
     private String createrCode;
 
-    /** 创建时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date createdate;
 
-    /** 修改人 */
+    /**
+     * 修改人
+     */
     @Excel(name = "修改人")
     private String updaterCode;
 
-    /** 修改时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    /**
+     * 修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date updatedate;
 
-    /** 部门id */
+    /**
+     * 部门id
+     */
     @Excel(name = "部门id")
     private Long deptId;
 
-    /** 类型 */
+    /**
+     * 类型
+     */
     @Excel(name = "类型")
     private String planType;
 
     private TTsNew tTsNew;
+    private TTsLjplan tTsLjplan;
+    private TTsYsplan tTsYsplan;
+    private TTsFlplan tTsFlplan;
+    private TTsFtplan tTsFtplan;
+
+    public Long getContentId() {
+        return contentId;
+    }
+
+    public void setContentId(Long contentId) {
+        this.contentId = contentId;
+    }
+
+    public TTsLjplan gettTsLjplan() {
+        return tTsLjplan;
+    }
 
-    private String studentId;
-    private String studentName;
-    private Date studentConfirmTime;
+    public void settTsLjplan(TTsLjplan tTsLjplan) {
+        this.tTsLjplan = tTsLjplan;
+    }
 
-    public String getStudentId() {
-        return studentId;
+    public TTsYsplan gettTsYsplan() {
+        return tTsYsplan;
     }
 
-    public void setStudentId(String studentId) {
-        this.studentId = studentId;
+    public void settTsYsplan(TTsYsplan tTsYsplan) {
+        this.tTsYsplan = tTsYsplan;
     }
 
-    public String getStudentName() {
-        return studentName;
+    public TTsFlplan gettTsFlplan() {
+        return tTsFlplan;
     }
 
-    public void setStudentName(String studentName) {
-        this.studentName = studentName;
+    public void settTsFlplan(TTsFlplan tTsFlplan) {
+        this.tTsFlplan = tTsFlplan;
     }
 
-    public Date getStudentConfirmTime() {
-        return studentConfirmTime;
+    public TTsFtplan gettTsFtplan() {
+        return tTsFtplan;
     }
 
-    public void setStudentConfirmTime(Date studentConfirmTime) {
-        this.studentConfirmTime = studentConfirmTime;
+    public void settTsFtplan(TTsFtplan tTsFtplan) {
+        this.tTsFtplan = tTsFtplan;
     }
 
     public TTsNew gettTsNew() {
@@ -135,180 +187,162 @@ public class TTsApprove extends BaseEntity
         this.trainingId = trainingId;
     }
 
-    public void setId(Long id)
-    {
+    public void setId(Long id) {
         this.id = id;
     }
 
-    public Long getId()
-    {
+    public Long getId() {
         return id;
     }
-    public void setApNo(String apNo)
-    {
+
+    public void setApNo(String apNo) {
         this.apNo = apNo;
     }
 
-    public String getApNo()
-    {
+    public String getApNo() {
         return apNo;
     }
-    public void setProcessId(String processId)
-    {
+
+    public void setProcessId(String processId) {
         this.processId = processId;
     }
 
-    public String getProcessId()
-    {
+    public String getProcessId() {
         return processId;
     }
-    public void setApplicant(String applicant)
-    {
+
+    public void setApplicant(String applicant) {
         this.applicant = applicant;
     }
 
-    public String getApplicant()
-    {
+    public String getApplicant() {
         return applicant;
     }
-    public void setApplicationTime(Date applicationTime)
-    {
+
+    public void setApplicationTime(Date applicationTime) {
         this.applicationTime = applicationTime;
     }
 
-    public Date getApplicationTime()
-    {
+    public Date getApplicationTime() {
         return applicationTime;
     }
-    public void setApplicantName(String applicantName)
-    {
+
+    public void setApplicantName(String applicantName) {
         this.applicantName = applicantName;
     }
 
-    public String getApplicantName()
-    {
+    public String getApplicantName() {
         return applicantName;
     }
-    public void setApprover(String approver)
-    {
+
+    public void setApprover(String approver) {
         this.approver = approver;
     }
 
-    public String getApprover()
-    {
+    public String getApprover() {
         return approver;
     }
-    public void setApproveTime(Date approveTime)
-    {
+
+    public void setApproveTime(Date approveTime) {
         this.approveTime = approveTime;
     }
 
-    public Date getApproveTime()
-    {
+    public Date getApproveTime() {
         return approveTime;
     }
-    public void setApproverName(String approverName)
-    {
+
+    public void setApproverName(String approverName) {
         this.approverName = approverName;
     }
 
-    public String getApproverName()
-    {
+    public String getApproverName() {
         return approverName;
     }
-    public void setStatus(Long status)
-    {
+
+    public void setStatus(Long status) {
         this.status = status;
     }
 
-    public Long getStatus()
-    {
+    public Long getStatus() {
         return status;
     }
-    public void setDelFlag(Long delFlag)
-    {
+
+    public void setDelFlag(Long delFlag) {
         this.delFlag = delFlag;
     }
 
-    public Long getDelFlag()
-    {
+    public Long getDelFlag() {
         return delFlag;
     }
-    public void setCreaterCode(String createrCode)
-    {
+
+    public void setCreaterCode(String createrCode) {
         this.createrCode = createrCode;
     }
 
-    public String getCreaterCode()
-    {
+    public String getCreaterCode() {
         return createrCode;
     }
-    public void setCreatedate(Date createdate)
-    {
+
+    public void setCreatedate(Date createdate) {
         this.createdate = createdate;
     }
 
-    public Date getCreatedate()
-    {
+    public Date getCreatedate() {
         return createdate;
     }
-    public void setUpdaterCode(String updaterCode)
-    {
+
+    public void setUpdaterCode(String updaterCode) {
         this.updaterCode = updaterCode;
     }
 
-    public String getUpdaterCode()
-    {
+    public String getUpdaterCode() {
         return updaterCode;
     }
-    public void setUpdatedate(Date updatedate)
-    {
+
+    public void setUpdatedate(Date updatedate) {
         this.updatedate = updatedate;
     }
 
-    public Date getUpdatedate()
-    {
+    public Date getUpdatedate() {
         return updatedate;
     }
-    public void setDeptId(Long deptId)
-    {
+
+    public void setDeptId(Long deptId) {
         this.deptId = deptId;
     }
 
-    public Long getDeptId()
-    {
+    public Long getDeptId() {
         return deptId;
     }
-    public void setPlanType(String planType)
-    {
+
+    public void setPlanType(String planType) {
         this.planType = planType;
     }
 
-    public String getPlanType()
-    {
+    public String getPlanType() {
         return planType;
     }
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("apNo", getApNo())
-            .append("processId", getProcessId())
-            .append("applicant", getApplicant())
-            .append("applicationTime", getApplicationTime())
-            .append("applicantName", getApplicantName())
-            .append("approver", getApprover())
-            .append("approveTime", getApproveTime())
-            .append("approverName", getApproverName())
-            .append("status", getStatus())
-            .append("delFlag", getDelFlag())
-            .append("createrCode", getCreaterCode())
-            .append("createdate", getCreatedate())
-            .append("updaterCode", getUpdaterCode())
-            .append("updatedate", getUpdatedate())
-            .append("deptId", getDeptId())
-            .append("planType", getPlanType())
-            .toString();
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("apNo", getApNo())
+                .append("processId", getProcessId())
+                .append("applicant", getApplicant())
+                .append("applicationTime", getApplicationTime())
+                .append("applicantName", getApplicantName())
+                .append("approver", getApprover())
+                .append("approveTime", getApproveTime())
+                .append("approverName", getApproverName())
+                .append("status", getStatus())
+                .append("delFlag", getDelFlag())
+                .append("createrCode", getCreaterCode())
+                .append("createdate", getCreatedate())
+                .append("updaterCode", getUpdaterCode())
+                .append("updatedate", getUpdatedate())
+                .append("deptId", getDeptId())
+                .append("planType", getPlanType())
+                .toString();
     }
 }

+ 20 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/domain/TTsFlplan.java

@@ -133,6 +133,26 @@ public class TTsFlplan extends BaseEntity
 
     private String planStartData;
 
+    private String scorePass;
+
+    private Long pid;
+
+    public Long getPid() {
+        return pid;
+    }
+
+    public void setPid(Long pid) {
+        this.pid = pid;
+    }
+
+    public String getScorePass() {
+        return scorePass;
+    }
+
+    public void setScorePass(String scorePass) {
+        this.scorePass = scorePass;
+    }
+
     public String getPlanStartData() {
         return planStartData;
     }

+ 20 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/domain/TTsFtplan.java

@@ -131,6 +131,26 @@ public class TTsFtplan extends BaseEntity
 
     private String planStartData;
 
+    private String scorePass;
+
+    private Long pid;
+
+    public Long getPid() {
+        return pid;
+    }
+
+    public void setPid(Long pid) {
+        this.pid = pid;
+    }
+
+    public String getScorePass() {
+        return scorePass;
+    }
+
+    public void setScorePass(String scorePass) {
+        this.scorePass = scorePass;
+    }
+
     public String getPlanStartData() {
         return planStartData;
     }

+ 20 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/domain/TTsLjplan.java

@@ -131,6 +131,26 @@ public class TTsLjplan extends BaseEntity
 
     private String planStartData;
 
+    private String scorePass;
+
+    private Long pid;
+
+    public Long getPid() {
+        return pid;
+    }
+
+    public void setPid(Long pid) {
+        this.pid = pid;
+    }
+
+    public String getScorePass() {
+        return scorePass;
+    }
+
+    public void setScorePass(String scorePass) {
+        this.scorePass = scorePass;
+    }
+
     public String getPlanStartData() {
         return planStartData;
     }

+ 217 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/domain/TTsTrainer.java

@@ -0,0 +1,217 @@
+package com.ruoyi.project.training.bccnew.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 蒸汽裂解装置导师带徒导师库对象 t_ts_trainer
+ *
+ * @author ssy
+ * @date 2024-08-12
+ */
+public class TTsTrainer extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id */
+    private Long trainerId;
+
+    /** 工号 */
+    @Excel(name = "工号")
+    private String staffId;
+
+    /** 姓名 */
+    @Excel(name = "姓名")
+    private String trainerName;
+
+    /** 班组 */
+    @Excel(name = "班组")
+    private String team;
+
+    /** 岗位 */
+    @Excel(name = "岗位")
+    private String post;
+
+    /** 工作经历 */
+    @Excel(name = "工作经历")
+    private String experience;
+
+    /** 带徒岗位 */
+    @Excel(name = "带徒岗位")
+    private String apprenticePosition;
+
+    /** 删除状态 */
+    private Long delFlag;
+
+    /** 创建人 */
+    private String createrCode;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    private Date createdate;
+
+    /** 修改人 */
+    private String updaterCode;
+
+    /** 修改时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd" , timezone = "GMT+8")
+    private Date updatedate;
+
+    /** 部门编号 */
+    private Long deptId;
+
+    /** 备注 */
+    @Excel(name = "备注")
+    private String remarks;
+
+    public void setTrainerId(Long trainerId)
+    {
+        this.trainerId = trainerId;
+    }
+
+    public Long getTrainerId()
+    {
+        return trainerId;
+    }
+    public void setStaffId(String staffId)
+    {
+        this.staffId = staffId;
+    }
+
+    public String getStaffId()
+    {
+        return staffId;
+    }
+    public void setTrainerName(String trainerName)
+    {
+        this.trainerName = trainerName;
+    }
+
+    public String getTrainerName()
+    {
+        return trainerName;
+    }
+    public void setTeam(String team)
+    {
+        this.team = team;
+    }
+
+    public String getTeam()
+    {
+        return team;
+    }
+    public void setPost(String post)
+    {
+        this.post = post;
+    }
+
+    public String getPost()
+    {
+        return post;
+    }
+    public void setExperience(String experience)
+    {
+        this.experience = experience;
+    }
+
+    public String getExperience()
+    {
+        return experience;
+    }
+    public void setApprenticePosition(String apprenticePosition)
+    {
+        this.apprenticePosition = apprenticePosition;
+    }
+
+    public String getApprenticePosition()
+    {
+        return apprenticePosition;
+    }
+    public void setDelFlag(Long delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setCreaterCode(String createrCode)
+    {
+        this.createrCode = createrCode;
+    }
+
+    public String getCreaterCode()
+    {
+        return createrCode;
+    }
+    public void setCreatedate(Date createdate)
+    {
+        this.createdate = createdate;
+    }
+
+    public Date getCreatedate()
+    {
+        return createdate;
+    }
+    public void setUpdaterCode(String updaterCode)
+    {
+        this.updaterCode = updaterCode;
+    }
+
+    public String getUpdaterCode()
+    {
+        return updaterCode;
+    }
+    public void setUpdatedate(Date updatedate)
+    {
+        this.updatedate = updatedate;
+    }
+
+    public Date getUpdatedate()
+    {
+        return updatedate;
+    }
+    public void setDeptId(Long deptId)
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId()
+    {
+        return deptId;
+    }
+    public void setRemarks(String remarks)
+    {
+        this.remarks = remarks;
+    }
+
+    public String getRemarks()
+    {
+        return remarks;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("trainerId", getTrainerId())
+            .append("staffId", getStaffId())
+            .append("trainerName", getTrainerName())
+            .append("team", getTeam())
+            .append("post", getPost())
+            .append("experience", getExperience())
+            .append("apprenticePosition", getApprenticePosition())
+            .append("delFlag", getDelFlag())
+            .append("createrCode", getCreaterCode())
+            .append("createdate", getCreatedate())
+            .append("updaterCode", getUpdaterCode())
+            .append("updatedate", getUpdatedate())
+            .append("deptId", getDeptId())
+            .append("remarks", getRemarks())
+            .toString();
+    }
+}

+ 19 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/domain/TTsYsplan.java

@@ -21,6 +21,7 @@ public class TTsYsplan extends BaseEntity
 
     /** 唯一标识ID */
     private Long id;
+    private Long pid;
 
     /** 培训员工编号 */
     @Excel(name = "培训员工编号")
@@ -132,6 +133,24 @@ public class TTsYsplan extends BaseEntity
 
     private String planStartData;
 
+    private String scorePass;
+
+    public Long getPid() {
+        return pid;
+    }
+
+    public void setPid(Long pid) {
+        this.pid = pid;
+    }
+
+    public String getScorePass() {
+        return scorePass;
+    }
+
+    public void setScorePass(String scorePass) {
+        this.scorePass = scorePass;
+    }
+
     public String getPlanStartData() {
         return planStartData;
     }

+ 1 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/mapper/TTsApproveMapper.java

@@ -21,6 +21,7 @@ public interface TTsApproveMapper
     public TTsApprove selectTTsApproveById(Long id);
 
     public List<TTsApprove> selectTTsApproveByNewId(Long id);
+    public List<TTsApprove> selectTTsApproveByContentId(Long id);
 
     /**
      * 查询导师带徒审批列表

+ 63 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/mapper/TTsTrainerMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.project.training.bccnew.mapper;
+
+import java.util.List;
+import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
+import com.ruoyi.project.training.bccnew.domain.TTsTrainer;
+
+/**
+ * 蒸汽裂解装置导师带徒导师库Mapper接口
+ * 
+ * @author ssy
+ * @date 2024-08-12
+ */
+public interface TTsTrainerMapper 
+{
+    /**
+     * 查询蒸汽裂解装置导师带徒导师库
+     * 
+     * @param trainerId 蒸汽裂解装置导师带徒导师库ID
+     * @return 蒸汽裂解装置导师带徒导师库
+     */
+    public TTsTrainer selectTTsTrainerById(Long trainerId);
+
+    /**
+     * 查询蒸汽裂解装置导师带徒导师库列表
+     * 
+     * @param tTsTrainer 蒸汽裂解装置导师带徒导师库
+     * @return 蒸汽裂解装置导师带徒导师库集合
+     */
+    @DataScope(deptAlias = "d")
+    public List<TTsTrainer> selectTTsTrainerList(TTsTrainer tTsTrainer);
+
+    /**
+     * 新增蒸汽裂解装置导师带徒导师库
+     * 
+     * @param tTsTrainer 蒸汽裂解装置导师带徒导师库
+     * @return 结果
+     */
+    public int insertTTsTrainer(TTsTrainer tTsTrainer);
+
+    /**
+     * 修改蒸汽裂解装置导师带徒导师库
+     * 
+     * @param tTsTrainer 蒸汽裂解装置导师带徒导师库
+     * @return 结果
+     */
+    public int updateTTsTrainer(TTsTrainer tTsTrainer);
+
+    /**
+     * 删除蒸汽裂解装置导师带徒导师库
+     * 
+     * @param trainerId 蒸汽裂解装置导师带徒导师库ID
+     * @return 结果
+     */
+    public int deleteTTsTrainerById(Long trainerId);
+
+    /**
+     * 批量删除蒸汽裂解装置导师带徒导师库
+     * 
+     * @param trainerIds 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteTTsTrainerByIds(Long[] trainerIds);
+}

+ 2 - 1
master/src/main/java/com/ruoyi/project/training/bccnew/service/ITTsApproveService.java

@@ -22,8 +22,9 @@ public interface ITTsApproveService
      */
     public TTsApprove selectTTsApproveById(Long id);
     public List<TTsApprove> selectTTsApproveByNewId(Long newId);
+    public List<TTsApprove> selectTTsApproveByContentId(Long newId);
 
-    public AjaxResult doApprove(Long id, String planType, Long userId, String userName);
+    public AjaxResult doApprove(Long id, String planType, Long userId, String userName,String processName);
 
     public AjaxResult handle(DevTask devTask, String username, String userId);
 

+ 61 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/service/ITTsTrainerService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.project.training.bccnew.service;
+
+import java.util.List;
+import com.ruoyi.project.training.bccnew.domain.TTsTrainer;
+
+/**
+ * 蒸汽裂解装置导师带徒导师库Service接口
+ * 
+ * @author ssy
+ * @date 2024-08-12
+ */
+public interface ITTsTrainerService 
+{
+    /**
+     * 查询蒸汽裂解装置导师带徒导师库
+     * 
+     * @param trainerId 蒸汽裂解装置导师带徒导师库ID
+     * @return 蒸汽裂解装置导师带徒导师库
+     */
+    public TTsTrainer selectTTsTrainerById(Long trainerId);
+
+    /**
+     * 查询蒸汽裂解装置导师带徒导师库列表
+     * 
+     * @param tTsTrainer 蒸汽裂解装置导师带徒导师库
+     * @return 蒸汽裂解装置导师带徒导师库集合
+     */
+    public List<TTsTrainer> selectTTsTrainerList(TTsTrainer tTsTrainer);
+
+    /**
+     * 新增蒸汽裂解装置导师带徒导师库
+     * 
+     * @param tTsTrainer 蒸汽裂解装置导师带徒导师库
+     * @return 结果
+     */
+    public int insertTTsTrainer(TTsTrainer tTsTrainer);
+
+    /**
+     * 修改蒸汽裂解装置导师带徒导师库
+     * 
+     * @param tTsTrainer 蒸汽裂解装置导师带徒导师库
+     * @return 结果
+     */
+    public int updateTTsTrainer(TTsTrainer tTsTrainer);
+
+    /**
+     * 批量删除蒸汽裂解装置导师带徒导师库
+     * 
+     * @param trainerIds 需要删除的蒸汽裂解装置导师带徒导师库ID
+     * @return 结果
+     */
+    public int deleteTTsTrainerByIds(Long[] trainerIds);
+
+    /**
+     * 删除蒸汽裂解装置导师带徒导师库信息
+     * 
+     * @param trainerId 蒸汽裂解装置导师带徒导师库ID
+     * @return 结果
+     */
+    public int deleteTTsTrainerById(Long trainerId);
+}

+ 15 - 6
master/src/main/java/com/ruoyi/project/training/bccnew/service/impl/TTsApproveServiceImpl.java

@@ -75,19 +75,28 @@ public class TTsApproveServiceImpl implements ITTsApproveService {
     @Override
     public TTsApprove selectTTsApproveById(Long id) {
         return tTsApproveMapper.selectTTsApproveById(id);
-    }@Override
+    }
+
+    @Override
     public List<TTsApprove> selectTTsApproveByNewId(Long id) {
         return tTsApproveMapper.selectTTsApproveByNewId(id);
     }
 
     @Override
-    public AjaxResult doApprove(Long id, String planType, Long userId, String userName) {
+    public List<TTsApprove> selectTTsApproveByContentId(Long id) {
+        return tTsApproveMapper.selectTTsApproveByContentId(id);
+    }
+
+    @Override
+    public AjaxResult doApprove(Long id, String planType, Long userId, String userName, String processName) {
         TTsApprove tTsApprove = new TTsApprove();
         tTsApprove.setPlanType(planType);
-        tTsApprove.setTrainingId(id);
+        if (processName.equals("dsdtTraining")) {
+            tTsApprove.setTrainingId(id);
+        } else {
+            tTsApprove.setContentId(id);
+        }
         tTsApproveMapper.insertTTsApprove(tTsApprove);
-        TTsNew tTsNew = tTsNewService.selectTTsNewById(id);
-        SysUser sysUser = userMapper.selectUserByStaffId(tTsNew.getStaffId());
         // 开始申请流程
         tTsApprove.setApNo(DateUtils.dateTimeNow() + userId);
         long businessKey = tTsApprove.getId();
@@ -108,7 +117,7 @@ public class TTsApproveServiceImpl implements ITTsApproveService {
         }
         variables.put("jluser", executor.toString());
         //采用key来启动流程定义并设置流程变量,返回流程实例
-        ProcessInstance pi = runtimeService.startProcessInstanceByKey("dsdtTraining", String.valueOf(businessKey), variables);
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey(processName, String.valueOf(businessKey), variables);
         tTsApprove.setProcessId(pi.getProcessInstanceId());
         tTsApprove.setApplicantName(userName);
         tTsApprove.setApplicant(userId.toString());

+ 7 - 7
master/src/main/java/com/ruoyi/project/training/bccnew/service/impl/TTsNewServiceImpl.java

@@ -406,7 +406,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
             TTsFirstplan tTsFirstplan = new TTsFirstplan();
             tTsFirstplan.setNewId(tTsNew.getNewId());
             for (TTsFirstplan tsFirstplan : tTsFirstplanMapper.selectTTsFirstplanListByNewId(tTsFirstplan)) {
-                if (tsFirstplan.getPlanStatus() == null || tsFirstplan.getPlanStatus() == 0) {
+                if (tsFirstplan.getPlanStatus() == null || tsFirstplan.getPlanStatus() == 0|| tsFirstplan.getPlanStatus() == 2) {
                     tsFirstplan.setPlanStatus(4L);
                     tTsFirstplanMapper.updateTTsFirstplan(tsFirstplan);
                 }
@@ -415,7 +415,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
                 TTsLjplan entity = new TTsLjplan();
                 entity.setNewId(tTsNew.getNewId());
                 for (TTsLjplan item : tTsLjplanMapper.selectTTsLjplanListByNewId(entity)) {
-                    if (item.getPlanStatus() == null || item.getPlanStatus() == 0) {
+                    if (item.getPlanStatus() == null || item.getPlanStatus() == 0|| item.getPlanStatus() == 2) {
                         item.setPlanStatus(4L);
                         tTsLjplanMapper.updateTTsLjplan(item);
                     }
@@ -424,7 +424,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
                 TTsYsplan entity = new TTsYsplan();
                 entity.setNewId(tTsNew.getNewId());
                 for (TTsYsplan item : tTsYsplanMapper.selectTTsYsplanListByNewId(entity)) {
-                    if (item.getPlanStatus() == null || item.getPlanStatus() == 0) {
+                    if (item.getPlanStatus() == null || item.getPlanStatus() == 0|| item.getPlanStatus() == 2) {
                         item.setPlanStatus(4L);
                         tTsYsplanMapper.updateTTsYsplan(item);
                     }
@@ -433,7 +433,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
                 TTsFlplan entity = new TTsFlplan();
                 entity.setNewId(tTsNew.getNewId());
                 for (TTsFlplan item : tTsFlplanMapper.selectTTsFlplanListByNewId(entity)) {
-                    if (item.getPlanStatus() == null || item.getPlanStatus() == 0) {
+                    if (item.getPlanStatus() == null || item.getPlanStatus() == 0|| item.getPlanStatus() == 2) {
                         item.setPlanStatus(4L);
                         tTsFlplanMapper.updateTTsFlplan(item);
                     }
@@ -442,14 +442,14 @@ public class TTsNewServiceImpl implements ITTsNewService {
                 TTsFtplan entity = new TTsFtplan();
                 entity.setNewId(tTsNew.getNewId());
                 for (TTsFtplan item : tTsFtplanMapper.selectTTsFtplanListByNewId(entity)) {
-                    if (item.getPlanStatus() == null || item.getPlanStatus() == 0) {
+                    if (item.getPlanStatus() == null || item.getPlanStatus() == 0|| item.getPlanStatus() == 2) {
                         item.setPlanStatus(4L);
                         tTsFtplanMapper.updateTTsFtplan(item);
                     }
                 }
             }
             tTsNewMapper.updateTTsNew(tTsNew);
-            tsApproveService.doApprove(tTsNew.getNewId(), tsNew.getPlanType().toString(), userId, nickName);
+            tsApproveService.doApprove(tTsNew.getNewId(), tsNew.getPlanType().toString(), userId, nickName,"dsdtTraining");
         }
         if (tTsNew.getPlanStatus() == 5) {
             TTsFirstplan plan = new TTsFirstplan();
@@ -507,7 +507,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
                     !CollectionUtils.isEmpty(tTsFirstplansDone) &&
                     tTsFirstplans.size() == tTsFirstplansDone.size() && flag) {
                 tTsNewMapper.updateTTsNew(tTsNew);
-                tsApproveService.doApprove(tTsNew.getNewId(), tsNew.getPlanType().toString(), userId, nickName);
+                tsApproveService.doApprove(tTsNew.getNewId(), tsNew.getPlanType().toString(), userId, nickName,"dsdtTraining");
             }
         }
         return 1;

+ 93 - 0
master/src/main/java/com/ruoyi/project/training/bccnew/service/impl/TTsTrainerServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.project.training.bccnew.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.project.training.bccnew.mapper.TTsTrainerMapper;
+import com.ruoyi.project.training.bccnew.domain.TTsTrainer;
+import com.ruoyi.project.training.bccnew.service.ITTsTrainerService;
+
+/**
+ * 蒸汽裂解装置导师带徒导师库Service业务层处理
+ *
+ * @author ssy
+ * @date 2024-08-12
+ */
+@Service
+public class TTsTrainerServiceImpl implements ITTsTrainerService
+{
+    @Autowired
+    private TTsTrainerMapper tTsTrainerMapper;
+
+    /**
+     * 查询蒸汽裂解装置导师带徒导师库
+     *
+     * @param trainerId 蒸汽裂解装置导师带徒导师库ID
+     * @return 蒸汽裂解装置导师带徒导师库
+     */
+    @Override
+    public TTsTrainer selectTTsTrainerById(Long trainerId)
+    {
+        return tTsTrainerMapper.selectTTsTrainerById(trainerId);
+    }
+
+    /**
+     * 查询蒸汽裂解装置导师带徒导师库列表
+     *
+     * @param tTsTrainer 蒸汽裂解装置导师带徒导师库
+     * @return 蒸汽裂解装置导师带徒导师库
+     */
+    @Override
+    public List<TTsTrainer> selectTTsTrainerList(TTsTrainer tTsTrainer)
+    {
+        return tTsTrainerMapper.selectTTsTrainerList(tTsTrainer);
+    }
+
+    /**
+     * 新增蒸汽裂解装置导师带徒导师库
+     *
+     * @param tTsTrainer 蒸汽裂解装置导师带徒导师库
+     * @return 结果
+     */
+    @Override
+    public int insertTTsTrainer(TTsTrainer tTsTrainer)
+    {
+        return tTsTrainerMapper.insertTTsTrainer(tTsTrainer);
+    }
+
+    /**
+     * 修改蒸汽裂解装置导师带徒导师库
+     *
+     * @param tTsTrainer 蒸汽裂解装置导师带徒导师库
+     * @return 结果
+     */
+    @Override
+    public int updateTTsTrainer(TTsTrainer tTsTrainer)
+    {
+        return tTsTrainerMapper.updateTTsTrainer(tTsTrainer);
+    }
+
+    /**
+     * 批量删除蒸汽裂解装置导师带徒导师库
+     *
+     * @param trainerIds 需要删除的蒸汽裂解装置导师带徒导师库ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTTsTrainerByIds(Long[] trainerIds)
+    {
+        return tTsTrainerMapper.deleteTTsTrainerByIds(trainerIds);
+    }
+
+    /**
+     * 删除蒸汽裂解装置导师带徒导师库信息
+     *
+     * @param trainerId 蒸汽裂解装置导师带徒导师库ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTTsTrainerById(Long trainerId)
+    {
+        return tTsTrainerMapper.deleteTTsTrainerById(trainerId);
+    }
+}

+ 2 - 2
master/src/main/resources/application.yml

@@ -9,7 +9,7 @@ ruoyi:
   # 实例演示开关
   demoEnabled: true
   # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /u03/cpmsfile/uploadPath)
-  profile: /u03/cpmsfile/uploadPath
+  profile: D:/ruoyi/uploadPath
   # 邮件中链接跳转路径 示例(本地:http://localhost/cpms/index.html#,服务器:http://47.114.101.16:8080/cpms/index.html# https://cpms.basf-ypc.net.cn/cpms/index.html#)
   requestJumpPath: https://cpms.basf-ypc.net.cn/cpms/index.html#
   # 图像识别地址
@@ -184,7 +184,7 @@ jodconverter:
     enabled: true
     # 设置LibreOffice主目录
     #    office-home: /opt/libreoffice7.2  C:/Program Files/LibreOffice
-    office-home: /opt/libreoffice7.2
+    office-home: C:/Program Files/LibreOffice
     max-tasks-per-process: 100
     port-numbers: 8100
     # 开启多个LibreOffice进程,每个端口对应一个进程

+ 11 - 1
master/src/main/resources/mybatis/training/bccnew/TTsApproveMapper.xml

@@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <resultMap type="TTsApprove" id="TTsApproveResult">
         <result property="id"    column="id"    />
         <result property="trainingId"    column="training_id"    />
+        <result property="contentId"    column="content_id"    />
         <result property="apNo"    column="ap_no"    />
         <result property="processId"    column="process_id"    />
         <result property="applicant"    column="applicant"    />
@@ -27,7 +28,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectTTsApproveVo">
-        select d.training_id,d.id, d.ap_no, d.process_id, d.applicant, d.application_time, d.applicant_name, d.approver, d.approve_time, d.approver_name, d.status, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.plan_type ,s.dept_name from t_ts_approve d
+        select d.training_id,d.content_id,d.id, d.ap_no, d.process_id, d.applicant, d.application_time, d.applicant_name, d.approver, d.approve_time, d.approver_name, d.status, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.plan_type ,s.dept_name from t_ts_approve d
       left join sys_dept s on s.dept_id = d.dept_id
     </sql>
 
@@ -36,6 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <where>  
             <if test="apNo != null  and apNo != ''"> and ap_no = #{apNo}</if>
             <if test="trainingId != null  and trainingId != ''"> and training_id = #{trainingId}</if>
+            <if test="contentId != null  and contentId != ''"> and content_id = #{contentId}</if>
             <if test="processId != null  and processId != ''"> and process_id = #{processId}</if>
             <if test="applicant != null  and applicant != ''"> and applicant = #{applicant}</if>
             <if test="applicationTime != null "> and application_time = #{applicationTime}</if>
@@ -66,6 +68,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where training_id = #{trainingId}
     </select>
 
+    <select id="selectTTsApproveByContentId" parameterType="Long" resultMap="TTsApproveResult">
+        <include refid="selectTTsApproveVo"/>
+        where content_id = #{contentId}
+    </select>
+
     <insert id="insertTTsApprove" parameterType="TTsApprove">
         <selectKey keyProperty="id" resultType="long" order="BEFORE">
             SELECT seq_t_ts_approve.NEXTVAL as id FROM DUAL
@@ -74,6 +81,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="id != null">id,</if>
             <if test="trainingId != null">training_id,</if>
+            <if test="contentId != null">content_id,</if>
             <if test="apNo != null">ap_no,</if>
             <if test="processId != null">process_id,</if>
             <if test="applicant != null">applicant,</if>
@@ -94,6 +102,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
             <if test="trainingId != null">#{trainingId},</if>
+            <if test="contentId != null">#{contentId},</if>
             <if test="apNo != null">#{apNo},</if>
             <if test="processId != null">#{processId},</if>
             <if test="applicant != null">#{applicant},</if>
@@ -117,6 +126,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         update t_ts_approve
         <trim prefix="SET" suffixOverrides=",">
             <if test="trainingId != null">training_id = #{trainingId},</if>
+            <if test="contentId != null">content_id = #{contentId},</if>
             <if test="apNo != null">ap_no = #{apNo},</if>
             <if test="processId != null">process_id = #{processId},</if>
             <if test="applicant != null">applicant = #{applicant},</if>

+ 9 - 5
master/src/main/resources/mybatis/training/bccnew/TTsFlplanMapper.xml

@@ -35,10 +35,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="sortTmpl"    column="sort_tmpl"    />
         <result property="planDate"    column="plan_date"    />
         <result property="planEndData"    column="plan_end_data"    />
+        <result property="scorePass"    column="score_pass"    />
     </resultMap>
 
     <sql id="selectTTsFlplanVo">
-        select c.plan_date,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, c.content, c.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name from t_ts_flplan d
+        select c.pid,d.score_pass,c.plan_date,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, c.content, c.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name from t_ts_flplan d
       left join sys_dept s on s.dept_id = d.dept_id
       left join t_ts_flplan_content c on d.id=c.pid
     </sql>
@@ -74,14 +75,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
     
     <select id="selectTTsFlplanById" parameterType="Long" resultMap="TTsFlplanResult">
-        select d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
+        select d.score_pass,d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
         from t_ts_flplan d
         left join sys_dept s on s.dept_id = d.dept_id
         where d.id = #{id}
     </select>
 
     <select id="selectTTsFlplanListByNewId" parameterType="TTsFlplan" resultMap="TTsFlplanResult">
-        select d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
+        select d.score_pass,d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
         from t_ts_flplan d
         left join sys_dept s on s.dept_id = d.dept_id
         <where>
@@ -133,7 +134,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="timer != null">timer,</if>
             <if test="timerNeed != null">timer_need,</if>
             <if test="sortTmpl != null">sort_tmpl,</if>
-         </trim>
+            <if test="scorePass != null">score_pass,</if>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
             <if test="newId != null">#{newId},</if>
@@ -162,7 +164,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="timer != null">#{timer},</if>
             <if test="timerNeed != null">#{timerNeed},</if>
             <if test="sortTmpl != null">#{sortTmpl},</if>
-         </trim>
+            <if test="scorePass != null">#{scorePass},</if>
+        </trim>
     </insert>
 
     <update id="updateTTsFlplan" parameterType="TTsFlplan">
@@ -194,6 +197,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="timer != null">timer = #{timer},</if>
             <if test="timerNeed != null">timer_need = #{timerNeed},</if>
             <if test="sortTmpl != null">sort_tmpl=#{sortTmpl},</if>
+            <if test="scorePass != null">score_pass=#{scorePass},</if>
         </trim>
         where id = #{id}
     </update>

+ 10 - 5
master/src/main/resources/mybatis/training/bccnew/TTsFtplanMapper.xml

@@ -35,10 +35,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="sortTmpl"    column="sort_tmpl"    />
         <result property="planDate"    column="plan_date"    />
         <result property="planEndData"    column="plan_end_data"    />
+        <result property="scorePass"    column="score_pass"    />
     </resultMap>
 
     <sql id="selectTTsFtplanVo">
-        select c.plan_date,d.plan_end_data,d.sort_tmpl,d.file_url,d.file_name,d.timer,d.timer_need,d.id, d.new_id, d.course_code, d.topic, c.content, c.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,s.dept_name from t_ts_ftplan d
+        select c.pid,d.score_pass,c.plan_date,d.plan_end_data,d.sort_tmpl,d.file_url,d.file_name,d.timer,d.timer_need,d.id, d.new_id, d.course_code, d.topic, c.content, c.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,s.dept_name from t_ts_ftplan d
       left join sys_dept s on s.dept_id = d.dept_id
       left join t_ts_ftplan_content c on d.id=c.pid
     </sql>
@@ -74,14 +75,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
     
     <select id="selectTTsFtplanById" parameterType="Long" resultMap="TTsFtplanResult">
-        select d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
+        select d.score_pass,d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
         from t_ts_ftplan d
                  left join sys_dept s on s.dept_id = d.dept_id
         where d.id = #{id}
     </select>
 
     <select id="selectTTsFtplanListByNewId" parameterType="TTsFtplan" resultMap="TTsFtplanResult">
-        select d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
+        select d.score_pass,d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
         from t_ts_ftplan d
         left join sys_dept s on s.dept_id = d.dept_id
         <where>
@@ -132,7 +133,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="timer != null">timer,</if>
             <if test="timerNeed != null">timer_need,</if>
             <if test="sortTmpl != null">sort_tmpl,</if>
-         </trim>
+            <if test="scorePass != null">score_pass,</if>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
             <if test="newId != null">#{newId},</if>
@@ -160,7 +162,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="fileName != null">#{fileName},</if>
             <if test="timer != null">#{timer},</if>
             <if test="timerNeed != null">#{timerNeed},</if>
-            <if test="sortTmpl != null">#{sortTmpl},</if>         </trim>
+            <if test="sortTmpl != null">#{sortTmpl},</if>
+            <if test="scorePass != null">#{scorePass},</if>
+        </trim>
     </insert>
 
     <update id="updateTTsFtplan" parameterType="TTsFtplan">
@@ -192,6 +196,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="timer != null">timer = #{timer},</if>
             <if test="timerNeed != null">timer_need = #{timerNeed},</if>
             <if test="sortTmpl != null">sort_tmpl=#{sortTmpl},</if>
+            <if test="scorePass != null">score_pass=#{scorePass},</if>
         </trim>
         where id = #{id}
     </update>

+ 9 - 5
master/src/main/resources/mybatis/training/bccnew/TTsLjplanMapper.xml

@@ -35,10 +35,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="sortTmpl"    column="sort_tmpl"    />
         <result property="planDate"    column="plan_date"    />
         <result property="planEndData"    column="plan_end_data"    />
+        <result property="scorePass"    column="score_pass"    />
     </resultMap>
 
     <sql id="selectTTsLjplanVo">
-        select c.plan_date,d.plan_end_data,d.sort_tmpl,d.file_url,d.file_name,d.timer,d.timer_need,d.id, d.new_id, d.course_code, d.topic, c.content, c.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,s.dept_name from t_ts_ljplan d
+        select c.pid,d.score_pass,c.plan_date,d.plan_end_data,d.sort_tmpl,d.file_url,d.file_name,d.timer,d.timer_need,d.id, d.new_id, d.course_code, d.topic, c.content, c.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,s.dept_name from t_ts_ljplan d
       left join sys_dept s on s.dept_id = d.dept_id
       left join t_ts_ljplan_content c on d.id=c.pid
     </sql>
@@ -74,14 +75,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
     
     <select id="selectTTsLjplanById" parameterType="Long" resultMap="TTsLjplanResult">
-        select d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
+        select d.score_pass,d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
         from t_ts_ljplan d
                  left join sys_dept s on s.dept_id = d.dept_id
         where d.id = #{id}
     </select>
 
     <select id="selectTTsLjplanListByNewId" parameterType="TTsLjplan" resultMap="TTsLjplanResult">
-        select d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
+        select d.score_pass,d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
         from t_ts_ljplan d
         left join sys_dept s on s.dept_id = d.dept_id
         <where>
@@ -132,7 +133,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="timer != null">timer,</if>
             <if test="timerNeed != null">timer_need,</if>
             <if test="sortTmpl != null">sort_tmpl,</if>
-         </trim>
+            <if test="scorePass != null">score_pass,</if>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
             <if test="newId != null">#{newId},</if>
@@ -161,7 +163,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="timer != null">#{timer},</if>
             <if test="timerNeed != null">#{timerNeed},</if>
             <if test="sortTmpl != null">#{sortTmpl},</if>
-         </trim>
+            <if test="scorePass != null">#{scorePass},</if>
+        </trim>
     </insert>
 
     <update id="updateTTsLjplan" parameterType="TTsLjplan">
@@ -193,6 +196,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="timer != null">timer = #{timer},</if>
             <if test="timerNeed != null">timer_need = #{timerNeed},</if>
             <if test="sortTmpl != null">sort_tmpl=#{sortTmpl},</if>
+            <if test="scorePass != null">score_pass=#{scorePass},</if>
         </trim>
         where id = #{id}
     </update>

+ 126 - 0
master/src/main/resources/mybatis/training/bccnew/TTsTrainerMapper.xml

@@ -0,0 +1,126 @@
+<?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.ruoyi.project.training.bccnew.mapper.TTsTrainerMapper">
+    
+    <resultMap type="TTsTrainer" id="TTsTrainerResult">
+        <result property="trainerId"    column="trainer_id"    />
+        <result property="staffId"    column="staff_id"    />
+        <result property="trainerName"    column="trainer_name"    />
+        <result property="team"    column="team"    />
+        <result property="post"    column="post"    />
+        <result property="experience"    column="experience"    />
+        <result property="apprenticePosition"    column="apprentice_position"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createrCode"    column="creater_code"    />
+        <result property="createdate"    column="createdate"    />
+        <result property="updaterCode"    column="updater_code"    />
+        <result property="updatedate"    column="updatedate"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="remarks"    column="remarks"    />
+        <result property="deptName" column="dept_name" />
+    </resultMap>
+
+    <sql id="selectTTsTrainerVo">
+        select d.trainer_id, d.staff_id, d.trainer_name, d.team, d.post, d.experience, d.apprentice_position, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks ,s.dept_name from t_ts_trainer d
+      left join sys_dept s on s.dept_id = d.dept_id
+    </sql>
+
+    <select id="selectTTsTrainerList" parameterType="TTsTrainer" resultMap="TTsTrainerResult">
+        <include refid="selectTTsTrainerVo"/>
+        <where>  
+            <if test="staffId != null "> and staff_id = #{staffId}</if>
+            <if test="trainerName != null  and trainerName != ''"> and trainer_name like concat(concat('%', #{trainerName}), '%')</if>
+            <if test="team != null  and team != ''"> and team = #{team}</if>
+            <if test="post != null  and post != ''"> and post = #{post}</if>
+            <if test="experience != null  and experience != ''"> and experience = #{experience}</if>
+            <if test="apprenticePosition != null  and apprenticePosition != ''"> and apprentice_position = #{apprenticePosition}</if>
+            <if test="createrCode != null  and createrCode != ''"> and creater_code = #{createrCode}</if>
+            <if test="createdate != null "> and createdate = #{createdate}</if>
+            <if test="updaterCode != null  and updaterCode != ''"> and updater_code = #{updaterCode}</if>
+            <if test="updatedate != null "> and updatedate = #{updatedate}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            and d.del_flag = 0
+        </where>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+    
+    <select id="selectTTsTrainerById" parameterType="Long" resultMap="TTsTrainerResult">
+        <include refid="selectTTsTrainerVo"/>
+        where trainer_id = #{trainerId}
+    </select>
+        
+    <insert id="insertTTsTrainer" parameterType="TTsTrainer">
+        <selectKey keyProperty="trainerId" resultType="long" order="BEFORE">
+            SELECT seq_t_ts_trainer.NEXTVAL as trainerId FROM DUAL
+        </selectKey>
+        insert into t_ts_trainer
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="trainerId != null">trainer_id,</if>
+            <if test="staffId != null">staff_id,</if>
+            <if test="trainerName != null">trainer_name,</if>
+            <if test="team != null">team,</if>
+            <if test="post != null">post,</if>
+            <if test="experience != null">experience,</if>
+            <if test="apprenticePosition != null">apprentice_position,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createrCode != null">creater_code,</if>
+            <if test="createdate != null">createdate,</if>
+            <if test="updaterCode != null">updater_code,</if>
+            <if test="updatedate != null">updatedate,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="remarks != null">remarks,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="trainerId != null">#{trainerId},</if>
+            <if test="staffId != null">#{staffId},</if>
+            <if test="trainerName != null">#{trainerName},</if>
+            <if test="team != null">#{team},</if>
+            <if test="post != null">#{post},</if>
+            <if test="experience != null">#{experience},</if>
+            <if test="apprenticePosition != null">#{apprenticePosition},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createrCode != null">#{createrCode},</if>
+            <if test="createdate != null">#{createdate},</if>
+            <if test="updaterCode != null">#{updaterCode},</if>
+            <if test="updatedate != null">#{updatedate},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="remarks != null">#{remarks},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTTsTrainer" parameterType="TTsTrainer">
+        update t_ts_trainer
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="staffId != null">staff_id = #{staffId},</if>
+            <if test="trainerName != null">trainer_name = #{trainerName},</if>
+            <if test="team != null">team = #{team},</if>
+            <if test="post != null">post = #{post},</if>
+            <if test="experience != null">experience = #{experience},</if>
+            <if test="apprenticePosition != null">apprentice_position = #{apprenticePosition},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createrCode != null">creater_code = #{createrCode},</if>
+            <if test="createdate != null">createdate = #{createdate},</if>
+            <if test="updaterCode != null">updater_code = #{updaterCode},</if>
+            <if test="updatedate != null">updatedate = #{updatedate},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+        </trim>
+        where trainer_id = #{trainerId}
+    </update>
+
+    <update id="deleteTTsTrainerById" parameterType="Long">
+        update t_ts_trainer set del_flag = 2 where trainer_id = #{trainerId}
+    </update>
+
+    <update id="deleteTTsTrainerByIds" parameterType="String">
+        update t_ts_trainer set del_flag = 2 where trainer_id in
+        <foreach item="trainerId" collection="array" open="(" separator="," close=")">
+            #{trainerId}
+        </foreach>
+    </update>
+    
+</mapper>

+ 8 - 3
master/src/main/resources/mybatis/training/bccnew/TTsYsplanMapper.xml

@@ -6,6 +6,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     
     <resultMap type="TTsYsplan" id="TTsYsplanResult">
         <result property="id"    column="id"    />
+        <result property="pid"    column="pid"    />
         <result property="newId"    column="new_id"    />
         <result property="courseCode"    column="course_code"    />
         <result property="topic"    column="topic"    />
@@ -35,10 +36,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="sortTmpl"    column="sort_tmpl"    />
         <result property="planDate"    column="plan_date"    />
         <result property="planEndData"    column="plan_end_data"    />
+        <result property="scorePass"    column="score_pass"    />
     </resultMap>
 
     <sql id="selectTTsYsplanVo">
-        select c.plan_date,d.plan_end_data,d.sort_tmpl,d.file_url,d.file_name,d.timer,d.timer_need,d.id, d.new_id, d.course_code, d.topic, c.content, c.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,s.dept_name from t_ts_ysplan d
+        select c.pid,d.score_pass,c.plan_date,d.plan_end_data,d.sort_tmpl,d.file_url,d.file_name,d.timer,d.timer_need,d.id, d.new_id, d.course_code, d.topic, c.content, c.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,s.dept_name from t_ts_ysplan d
       left join sys_dept s on s.dept_id = d.dept_id
       left join t_ts_ysplan_content c on d.id=c.pid
     </sql>
@@ -74,14 +76,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
     
     <select id="selectTTsYsplanById" parameterType="Long" resultMap="TTsYsplanResult">
-        select d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
+        select d.score_pass,d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
         from t_ts_ysplan d
                  left join sys_dept s on s.dept_id = d.dept_id
         where d.id = #{id}
     </select>
 
     <select id="selectTTsYsplanListByNewId" parameterType="TTsYsplan" resultMap="TTsYsplanResult">
-        select d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
+        select d.score_pass,d.plan_start_data,d.plan_end_data,d.sort_tmpl,d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.plan_status, d.score_1, d.score_2, d.score_3 ,d.file_url,d.file_name,d.timer,d.timer_need,s.dept_name
         from t_ts_ysplan d
         left join sys_dept s on s.dept_id = d.dept_id
         <where>
@@ -132,6 +134,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="timer != null">timer,</if>
             <if test="timerNeed != null">timer_need,</if>
             <if test="sortTmpl != null">sort_tmpl,</if>
+            <if test="scorePass != null">score_pass,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -161,6 +164,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="timer != null">#{timer},</if>
             <if test="timerNeed != null">#{timerNeed},</if>
             <if test="sortTmpl != null">#{sortTmpl},</if>
+            <if test="scorePass != null">#{scorePass},</if>
          </trim>
     </insert>
 
@@ -193,6 +197,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="timer != null">timer = #{timer},</if>
             <if test="timerNeed != null">timer_need = #{timerNeed},</if>
             <if test="sortTmpl != null">sort_tmpl=#{sortTmpl},</if>
+            <if test="scorePass != null">score_pass=#{scorePass},</if>
         </trim>
         where id = #{id}
     </update>

+ 50 - 0
master/src/main/resources/processes/bccnew/dsdtNoPass.bpmn

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
+  <process id="dsdtNoPass" name="导师带徒学员成绩不合格审批" isExecutable="true">
+    <startEvent id="startDsdt" name="开始" activiti:initiator="${applyUser}"></startEvent>
+    <userTask id="jlTask" name="装置经理" activiti:candidateUsers="#{jluser}"></userTask>
+    <endEvent id="endDsdt" name="End"></endEvent>
+    <sequenceFlow id="flow1" sourceRef="startDsdt" targetRef="jlTask"></sequenceFlow>
+    <sequenceFlow id="flow2" name="补考" sourceRef="jlTask" targetRef="endDsdt">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
+    </sequenceFlow>
+    <endEvent id="endDsdt2" name="End"></endEvent>
+    <sequenceFlow id="flow3" name="重新学习" sourceRef="jlTask" targetRef="endDsdt2">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 0}]]></conditionExpression>
+    </sequenceFlow>
+  </process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_dsdtNoPass">
+    <bpmndi:BPMNPlane bpmnElement="dsdtNoPass" id="BPMNPlane_dsdtNoPass">
+      <bpmndi:BPMNShape bpmnElement="startDsdt" id="BPMNShape_startDsdt">
+        <omgdc:Bounds height="35.0" width="35.0" x="70.0" y="60.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="jlTask" id="BPMNShape_jlTask">
+        <omgdc:Bounds height="55.0" width="105.0" x="170.0" y="50.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="endDsdt" id="BPMNShape_endDsdt">
+        <omgdc:Bounds height="35.0" width="35.0" x="340.0" y="60.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape bpmnElement="endDsdt2" id="BPMNShape_endDsdt2">
+        <omgdc:Bounds height="35.0" width="35.0" x="205.0" y="140.0"></omgdc:Bounds>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
+        <omgdi:waypoint x="105.0" y="77.0"></omgdi:waypoint>
+        <omgdi:waypoint x="170.0" y="77.0"></omgdi:waypoint>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
+        <omgdi:waypoint x="275.0" y="77.0"></omgdi:waypoint>
+        <omgdi:waypoint x="340.0" y="77.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="32.0" x="289.0" y="79.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
+        <omgdi:waypoint x="222.0" y="105.0"></omgdi:waypoint>
+        <omgdi:waypoint x="222.0" y="140.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="48.0" x="227.0" y="109.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</definitions>

BIN
master/src/main/resources/static/template/training/bccnewDsk.xlsx


BIN
master/src/main/resources/static/word/training/appraisalForm.docx


BIN
master/src/main/resources/static/word/training/commentImg/end1.png


BIN
master/src/main/resources/static/word/training/commentImg/end2.png


+ 53 - 0
ui/src/api/training/bccnew/trainer.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询蒸汽裂解装置导师带徒导师库列表
+export function listTrainer(query) {
+  return request({
+    url: '/bccnew/trainer/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询蒸汽裂解装置导师带徒导师库详细
+export function getTrainer(trainerId) {
+  return request({
+    url: '/bccnew/trainer/' + trainerId,
+    method: 'get'
+  })
+}
+
+// 新增蒸汽裂解装置导师带徒导师库
+export function addTrainer(data) {
+  return request({
+    url: '/bccnew/trainer',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改蒸汽裂解装置导师带徒导师库
+export function updateTrainer(data) {
+  return request({
+    url: '/bccnew/trainer',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除蒸汽裂解装置导师带徒导师库
+export function delTrainer(trainerId) {
+  return request({
+    url: '/bccnew/trainer/' + trainerId,
+    method: 'delete'
+  })
+}
+
+// 导出蒸汽裂解装置导师带徒导师库
+export function exportTrainer(query) {
+  return request({
+    url: '/bccnew/trainer/export',
+    method: 'get',
+    params: query
+  })
+}

+ 8 - 0
ui/src/api/training/bccnew/tsnew.js

@@ -67,3 +67,11 @@ export function handleTsnew(data) {
     data: data
   })
 }
+
+export function handleScore(data) {
+  return request({
+    url: '/bccnew/approve/handleScore',
+    method: 'put',
+    data: data
+  })
+}

+ 254 - 0
ui/src/views/approve/approveDetail/dsdtNoPass-detail.vue

@@ -0,0 +1,254 @@
+<template>
+  <el-dialog :close-on-click-modal="false"
+             :title="!this.taskForm.taskId == '' ? $t('处理') : $t('详情')"
+             :visible.sync="visible"
+             :append-to-body="true"
+             width="60%">
+    <el-descriptions :column="2" border size="small">
+      <el-descriptions-item label="员工姓名" :label-style="labelStyle">{{ this.dataForm.tTsNew.staffName }}
+      </el-descriptions-item>
+      <el-descriptions-item label="培训状态" :label-style="labelStyle">
+        <el-tag v-if="this.dataForm.tTsNew.planStatus == 2" size="small" type="warning">待考试</el-tag>
+        <el-tag v-if="this.dataForm.tTsNew.planStatus == 3" size="small" type="success">已完成</el-tag>
+        <el-tag v-if="this.dataForm.tTsNew.planStatus == 1" size="small" type="danger">已中止</el-tag>
+        <el-tag v-else-if="this.dataForm.tTsNew.planStatus == 0" size="small" type="info">未完成</el-tag>
+        <el-tag v-else-if="this.dataForm.tTsNew.planStatus == 4" size="small" type="danger">已中止待审批</el-tag>
+        <el-tag v-else-if="this.dataForm.tTsNew.planStatus == 5" size="small" type="success">已完成待审批</el-tag>
+      </el-descriptions-item>
+      <el-descriptions-item label="开始时间">
+        <template>
+          <span>{{ parseTime(dataForm.tTsNew.startdate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-descriptions-item>
+      <el-descriptions-item label="结束时间" :label-style="labelStyle">
+        <template>
+          <span>{{ parseTime(dataForm.tTsNew.enddate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-descriptions-item>
+      <el-descriptions-item label="导师姓名">
+        {{ this.dataForm.tTsNew.mentorStaffName }}
+      </el-descriptions-item>
+      <el-descriptions-item label="岗位" :label-style="labelStyle">
+        <template>
+          <span v-if="dataForm.tTsNew.planType == 1" size="small">裂解</span>
+          <span v-else-if="dataForm.tTsNew.planType == 2" size="small">压缩</span>
+          <span v-else-if="dataForm.tTsNew.planType == 3" size="small">分离</span>
+          <span v-else-if="dataForm.tTsNew.planType == 4" size="small">芳烃</span>
+        </template>
+      </el-descriptions-item>
+      <el-descriptions-item label="培训主题">
+        {{ this.dataForm.planItem.topic }}
+      </el-descriptions-item>
+      <el-descriptions-item label="培训成绩">
+        {{ this.dataForm.planItem.score2 == null ? this.dataForm.planItem.score1 : this.dataForm.planItem.score2 }}
+      </el-descriptions-item>
+      <el-descriptions-item label="考评表" :label-style="labelStyle">
+        <template>
+          <el-button icon="el-icon-folder" style="color:#6e96fa;"
+                     @click="handleDownloadWord(dataForm.tTsNew, 'appraisalForm')" circle></el-button>
+        </template>
+      </el-descriptions-item>
+      <el-descriptions-item label="备注" :span="2" :label-style="labelStyle">
+        {{ this.dataForm.tTsNew.remarks }}
+      </el-descriptions-item>
+    </el-descriptions>
+    <span slot="footer" class="dialog-footer">
+      <el-button v-if="!this.taskForm.taskId == ''" type="primary"
+                 @click="dataFormSubmit(1)" :disabled="submitDisabled">补考</el-button>
+      <el-button v-if="!this.taskForm.taskId == ''" type="danger"
+                 @click="dataFormSubmit(0)" :disabled="submitDisabled">重新学习</el-button>
+      <el-button @click="visible = false">{{ $t('返回') }}</el-button>
+    </span>
+    <div>
+      <span>{{ $t('流转详情') }}</span>
+      <el-table :data="historyList" border v-loading="historyLoading" style="width: 100%;">
+        <el-table-column prop="taskName" header-align="center" align="center"
+                         :label="$t('流程进度')"></el-table-column>
+        <el-table-column prop="userName" header-align="center" align="center" :label="$t('姓名')"></el-table-column>
+        <el-table-column prop="taskCreateTime" header-align="center" align="center"
+                         :label="$t('开始时间')"></el-table-column>
+        <el-table-column prop="taskEndTime" header-align="center" align="center"
+                         :label="$t('结束时间')"></el-table-column>
+        <el-table-column prop="comment" header-align="center" align="center"
+                         :label="$t('审批意见')"></el-table-column>
+      </el-table>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import {getHistorylist} from "@/api/ehs/approvedanger";
+import {genAppraisalFormWord, handleScore} from "@/api/training/bccnew/tsnew";
+import {getApprove} from "@/api/training/bccnew/tsApprove";
+
+export default {
+  name: "dsdtNopass-detail",
+  data() {
+    return {
+      //label样式
+      labelStyle: {'width': '200px'},
+      unitOptions: [],
+      //流转列表
+      historyList: [],
+      historyLoading: true,
+      submitDisabled: false,
+      taskName: '',
+      visible: false,
+      taskForm: {
+        comment: '',
+        taskId: '',
+        files: '',
+        govDate: '',
+        govFileList: [],
+        businessKey: '',
+        tTsApprove: {}
+      },
+      devList: [],
+      dataForm: {
+        id: null,
+        applicant: null,
+        applicationTime: null,
+        approver: null,
+        approveTime: null,
+        remarks: null,
+        status: 0,
+        delFlag: null,
+        approverName: null,
+        applicantName: null,
+        apNo: null,
+        processId: null,
+        tTsNew: {
+          mentorComments: null,
+          remarks: null,
+          planType: null,
+          mentorStaffName: null,
+          enddate: null,
+          startdate: null,
+          planStatus: null,
+          staffName: null,
+        }
+      },
+      form: {},
+      rules: {},
+      flag: false
+    }
+  },
+  methods: {
+    init(id, taskId, processId, taskName) {
+      this.submitDisabled = false;
+      this.reset();
+      this.devList = [];
+      this.dataForm = {
+        id: null,
+        applicant: null,
+        applicationTime: null,
+        approver: null,
+        approveTime: null,
+        remarks: null,
+        status: 0,
+        delFlag: null,
+        approverName: null,
+        applicantName: null,
+        apNo: null,
+        processId: null,
+        tTsNew: {
+          mentorComments: null,
+          remarks: null,
+          planType: null,
+          mentorStaffName: null,
+          enddate: null,
+          startdate: null,
+          planStatus: null,
+          staffName: null,
+        }
+      };
+      this.visible = true;
+      this.taskName = taskName;
+      this.taskForm.taskId = taskId;
+      this.taskForm.businessKey = id;
+      this.historyList = [];
+      console.log(this.taskForm.taskId)
+      this.dataForm.id = id || 0;
+      this.form.id = id || 0;
+      this.dataForm.processId = processId;
+      getApprove(id).then(res => {
+        this.dataForm = res.data;
+        switch (res.data.planType) {
+          case "1":
+            this.dataForm.planItem = res.data.tTsLjplan;
+            break;
+          case "2":
+            this.dataForm.planItem = res.data.tTsYsplan;
+            break;
+          case "3":
+            this.dataForm.planItem = res.data.tTsFlplan;
+            break;
+          case "4":
+            this.dataForm.planItem = res.data.tTsFtplan;
+            break;
+        }
+        this.devList.push(this.dataForm);
+      });
+      getHistorylist({processId: processId}).then(response => {
+        this.historyList = response.rows;
+        this.historyLoading = false
+      });
+    },
+    dataFormSubmit(val) {
+      this.submitDisabled = true;
+      this.taskForm.condition = val;
+      this.taskForm.tTsApprove = this.dataForm;
+      handleScore(this.taskForm).then(res => {
+        this.msgSuccess("审核成功");
+        this.visible = false;
+        this.$emit('refreshDataList')
+      })
+    },
+    reset() {
+      this.form = {
+        id: null,
+      };
+      this.resetForm("form");
+    },
+    // 文件下载处理
+    handleDownloadWord(row, type) {
+      let name;
+      let url;
+      console.log(row)
+      if (type == 'mentorAgreement') {
+        name = row.mentorAgreementWordPath;
+        url = row.mentorAgreementWordPath;
+        const a = document.createElement('a')
+        a.setAttribute('download', name)
+        a.setAttribute('target', '_blank')
+        a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
+        a.click()
+      } else if (type == 'targetPlan') {
+        name = row.targetPlanWordPath;
+        url = row.targetPlanWordPath;
+        const a = document.createElement('a')
+        a.setAttribute('download', name)
+        a.setAttribute('target', '_blank')
+        a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
+        a.click()
+      } else if (type == 'appraisalForm') {
+        genAppraisalFormWord(row.newId).then(res => {
+          name = res.msg;
+          url = res.msg;
+          console.log(url)
+          const a = document.createElement('a')
+          a.setAttribute('download', name)
+          a.setAttribute('target', '_blank')
+          a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
+          a.click()
+        })
+      }
+    },
+  }
+
+}
+</script>
+
+<style scoped>
+
+</style>

+ 8 - 2
ui/src/views/approve/approveDetail/dsdtTraining-detail.vue

@@ -49,13 +49,13 @@
              style="margin-top: 30px">
       <div>
           <el-form-item label="评语" prop="mentorComments" v-if="taskName=='装置经理'">
-            <el-input :disabled="this.taskForm.taskId == null||this.taskForm.taskId == undefined||this.taskForm.taskId == ''" type="textarea" v-model="form.mentorComments" placeholder="请输入评语"/>
+            <el-input disabled type="textarea" v-model="form.mentorComments" placeholder="请输入评语"/>
           </el-form-item>
       </div>
     </el-form>
     <span slot="footer" class="dialog-footer">
       <el-button v-if="!this.taskForm.taskId == ''" type="primary"
-                 @click="dataFormSubmit(1)" :disabled="submitDisabled">{{   $t('通过') }}</el-button>
+                 @click="dataFormSubmit(1)" :disabled="submitDisabled">{{ this.dataForm.tTsNew.planStatus==5?'通过':'中止' }}</el-button>
 <!--      <el-button v-if="!this.taskForm.taskId == ''&&taskName==='装置经理'" type="danger"-->
 <!--                 @click="dataFormSubmit(0)" :disabled="submitDisabled">{{ $t('拒绝') }}</el-button>-->
       <el-button @click="visible = false">{{ $t('返回') }}</el-button>
@@ -175,6 +175,12 @@ export default {
       getApprove(id).then(res => {
         this.dataForm = res.data;
         this.form = res.data.tTsNew;
+        if(res.data.tTsNew.planStatus==4){
+          this.form.mentorComments='该同志未能通过阶段性的培训考核,因此,中止其师徒关系。';
+        }
+        if(res.data.tTsNew.planStatus==5){
+          this.form.mentorComments='该同志通过三个阶段的培训学习,对装置的基本操作已经胜任,并且通过了考核,达到一名合格操作人员所具备的优良素质,同意结束其师徒关系。';
+        }
         this.devList.push(this.dataForm);
       });
       getHistorylist({processId: processId}).then(response => {

+ 9 - 0
ui/src/views/approve/myapprove/index.vue

@@ -59,6 +59,7 @@
     <sai-apply-detail v-if="saiApplyVisible" ref="saiApplyDetail" @refreshDataList="getList"></sai-apply-detail>
     <sems-week-check-detail v-if="semsWeekcheckDetailVisible" ref="semsWeekcheckDetail" @refreshDataList="getList"></sems-week-check-detail>
     <dsdt-training-detail v-if="dsdtTrainingDetailVisible" ref="dsdtTrainingDetail" @refreshDataList="getList"></dsdt-training-detail>
+    <dsdt-nopass-detail v-if="dsdtNopassDetailVisible" ref="dsdtNopassDetail" @refreshDataList="getList"></dsdt-nopass-detail>
 
   </div>
 </template>
@@ -81,10 +82,12 @@
   import SaiApplyDetail from "@/views/approve/approveDetail/sai-apply-detail";
   import SemsWeekCheckDetail from "@/views/approve/approveDetail/semsWeekCheck-detail";
   import DsdtTrainingDetail from "@/views/approve/approveDetail/dsdtTraining-detail.vue";
+  import DsdtNopassDetail from "@/views/approve/approveDetail/dsdtNoPass-detail.vue";
 
   export default {
     name: "Myapprove",
     components: {
+      DsdtNopassDetail,
       DsdtTrainingDetail,
       SemsWeekCheckDetail,
       SaiApplyDetail,
@@ -108,6 +111,7 @@
         saiApplyVisible:false,
         semsWeekcheckDetailVisible: false,
         dsdtTrainingDetailVisible: false,
+        dsdtNopassDetailVisible: false,
         // 选中数组
         ids: [],
         // 非单个禁用
@@ -262,6 +266,11 @@
           this.$nextTick(() => {
             this.$refs.dsdtTrainingDetail.init(row.approveObject.id, row.taskId, row.processId, row.taskName)
           })
+        } else if (row.processName == "导师带徒学员成绩不合格审批") {
+          this.dsdtNopassDetailVisible = true
+          this.$nextTick(() => {
+            this.$refs.dsdtNopassDetail.init(row.approveObject.id, row.taskId, row.processId, row.taskName)
+          })
         }else {
           this.approveInfo = row;
           this.infoTaskName = row.taskName;

+ 9 - 0
ui/src/views/approve/pending/index.vue

@@ -134,6 +134,7 @@
     <sai-apply-detail v-if="saiApplyVisible" ref="saiApplyDetail" @refreshDataList="getList"></sai-apply-detail>
     <sems-week-check-detail v-if="semsWeekcheckDetailVisible" ref="semsWeekcheckDetail" @refreshDataList="getList"></sems-week-check-detail>
     <dsdt-training-detail v-if="dsdtTrainingDetailVisible" ref="dsdtTrainingDetail" @refreshDataList="getList"></dsdt-training-detail>
+    <dsdt-nopass-detail v-if="dsdtNopassDetailVisible" ref="dsdtNopassDetail" @refreshDataList="getList"></dsdt-nopass-detail>
 
   </div>
 </template>
@@ -158,10 +159,12 @@
   import SaiApplyDetail from "@/views/approve/approveDetail/sai-apply-detail";
   import SemsWeekCheckDetail from "@/views/approve/approveDetail/semsWeekCheck-detail";
   import DsdtTrainingDetail from "@/views/approve/approveDetail/dsdtTraining-detail.vue";
+  import DsdtNopassDetail from "@/views/approve/approveDetail/dsdtNoPass-detail.vue";
 
   export default {
     name: "Pending",
     components: {
+      DsdtNopassDetail,
       DsdtTrainingDetail,
       SemsWeekCheckDetail,
       SaiApplyDetail,
@@ -197,6 +200,7 @@
         saiApplyVisible:false,
         semsWeekcheckDetailVisible: false,
         dsdtTrainingDetailVisible: false,
+        dsdtNopassDetailVisible: false,
         // 选中数组
         ids: [],
         // 非单个禁用
@@ -440,6 +444,11 @@
           this.$nextTick(() => {
             this.$refs.dsdtTrainingDetail.init(row.approveObject.id, row.taskId, row.processId, row.taskName)
           })
+        }  else if (row.processName == "导师带徒学员成绩不合格审批") {
+          this.dsdtNopassDetailVisible = true
+          this.$nextTick(() => {
+            this.$refs.dsdtNopassDetail.init(row.approveObject.id, row.taskId, row.processId, row.taskName)
+          })
         } else {
           this.approveInfo = row;
           this.infoTaskName = row.taskName;

+ 9 - 0
ui/src/views/approve/taskdone/index.vue

@@ -63,6 +63,7 @@
     <sai-apply-detail v-if="saiApplyVisible" ref="saiApplyDetail" @refreshDataList="getList"></sai-apply-detail>
     <sems-week-check-detail v-if="semsWeekcheckDetailVisible" ref="semsWeekcheckDetail" @refreshDataList="getList"></sems-week-check-detail>
     <dsdt-training-detail v-if="dsdtTrainingDetailVisible" ref="dsdtTrainingDetail" @refreshDataList="getList"></dsdt-training-detail>
+    <dsdt-nopass-detail v-if="dsdtNopassDetailVisible" ref="dsdtNopassDetail" @refreshDataList="getList"></dsdt-nopass-detail>
 
   </div>
 </template>
@@ -86,10 +87,12 @@
   import SaiApplyDetail from "@/views/approve/approveDetail/sai-apply-detail";
   import SemsWeekCheckDetail from "@/views/approve/approveDetail/semsWeekCheck-detail";
   import DsdtTrainingDetail from "@/views/approve/approveDetail/dsdtTraining-detail.vue";
+  import DsdtNopassDetail from "@/views/approve/approveDetail/dsdtNoPass-detail.vue";
 
   export default {
     name: "Taskdone",
     components: {
+      DsdtNopassDetail,
       DsdtTrainingDetail,
       SemsWeekCheckDetail,
       SaiApplyDetail,
@@ -114,6 +117,7 @@
         saiApplyVisible:false,
         semsWeekcheckDetailVisible: false,
         dsdtTrainingDetailVisible: false,
+        dsdtNopassDetailVisible: false,
         // 选中数组
         ids: [],
         // 非单个禁用
@@ -275,6 +279,11 @@
           this.$nextTick(() => {
             this.$refs.dsdtTrainingDetail.init(row.approveObject.id, row.taskId, row.processId, row.taskName)
           })
+        } else if (row.processName == "导师带徒学员成绩不合格审批") {
+          this.dsdtNopassDetailVisible = true
+          this.$nextTick(() => {
+            this.$refs.dsdtNopassDetail.init(row.approveObject.id, row.taskId, row.processId, row.taskName)
+          })
         } else {
           this.approveInfo = row;
           this.infoTaskName = row.taskName;

+ 1 - 1
ui/src/views/training/bccnew/flPlan/index.vue

@@ -77,7 +77,7 @@
       <el-table-column type="selection" width="55" align="center"/>
       <el-table-column label="详细计划" align="center" prop="detailPlan"/>
       <el-table-column label="培训主题" align="center" prop="topic"/>
-      <el-table-column label="培训计划" align="center" prop="courseDay" />
+<!--      <el-table-column label="培训计划" align="center" prop="courseDay" />-->
       <el-table-column label="培训内容" align="center" prop="content"/>
       <el-table-column label="应学习时长(分)" align="center" prop="timerNeed"/>
       <el-table-column label="备注" align="center" prop="remarks"/>

+ 1 - 1
ui/src/views/training/bccnew/ftPlan/index.vue

@@ -79,7 +79,7 @@
                        fixed="left"/>
       <el-table-column label="培训主题" align="center" prop="topic" fixed="left"
       />
-      <el-table-column label="培训计划" align="center" prop="courseDay"/>
+<!--      <el-table-column label="培训计划" align="center" prop="courseDay"/>-->
       <el-table-column label="培训内容" align="center" prop="content"/>
       <el-table-column label="应学习时长(分)" align="center" prop="timerNeed"/>
       <el-table-column label="备注" align="center" prop="remarks"/>

+ 1 - 1
ui/src/views/training/bccnew/ljPlan/index.vue

@@ -73,7 +73,7 @@
                        fixed="left"/>
       <el-table-column label="培训主题" align="center" prop="topic" fixed="left"
                        />
-      <el-table-column label="培训计划" align="center" prop="courseDay" />
+<!--      <el-table-column label="培训计划" align="center" prop="courseDay" />-->
       <el-table-column label="培训内容" align="center" prop="content" />
       <el-table-column label="应学习时长(分)" align="center" prop="timerNeed"/>
       <el-table-column label="备注" align="center" prop="remarks"/>

+ 534 - 0
ui/src/views/training/bccnew/trainer/index.vue

@@ -0,0 +1,534 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="工号" prop="staffId">
+        <el-input
+          v-model="queryParams.staffId"
+          placeholder="请输入工号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="姓名" prop="trainerName">
+        <el-input
+          v-model="queryParams.trainerName"
+          placeholder="请输入姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="班组" prop="team">
+        <el-input
+          v-model="queryParams.team"
+          placeholder="请输入班组"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="岗位" prop="post">
+        <el-input
+          v-model="queryParams.post"
+          placeholder="请输入岗位"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="带徒岗位" prop="apprenticePosition">
+        <el-input
+          v-model="queryParams.apprenticePosition"
+          placeholder="请输入带徒岗位"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['bccnew:trainer:add']"
+        >新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['bccnew:trainer:edit']"
+        >修改
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['bccnew:trainer:remove']"
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['bccnew:trainer:add']"
+        >导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['bccnew:trainer:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :span-method="mergeMethod" :data="trainerList" @selection-change="handleSelectionChange" :height="clientHeight"
+              border>
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="工号" align="center" prop="staffId" :show-overflow-tooltip="true"/>
+      <el-table-column label="姓名" align="center" prop="trainerName" :show-overflow-tooltip="true"/>
+      <el-table-column label="班组" align="center" prop="team" :show-overflow-tooltip="true"/>
+      <el-table-column label="岗位" align="center" prop="post" :show-overflow-tooltip="true"/>
+      <el-table-column label="工作经历" align="center" prop="experience" :show-overflow-tooltip="true"/>
+      <el-table-column label="带徒岗位" align="center" prop="apprenticePosition" :show-overflow-tooltip="true"/>
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
+      <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['bccnew:trainer:edit']"
+          >修改
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['bccnew:trainer:remove']"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改蒸汽裂解装置导师带徒导师库对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="工号" prop="staffId">
+          <el-input v-model="form.staffId" placeholder="请输入工号"/>
+        </el-form-item>
+        <el-form-item label="姓名" prop="trainerName">
+          <el-input v-model="form.trainerName" placeholder="请输入姓名"/>
+        </el-form-item>
+        <el-form-item label="班组" prop="team">
+          <el-input v-model="form.team" placeholder="请输入班组"/>
+        </el-form-item>
+        <el-form-item label="岗位" prop="post">
+          <el-input v-model="form.post" placeholder="请输入岗位"/>
+        </el-form-item>
+        <el-form-item label="工作经历" prop="experience">
+          <el-input v-model="form.experience" placeholder="请输入工作经历"/>
+        </el-form-item>
+        <el-form-item label="带徒岗位" prop="apprenticePosition">
+          <el-radio-group v-model="form.apprenticePosition">
+            <el-radio
+              key="1"
+              label="裂解"
+            >裂解
+            </el-radio>
+            <el-radio
+              key="2"
+              label="压缩"
+            >压缩
+            </el-radio>
+            <el-radio
+              key="3"
+              label="分离"
+            >分离
+            </el-radio>
+            <el-radio
+              key="4"
+              label="芳烃"
+            >芳烃
+            </el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" placeholder="请输入备注"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <!-- 用户导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+        </div>
+        <form ref="downloadFileForm" :action="upload.downloadAction" target="FORMSUBMIT">
+          <input name="type" :value="upload.type" hidden/>
+        </form>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  addTrainer,
+  delTrainer,
+  exportTrainer,
+  getTrainer,
+  listTrainer,
+  updateTrainer
+} from "@/api/training/bccnew/trainer";
+import {treeselect} from "@/api/system/dept";
+import {getToken} from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "Trainer",
+  components: {Treeselect},
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 蒸汽裂解装置导师带徒导师库表格数据
+      trainerList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      clientHeight: 300,
+      // 是否显示弹出层
+      open: false,
+      // 用户导入参数
+      upload: {
+        //下载模板请求地址
+        downloadAction: process.env.VUE_APP_BASE_API + '/common/template',
+        type: 'trainerTmpl',
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/bccnew/trainer/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        staffId: null,
+        trainerName: null,
+        team: null,
+        post: null,
+        experience: null,
+        apprenticePosition: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        staffId: [
+          {required: true, message: "工号不能为空", trigger: "blur"}
+        ],
+        trainerName: [
+          {required: true, message: "姓名不能为空", trigger: "blur"}
+        ],
+        team: [
+          {required: true, message: "班组不能为空", trigger: "blur"}
+        ],
+        post: [
+          {required: true, message: "岗位不能为空", trigger: "blur"}
+        ],
+        experience: [
+          {required: true, message: "工作经历不能为空", trigger: "blur"}
+        ],
+        apprenticePosition: [
+          {required: true, message: "带徒岗位不能为空", trigger: "blur"}
+        ],
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 250
+    })
+    this.getList();
+    this.getTreeselect();
+  },
+  methods: {
+    /** 查询蒸汽裂解装置导师带徒导师库列表 */
+    getList() {
+      this.loading = true;
+      listTrainer(this.queryParams).then(response => {
+        this.trainerList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        trainerId: null,
+        staffId: null,
+        trainerName: null,
+        team: null,
+        post: null,
+        experience: null,
+        apprenticePosition: null,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.trainerId)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加蒸汽裂解装置导师带徒导师库";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const trainerId = row.trainerId || this.ids
+      getTrainer(trainerId).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改蒸汽裂解装置导师带徒导师库";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.trainerId != null) {
+            updateTrainer(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addTrainer(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const trainerIds = row.trainerId || this.ids;
+      this.$confirm('是否确认删除?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delTrainer(trainerIds);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有蒸汽裂解装置导师带徒导师库数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportTrainer(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      this.$refs['downloadFileForm'].submit()
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+
+    //合并单元格
+    mergeMethod({row, column, rowIndex, columnIndex}) {
+      // console.log(row)
+      if ([1, 2,3, 4].includes(columnIndex)) {
+        const _row = this.setTable(this.trainerList).merge[rowIndex];
+        const _col = _row > 0 ? 1 : 0;
+        return {
+          rowspan: _row,
+          colspan: _col
+        };
+      }
+    },
+    //单元格整理
+    setTable(tableData) {
+      //    console.log(tableData)
+      let spanArr = [],
+        concat = 0;
+      tableData.forEach((item, index) => {
+        if (index === 0) {
+          spanArr.push(1);
+        } else {
+          if (item.staffId === tableData[index - 1].staffId) {
+            //第一列需合并相同内容的判断条件
+            spanArr[concat] += 1;
+            spanArr.push(0);
+          } else {
+            spanArr.push(1);
+            concat = index;
+          }
+        }
+      });
+      return {
+        merge: spanArr
+      };
+    },
+  }
+};
+</script>

+ 37 - 12
ui/src/views/training/bccnew/tsnew/index.vue

@@ -269,19 +269,8 @@
             align="right">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="导师员工" prop="mentorStaffId">
-          <el-select v-model="form.mentorStaffId" filterable :placeholder="$t('请选择')+$t('导师员工')">
-            <el-option
-              v-for="item in userOption"
-              :key="item.staffid"
-              :label="item.name +'  '+ item.deptName"
-              :value="item.staffid"
-              :disabled="item.disabled">
-            </el-option>
-          </el-select>
-        </el-form-item>
         <el-form-item label="岗位" prop="planType">
-          <el-radio-group v-model="form.planType">
+          <el-radio-group v-model="form.planType"  @change="getTrainer">
             <el-radio
               key="1"
               :label="1"
@@ -300,6 +289,17 @@
             >芳烃</el-radio>
           </el-radio-group>
         </el-form-item>
+        <el-form-item label="导师员工" prop="mentorStaffId">
+          <el-select v-model="form.mentorStaffId" filterable :placeholder="$t('请选择')+$t('导师员工')">
+            <el-option
+              v-for="item in trainerOption"
+              :key="item.staffId"
+              :label="item.trainerName"
+              :value="item.staffId"
+              :disabled="item.disabled">
+            </el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item label="备注" prop="remarks">
           <el-input v-model="form.remarks" placeholder="请输入备注" />
         </el-form-item>
@@ -445,6 +445,7 @@ import { Loading } from 'element-ui';
 import {date} from "mockjs/src/mock/random/date";
 import {listUserNoPage} from "@/api/system/user";
 import {listStaffmgrByDeptAndTeam} from "@/api/plant/staffmgr";
+import {listTrainer} from "@/api/training/bccnew/trainer";
 
 export default {
   name: "Tsnew",
@@ -502,6 +503,7 @@ export default {
       // 培训类型 1-新员工 2-转岗字典
       planTypeOptions: [],
       userOption:[],
+      trainerOption:[],
       // 是否显示弹出层
       open: false,
       // 用户导入参数
@@ -612,6 +614,29 @@ export default {
     });
   },
   methods: {
+    getTrainer(val){
+      let post="";
+      switch (val) {
+        case 1:
+          post='裂解';
+          break
+        case 2:
+          post='压缩';
+          break
+        case 3:
+          post='分离';
+          break
+        case 4:
+          post='芳烃';
+          break
+      }
+      listTrainer({
+        pageNum: 1,
+        pageSize: 2000,
+        apprenticePosition:post}).then(response => {
+        this.trainerOption = response.rows;
+      });
+    },
     // 文件下载处理
     handleDownloadWord(row, type) {
       let name;

+ 12 - 12
ui/src/views/training/bccnew/tsnew/score.vue

@@ -45,7 +45,7 @@
       </el-table-column>
       <el-table-column label="培训主题" align="center" prop="topic" :show-overflow-tooltip="true" fixed="left"
                        width="180"/>
-      <el-table-column label="培训计划" align="center" prop="courseDay" :show-overflow-tooltip="true" width="180"/>
+<!--      <el-table-column label="培训计划" align="center" prop="courseDay" :show-overflow-tooltip="true" width="180"/>-->
       <el-table-column label="培训内容" align="center" prop="content" width="280"/>
       <el-table-column label="培训状态" align="center" prop="planStatus" :show-overflow-tooltip="true" width="180">
         <template slot-scope="scope">
@@ -79,7 +79,7 @@
       <el-table-column label="第二次成绩" align="center" prop="score2" :show-overflow-tooltip="true" width="180">
         <template slot-scope="scope">
           <div
-            v-if="scope.row.score2 == null&&scope.row.planStatus==2&&(scope.row.score1 == '满意'||scope.row.score1 == '差')">
+            v-if="scope.row.scorePass!='0'&&scope.row.score2 == null&&scope.row.planStatus==2&&(scope.row.score1 == '满意'||scope.row.score1 == '差')">
             <el-select v-model="scope.row.score2Tmp" style="width: 130px" placeholder="请选择成绩">
               <el-option value="好" label="好" key="好"/>
               <el-option value="满意" label="满意" key="满意"/>
@@ -99,7 +99,7 @@
       <el-table-column label="第三次成绩" align="center" prop="score3" :show-overflow-tooltip="true" width="180">
         <template slot-scope="scope">
           <div
-            v-if="scope.row.score3 == null&&scope.row.planStatus==2&&((scope.row.score1 == '满意'||scope.row.score1 == '差')&&(scope.row.score2 == '满意'||scope.row.score2 == '差'))">
+            v-if="scope.row.scorePass!='0'&&scope.row.score3 == null&&scope.row.planStatus==2&&((scope.row.score1 == '满意'||scope.row.score1 == '差')&&(scope.row.score2 == '满意'||scope.row.score2 == '差'))">
             <el-select v-model="scope.row.score3Tmp" style="width: 130px" placeholder="请选择成绩">
               <el-option value="好" label="好" key="好"/>
               <el-option value="满意" label="满意" key="满意"/>
@@ -195,13 +195,13 @@
               </el-tooltip>
             </el-col>
           </el-row>
-          <el-row>
-            <el-col :span="23">
-              <el-form-item label="培训计划" prop="courseDay">
-                <el-input v-model="recordForm.courseDay" placeholder="请输入培训计划"/>
-              </el-form-item>
-            </el-col>
-          </el-row>
+<!--          <el-row>-->
+<!--            <el-col :span="23">-->
+<!--              <el-form-item label="培训计划" prop="courseDay">-->
+<!--                <el-input v-model="recordForm.courseDay" placeholder="请输入培训计划"/>-->
+<!--              </el-form-item>-->
+<!--            </el-col>-->
+<!--          </el-row>-->
           <el-row>
             <el-col :span="23">
               <el-form-item label="培训内容" prop="content">
@@ -1050,7 +1050,7 @@ export default {
     //合并单元格
     mergeMethod({row, column, rowIndex, columnIndex}) {
       // console.log(row)
-      if ([1, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14].includes(columnIndex)) {
+      if ([1, 3, 5,6, 7, 8, 9, 10, 11, 12, 13].includes(columnIndex)) {
         const _row = this.setTable(this.dsdtList).merge[rowIndex];
         const _col = _row > 0 ? 1 : 0;
         return {
@@ -1068,7 +1068,7 @@ export default {
         if (index === 0) {
           spanArr.push(1);
         } else {
-          if (item.topic === tableData[index - 1].topic) {
+          if (item.id === tableData[index - 1].id) {
             //第一列需合并相同内容的判断条件
             spanArr[concat] += 1;
             spanArr.push(0);

+ 3 - 3
ui/src/views/training/bccnew/tsnew/score_student.vue

@@ -16,7 +16,7 @@
       </el-table-column>
       <el-table-column label="培训主题" align="center" prop="topic" :show-overflow-tooltip="true" fixed="left"
                        width="180"/>
-      <el-table-column label="培训计划" align="center" prop="courseDay" :show-overflow-tooltip="true" width="180"/>
+<!--      <el-table-column label="培训计划" align="center" prop="courseDay" :show-overflow-tooltip="true" width="180"/>-->
       <el-table-column label="培训内容" align="center" prop="content" :show-overflow-tooltip="true" width="180"/>
       <el-table-column label="培训状态" align="center" prop="planStatus" :show-overflow-tooltip="true" width="180">
         <template slot-scope="scope">
@@ -469,7 +469,7 @@ export default {
         let item = this.dsdtList[i];
         if (item.id === row.id) {
           if (row.id !== this.dsdtList[i - 1].id) {
-            if (this.dsdtList[i - 1].planStatus !== 5&&this.dsdtList[i - 1].planStatus !== 3) {
+            if (this.dsdtList[i - 1].planStatus !== 5&&this.dsdtList[i - 1].planStatus !== 3&&this.dsdtList[i - 1].planStatus !== 1) {
               this.$alert('您必须完成上一项考试才可学习当前资料!', "注意", {dangerouslyUseHTMLString: true});
               return;
             }
@@ -730,7 +730,7 @@ export default {
         if (index === 0) {
           spanArr.push(1);
         } else {
-          if (item.topic === tableData[index - 1].topic) {
+          if (item.id === tableData[index - 1].id) {
             //第一列需合并相同内容的判断条件
             spanArr[concat] += 1;
             spanArr.push(0);

+ 1 - 1
ui/src/views/training/bccnew/ysPlan/index.vue

@@ -73,7 +73,7 @@
                        fixed="left"/>
       <el-table-column label="培训主题" align="center" prop="topic" fixed="left"
                        />
-      <el-table-column label="培训计划" align="center" prop="courseDay" />
+<!--      <el-table-column label="培训计划" align="center" prop="courseDay" />-->
       <el-table-column label="培训内容" align="center" prop="content" />
       <el-table-column label="应学习时长(分)" align="center" prop="timerNeed"/>
       <el-table-column label="备注" align="center" prop="remarks"/>