Sfoglia il codice sorgente

feat(eoeg): 添加EOEG锁开锁关申请流程

- 新增EOEG锁开锁关申请流程定义文件- 实现锁开锁关申请的完整审批流逻辑- 添加锁状态管理和流程变量控制
- 实现多级审批人分配机制- 添加锁风险等级判断和分支流程
- 实现流程驳回和拒绝处理逻辑- 添加锁变更确认和措施确认节点
- 实现班长确认和锁重置确认功能
- 添加锁申请状态更新和锁状态同步
- 实现流程备注和审批意见记录功能
jiangbiao 2 mesi fa
parent
commit
9dfd07b6e0
21 ha cambiato i file con 1026 aggiunte e 132 eliminazioni
  1. 5 0
      master/src/main/java/com/ruoyi/config/ActivitiConfig.java
  2. 8 31
      master/src/main/java/com/ruoyi/project/approve/controller/TApproveController.java
  3. 10 0
      master/src/main/java/com/ruoyi/project/approve/damain/DevTask.java
  4. 21 0
      master/src/main/java/com/ruoyi/project/ehs/controller/TApproveDangerController.java
  5. 7 20
      master/src/main/java/com/ruoyi/project/eoeg/controller/TEoegLockApplyController.java
  6. 230 13
      master/src/main/java/com/ruoyi/project/eoeg/controller/TEoegLockChangeController.java
  7. 21 1
      master/src/main/java/com/ruoyi/project/eoeg/domain/TEoegLockApply.java
  8. 2 3
      master/src/main/java/com/ruoyi/project/eoeg/mapper/TEoegLockApplyMapper.java
  9. 10 0
      master/src/main/java/com/ruoyi/project/plant/controller/TStaffmgrController.java
  10. 1 0
      master/src/main/java/com/ruoyi/project/plant/mapper/TStaffmgrMapper.java
  11. 1 0
      master/src/main/java/com/ruoyi/project/plant/service/ITStaffmgrService.java
  12. 5 0
      master/src/main/java/com/ruoyi/project/plant/service/impl/TStaffmgrServiceImpl.java
  13. 9 0
      master/src/main/resources/mybatis/plant/TStaffmgrMapper.xml
  14. 36 13
      master/src/main/resources/processes/eoeg/eoegLock.bpmn
  15. 9 1
      ui/src/api/eoeg/eoegChange.js
  16. 7 0
      ui/src/api/plant/staffmgr.js
  17. 491 0
      ui/src/views/approve/approveDetail/eoegLockChange-detail.vue
  18. 10 1
      ui/src/views/approve/myapprove/index.vue
  19. 9 0
      ui/src/views/approve/pending/index.vue
  20. 9 0
      ui/src/views/approve/taskdone/index.vue
  21. 125 49
      ui/src/views/eoeg/eoegChange/index.vue

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

@@ -192,6 +192,11 @@ public class ActivitiConfig {
         DeploymentBuilder deploymentBuilder19 = repositoryService().createDeployment();
         Resource spec19 = resourceLoader.getResource("classpath:/processes/rcsai/rcSaiApply.bpmn"); //加载流程图资源文件
         deploymentBuilder19.enableDuplicateFiltering().addInputStream(spec19.getFilename(), spec19.getInputStream()).name("RC_SAI开项申请流程").deploy();//按流程id部署
+
+        DeploymentBuilder deploymentBuilder20 = repositoryService().createDeployment();
+        Resource spec20 = resourceLoader.getResource("classpath:/processes/eoeg/eoegLock.bpmn"); //加载流程图资源文件
+        deploymentBuilder20.enableDuplicateFiltering().addInputStream(spec20.getFilename(), spec20.getInputStream()).name("EOEG锁开锁关申请流程").deploy();//按流程id部署
+
     }
 }
 

+ 8 - 31
master/src/main/java/com/ruoyi/project/approve/controller/TApproveController.java

@@ -2,10 +2,6 @@ package com.ruoyi.project.approve.controller;
 
 import com.alibaba.fastjson.JSON;
 import com.ruoyi.common.utils.PageUtils;
-import com.ruoyi.common.utils.http.HttpContextUtils;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.page.TableDataInfo;
@@ -14,22 +10,18 @@ import com.ruoyi.project.apply.domain.TApplySafetychange;
 import com.ruoyi.project.apply.service.ITApplyOfflinevalveService;
 import com.ruoyi.project.apply.service.ITApplySafetychangeService;
 import com.ruoyi.project.approve.damain.DevProcess;
-import com.ruoyi.project.approve.damain.DevTask;
 import com.ruoyi.project.common.service.ITCommonfileService;
-import com.ruoyi.project.ehs.domain.TApproveAccident;
 import com.ruoyi.project.ehs.domain.TApproveDanger;
 import com.ruoyi.project.ehs.service.ITApproveAccidentService;
 import com.ruoyi.project.ehs.service.ITApproveDangerService;
+import com.ruoyi.project.eoeg.domain.TEoegLockApply;
+import com.ruoyi.project.eoeg.service.ITEoegLockApplyService;
 import com.ruoyi.project.intact.domain.TApproveMaintenance;
 import com.ruoyi.project.intact.domain.TIntactApprove;
 import com.ruoyi.project.intact.service.ITApproveMaintenanceService;
 import com.ruoyi.project.intact.service.ITIntactApproveService;
 import com.ruoyi.project.invoice.domain.TApproveReserveInvoice;
 import com.ruoyi.project.invoice.service.ITApproveReserveInvoiceService;
-import com.ruoyi.project.listener.EndSucessListener;
-import com.ruoyi.project.listener.ExecutorTaskCreateListener;
-import com.ruoyi.project.listener.RecorderTaskCreateListener;
-import com.ruoyi.project.listener.VerificationTaskCreateListener;
 import com.ruoyi.project.production.domain.TSaiApply;
 import com.ruoyi.project.production.service.ITSaiApplyService;
 import com.ruoyi.project.pssr.domain.TPssrApprove;
@@ -43,40 +35,19 @@ import com.ruoyi.project.sems.safecheck.domain.TSpecWeekcheck;
 import com.ruoyi.project.sems.safecheck.service.ITSpecWeekcheckService;
 import com.ruoyi.project.sems.service.ITApproveService;
 import com.ruoyi.project.system.domain.SysUser;
-import com.ruoyi.project.system.domain.SysUserRole;
 import com.ruoyi.project.system.service.ISysUserService;
 import com.ruoyi.project.training.bccnew.domain.TTsApprove;
 import com.ruoyi.project.training.bccnew.service.ITTsApproveService;
 import com.ruoyi.project.training.spec.domain.TStApprove;
 import com.ruoyi.project.training.spec.service.ITStApproveService;
-import org.activiti.bpmn.model.BpmnModel;
-import org.activiti.bpmn.model.FlowNode;
-import org.activiti.bpmn.model.Process;
-import org.activiti.bpmn.model.SequenceFlow;
 import org.activiti.engine.*;
-import org.activiti.engine.history.HistoricActivityInstance;
 import org.activiti.engine.history.HistoricProcessInstance;
-import org.activiti.engine.history.HistoricTaskInstance;
-import org.activiti.engine.history.HistoricTaskInstanceQuery;
-import org.activiti.engine.impl.identity.Authentication;
-import org.activiti.engine.repository.ProcessDefinition;
-import org.activiti.engine.runtime.ProcessInstance;
 import org.activiti.engine.runtime.ProcessInstanceQuery;
-import org.activiti.engine.task.Comment;
 import org.activiti.engine.task.Task;
-import org.activiti.image.impl.DefaultProcessDiagramGenerator;
-import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * 隐患申请Controller
@@ -138,6 +109,8 @@ public class TApproveController extends BaseController {
     private ITTsApproveService tTsApproveService;
     @Autowired
     private ITPssrApproveService tPssrApproveService;
+    @Autowired
+    private ITEoegLockApplyService tEoegLockApplyService;
 
 
 
@@ -257,6 +230,10 @@ public class TApproveController extends BaseController {
                         TPssrApprove t = tPssrApproveService.selectTPssrApproveById(Long.parseLong(pi.getBusinessKey()));
                         devProcess.setApNo(t.getApNo());
                         devProcess.setApproveObject(t);
+                    } else if (pi.getProcessDefinitionName().equals("EOEG锁开锁关申请流程")) {
+                        TEoegLockApply t = tEoegLockApplyService.selectTEoegLockApplyById(Long.parseLong(pi.getBusinessKey()));
+                        devProcess.setApNo(t.getApNo());
+                        devProcess.setApproveObject(t);
                     }
                 } catch (Exception e) {
                     logger.error(e.toString());

+ 10 - 0
master/src/main/java/com/ruoyi/project/approve/damain/DevTask.java

@@ -5,6 +5,7 @@ import com.ruoyi.project.apply.domain.TApplyOfflinevalve;
 import com.ruoyi.project.apply.domain.TApplySafetychange;
 import com.ruoyi.project.ehs.domain.TApproveAccident;
 import com.ruoyi.project.ehs.domain.TApproveDanger;
+import com.ruoyi.project.eoeg.domain.TEoegLockApply;
 import com.ruoyi.project.production.domain.TEoegSaiApply;
 import com.ruoyi.project.production.domain.TRcSaiApply;
 import com.ruoyi.project.production.domain.TSaiApply;
@@ -106,6 +107,15 @@ public class DevTask {
     private TTsApprove tTsApprove;
 
     private TPssrApprove tPssrApprove;
+    private TEoegLockApply  tEoegLockApply;
+
+    public TEoegLockApply gettEoegLockApply() {
+        return tEoegLockApply;
+    }
+
+    public void settEoegLockApply(TEoegLockApply tEoegLockApply) {
+        this.tEoegLockApply = tEoegLockApply;
+    }
 
     public TEoegSaiApply getEoegSaiApply() {
         return eoegSaiApply;

+ 21 - 0
master/src/main/java/com/ruoyi/project/ehs/controller/TApproveDangerController.java

@@ -21,6 +21,8 @@ import com.ruoyi.project.ehs.domain.TApproveAccident;
 import com.ruoyi.project.ehs.domain.TApproveDanger;
 import com.ruoyi.project.ehs.service.ITApproveAccidentService;
 import com.ruoyi.project.ehs.service.ITApproveDangerService;
+import com.ruoyi.project.eoeg.domain.TEoegLockApply;
+import com.ruoyi.project.eoeg.service.ITEoegLockApplyService;
 import com.ruoyi.project.intact.domain.TApproveMaintenance;
 import com.ruoyi.project.intact.domain.TIntactApprove;
 import com.ruoyi.project.intact.service.ITApproveMaintenanceService;
@@ -150,6 +152,8 @@ public class TApproveDangerController extends BaseController {
     private ITPssrSubcontentService tPssrSubcontentService;
     @Autowired
     private ITPssrAboveallService tPssrAboveallService;
+    @Autowired
+    private ITEoegLockApplyService tEoegLockApplyService;
 
     /**
      * 任务申请
@@ -372,6 +376,11 @@ public class TApproveDangerController extends BaseController {
                         devProcess.setProcessName(pi.getProcessDefinitionName()+"_"+tPssrSubcontent.getUnit()+"_"+tPssrSubcontent.getItem());
                         devProcess.setApNo(t.getApNo());
                         devProcess.setApproveObject(t);
+                    } else if (pi.getProcessDefinitionName().equals("EOEG锁开锁关申请流程")) {
+                        TEoegLockApply t = tEoegLockApplyService.selectTEoegLockApplyById(Long.parseLong(pi.getBusinessKey()));
+                        devProcess.setProcessName(pi.getProcessDefinitionName());
+                        devProcess.setApNo(t.getApNo());
+                        devProcess.setApproveObject(t);
                     }
                 } catch (Exception e) {
                     logger.error(e.toString());
@@ -533,6 +542,11 @@ public class TApproveDangerController extends BaseController {
                         devTask.setProcessName(pi.getProcessDefinitionName()+"_"+tPssrSubcontent.getUnit()+"_"+tPssrSubcontent.getItem());
                         devTask.setApNo(t.getApNo());
                         devTask.setApproveObject(t);
+                    } else if (pi.getProcessDefinitionName().equals("EOEG锁开锁关申请流程")) {
+                        TEoegLockApply t = tEoegLockApplyService.selectTEoegLockApplyById(Long.parseLong(pi.getBusinessKey()));
+                        devTask.setProcessName(pi.getProcessDefinitionName());
+                        devTask.setApNo(t.getApNo());
+                        devTask.setApproveObject(t);
                     }
                     list.add(devTask);
                 }
@@ -699,6 +713,13 @@ public class TApproveDangerController extends BaseController {
                     devProcess.setApName(user.getNickName());
                     devProcess.setApNo(t.getApNo());
                     devProcess.setApproveObject(t);
+                } else if (pi.getProcessDefinitionName().equals("EOEG锁开锁关申请流程")) {
+                    TEoegLockApply t = tEoegLockApplyService.selectTEoegLockApplyById(Long.parseLong(pi.getBusinessKey()));
+                    devProcess.setProcessName(pi.getProcessDefinitionName());
+                    SysUser user = sysUserService.selectUserById(Long.valueOf(t.getCreaterCode()));
+                    devProcess.setApName(user.getNickName());
+                    devProcess.setApNo(t.getApNo());
+                    devProcess.setApproveObject(t);
                 } else {
                     TApproveDanger approveDanger = tApproveDangerService.selectTApproveDangerById(Long.parseLong(pi.getBusinessKey()));
                     SysUser user = sysUserService.selectUserById(approveDanger.getRecorderId());

+ 7 - 20
master/src/main/java/com/ruoyi/project/eoeg/controller/TEoegLockApplyController.java

@@ -1,24 +1,17 @@
 package com.ruoyi.project.eoeg.controller;
 
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.project.eoeg.domain.TEoegLockApply;
-import com.ruoyi.project.eoeg.service.ITEoegLockApplyService;
 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 com.ruoyi.project.eoeg.domain.TEoegLockApply;
+import com.ruoyi.project.eoeg.service.ITEoegLockApplyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * EOEG 审批流关联Controller
@@ -36,7 +29,6 @@ public class TEoegLockApplyController extends BaseController
     /**
      * 查询EOEG 审批流关联列表
      */
-    @PreAuthorize("@ss.hasPermi('eoeg:lockApply:list')")
     @GetMapping("/list")
     public TableDataInfo list(TEoegLockApply tEoegLockApply)
     {
@@ -48,7 +40,6 @@ public class TEoegLockApplyController extends BaseController
     /**
      * 导出EOEG 审批流关联列表
      */
-    @PreAuthorize("@ss.hasPermi('eoeg:lockApply:export')")
     @Log(title = "EOEG 审批流关联", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
     public AjaxResult export(TEoegLockApply tEoegLockApply)
@@ -61,7 +52,6 @@ public class TEoegLockApplyController extends BaseController
     /**
      * 获取EOEG 审批流关联详细信息
      */
-    @PreAuthorize("@ss.hasPermi('eoeg:lockApply:query')")
     @GetMapping(value = "/{id}")
     public AjaxResult getInfo(@PathVariable("id") Long id)
     {
@@ -71,7 +61,6 @@ public class TEoegLockApplyController extends BaseController
     /**
      * 新增EOEG 审批流关联
      */
-    @PreAuthorize("@ss.hasPermi('eoeg:lockApply:add')")
     @Log(title = "EOEG 审批流关联", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody TEoegLockApply tEoegLockApply)
@@ -82,7 +71,6 @@ public class TEoegLockApplyController extends BaseController
     /**
      * 修改EOEG 审批流关联
      */
-    @PreAuthorize("@ss.hasPermi('eoeg:lockApply:edit')")
     @Log(title = "EOEG 审批流关联", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody TEoegLockApply tEoegLockApply)
@@ -93,7 +81,6 @@ public class TEoegLockApplyController extends BaseController
     /**
      * 删除EOEG 审批流关联
      */
-    @PreAuthorize("@ss.hasPermi('eoeg:lockApply:remove')")
     @Log(title = "EOEG 审批流关联", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable Long[] ids)

+ 230 - 13
master/src/main/java/com/ruoyi/project/eoeg/controller/TEoegLockChangeController.java

@@ -1,20 +1,39 @@
 package com.ruoyi.project.eoeg.controller;
 
+import com.ruoyi.common.utils.DateUtils;
+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;
+import com.ruoyi.framework.interceptor.annotation.RepeatSubmit;
 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.eoeg.domain.TEoegLock;
+import com.ruoyi.project.eoeg.domain.TEoegLockApply;
 import com.ruoyi.project.eoeg.domain.TEoegLockChange;
+import com.ruoyi.project.eoeg.service.ITEoegLockApplyService;
 import com.ruoyi.project.eoeg.service.ITEoegLockChangeService;
+import com.ruoyi.project.eoeg.service.ITEoegLockService;
+import com.ruoyi.project.plant.domain.TStaffmgr;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.service.ISysUserService;
+import org.activiti.engine.ProcessEngine;
+import org.activiti.engine.ProcessEngines;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.runtime.ProcessInstance;
+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.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * EOEG 锁开锁关申请Controller
@@ -24,20 +43,32 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/eoeg/eoegChange")
-public class TEoegLockChangeController extends BaseController
-{
+public class TEoegLockChangeController extends BaseController {
     @Autowired
     private ITEoegLockChangeService tEoegLockChangeService;
+
+    @Autowired
+    private ITEoegLockService tEoegLockService;
+
+    @Autowired
+    private ITEoegLockApplyService tEoegLockApplyService;
+
     @Autowired
     private ISysUserService sysUserService;
 
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private TaskService taskService;
+
+
     /**
      * 查询EOEG 锁开锁关申请列表
      */
     @PreAuthorize("@ss.hasPermi('eoeg:eoegChange:list')")
     @GetMapping("/list")
-    public TableDataInfo list(TEoegLockChange tEoegLockChange)
-    {
+    public TableDataInfo list(TEoegLockChange tEoegLockChange) {
         startPage();
         List<TEoegLockChange> list = tEoegLockChangeService.selectTEoegLockChangeList(tEoegLockChange);
         return getDataTable(list);
@@ -49,8 +80,7 @@ public class TEoegLockChangeController extends BaseController
     @PreAuthorize("@ss.hasPermi('eoeg:eoegChange:export')")
     @Log(title = "EOEG 锁开锁关申请", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
-    public AjaxResult export(TEoegLockChange tEoegLockChange)
-    {
+    public AjaxResult export(TEoegLockChange tEoegLockChange) {
         List<TEoegLockChange> list = tEoegLockChangeService.selectTEoegLockChangeList(tEoegLockChange);
         ExcelUtil<TEoegLockChange> util = new ExcelUtil<TEoegLockChange>(TEoegLockChange.class);
         return util.exportExcel(list, "eoegChange");
@@ -61,8 +91,7 @@ public class TEoegLockChangeController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('eoeg:eoegChange:query')")
     @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") Long id)
-    {
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
         return AjaxResult.success(tEoegLockChangeService.selectTEoegLockChangeById(id));
     }
 
@@ -72,13 +101,202 @@ public class TEoegLockChangeController extends BaseController
     @PreAuthorize("@ss.hasPermi('eoeg:eoegChange:add')")
     @Log(title = "EOEG 锁开锁关申请", businessType = BusinessType.INSERT)
     @PostMapping
+    @RepeatSubmit
     public AjaxResult add(@RequestBody TEoegLockChange tEoegLockChange) {
         try {
+            String userId = getUserId().toString();
+
+            TEoegLock tEoegLock = new TEoegLock();
+            tEoegLock.setUniqueIdentifier(tEoegLockChange.getLockNo());
+            for (TEoegLock eoegLock : tEoegLockService.selectTEoegLockList(tEoegLock)) {
+                if (eoegLock.getStatus() == 1 || eoegLock.getStatus() == 2) {
+                    return AjaxResult.error("该锁正处于申请流程中,请结束上一流程后再选择该锁!");
+                }
+                eoegLock.setStatus(1L);
+                tEoegLockService.updateTEoegLock(eoegLock);
+            }
+
+
+            // 填充用户名称信息
             fillUserNames(tEoegLockChange);
-            return toAjax(tEoegLockChangeService.insertTEoegLockChange(tEoegLockChange));
+            // 设置申请人ID
+            tEoegLockChange.setApplicant(userId);
+            // 设置申请人姓名
+            tEoegLockChange.setApplicantName(getNickName());
+            // 设置申请时间
+            tEoegLockChange.setApplicationTime(new Date());
+            // 设置状态为待审批
+            tEoegLockChange.setApproveStatus("1");//待审批
+            // 设置创建日期
+            tEoegLockChange.setCreatedate(new Date());
+            // 设置创建人编码
+            tEoegLockChange.setCreaterCode(getUserId().toString());
+            // 保存锁变更申请记录
+            tEoegLockChangeService.insertTEoegLockChange(tEoegLockChange);
+
+
+            //开始审批流
+            TEoegLockApply apply = new TEoegLockApply();
+            apply.setApNo(DateUtils.dateTimeNow() + userId);
+            apply.setCreaterCode(userId);
+            apply.setCreatedate(new Date());
+            tEoegLockApplyService.insertTEoegLockApply(apply);
+            long businessKey = apply.getId();
+            //开始工作流、监听
+            Authentication.setAuthenticatedUserId(userId);//设置当前申请人
+            Map<String, Object> variables = new HashMap<>();
+            variables.put("applyuser", userId);
+            variables.put("safaer", tEoegLockChange.getSafaer());
+            variables.put("changeConfirmer", tEoegLockChange.getChangeConfirmer());
+            //查询经理
+            TStaffmgr tStaffmgr = new TStaffmgr();
+            tStaffmgr.setActualposts("24,26");
+            StringBuilder approvers = new StringBuilder();
+            for (SysUser user : sysUserService.selectUserPost(tStaffmgr)) {
+                approvers.append(user.getUserId().toString()).append(",");
+            }
+            if (StringUtils.isNotEmpty(approvers.toString())) {
+                approvers = new StringBuilder(approvers.substring(0, approvers.length() - 1));
+            }
+            variables.put("approver", approvers.toString());
+            // 查询班长
+            tStaffmgr = new TStaffmgr();
+            tStaffmgr.setActualposts("12");
+            StringBuilder monitor = new StringBuilder();
+            for (SysUser user : sysUserService.selectUserPost(tStaffmgr)) {
+                monitor.append(user.getUserId().toString()).append(",");
+            }
+            if (StringUtils.isNotEmpty(monitor.toString())) {
+                monitor = new StringBuilder(monitor.substring(0, monitor.length() - 1));
+            }
+            variables.put("monitor", monitor.toString());
+            //采用key来启动流程定义并设置流程变量,返回流程实例
+            ProcessInstance pi = runtimeService.startProcessInstanceByKey("eoegLock", String.valueOf(businessKey), variables);
+            logger.info("流程定义id:" + pi.getProcessDefinitionId());
+            logger.info("流程实例id:" + pi.getProcessInstanceId());
+            apply.setProcessId(pi.getProcessInstanceId());
+            apply.setChangeId(tEoegLockChange.getId());
+            tEoegLockApplyService.updateTEoegLockApply(apply);
+
+            // 申请人申请直接通过
+            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
+            TaskService taskService = processEngine.getTaskService();
+            Task task = taskService.createTaskQuery().processInstanceId(pi.getProcessInstanceId()).active().singleResult();
+            String taskId = task.getId();
+            processEngine.getTaskService().claim(taskId, userId);
+            taskService.addComment(taskId, pi.getProcessInstanceId(), "");
+            Map<String, Object> param = new HashMap<>();
+            param.put("condition", "1");
+            taskService.complete(taskId, param);
+
+            return AjaxResult.success();
         } catch (Exception e) {
-            return AjaxResult.error("添加失败:" + e.getMessage());
+            return AjaxResult.error("流程添加失败:" + e.getMessage());
+        }
+    }
+
+    @Log(title = "EOEG锁开锁关申请审核处理", businessType = BusinessType.UPDATE)
+    @RepeatSubmit
+    @PutMapping("/handle")
+    public AjaxResult handle(@RequestBody DevTask devTask) {
+        TEoegLockApply taskForm = devTask.gettEoegLockApply();
+        TEoegLockChange form = taskForm.gettEoegLockChange();
+        Date date = new Date();
+        //使用任务服务完成任务(提交任务)
+        String taskId = devTask.getTaskId();
+        // 使用任务id,获取任务对象,获取流程实例id
+        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+        //利用任务对象,获取流程实例id
+        String processInstancesId = task.getProcessInstanceId();
+        TEoegLockChange change = tEoegLockChangeService.selectTEoegLockChangeById(form.getId());//申请单数据
+        TEoegLock tEoegLock = new TEoegLock();
+        tEoegLock.setUniqueIdentifier(change.getLockNo());
+        TEoegLock lock = tEoegLockService.selectTEoegLockList(tEoegLock).get(0);//锁数据
+        // 添加备注
+        String remarks = StringUtils.isEmpty(change.getRemarks()) ? "" : change.getRemarks();
+        String taskName = task.getName();//实例名
+
+        //流程审批意见
+        String symbol = "";
+        String text = "";
+        if (StringUtils.isNotEmpty(form.getRemarks())) {
+            text = form.getRemarks();
+            symbol = ",";
+            form.setRemarks(remarks + taskName + "-" + getNickName() + ":" + form.getRemarks() + ";");
+        }
+        // 判断流程
+        if ("1".equals(devTask.getCondition())) {
+            devTask.setComment("通过" + symbol + text);
+        } else if ("0".equals(devTask.getCondition())) {
+            devTask.setComment("拒绝" + symbol + text);
+            change.setStatus(1L);
+            change.setApproveStatus("3");
+            //修改锁状态
+            lock.setStatus(0L);//将锁状态改为已拆锁
+            tEoegLockService.updateTEoegLock(lock);
+        } else if ("2".equals(devTask.getCondition())) {
+            devTask.setComment("驳回" + symbol + text);
+        }
+
+        // 根据当前节点处理流程信息
+        Map<String, Object> param = new HashMap<>();
+        switch (taskName) {
+            case "申请人提交申请":
+                change.setSafa(form.getSafa());
+                change.setChangeReason(form.getChangeReason());
+                change.setChangeDescribe(form.getChangeDescribe());
+            case "评估人"://评估人通过后,判断锁风险等级,B->流程至经理,C、D->流程至评估人
+                String lockLevel;
+                if (lock.getRiskLevel().equals("B")) {
+                    lockLevel = "2";
+                } else {
+                    lockLevel = "1";
+                }
+                param.put("lockLevel", lockLevel);
+                change.setSafaTime(date);
+                break;
+            case "批准人":
+            case "评估人2":
+                change.setApprover(getUserId().toString());
+                change.setApproverName(getNickName());
+                change.setApproveTime(date);
+                break;
+            case "措施确认人":
+                change.setConfirmer(getUserId().toString());
+                change.setConfirmerName(getNickName());
+                change.setConfirmTime(date);
+                change.setExecutionTime(date);
+                break;
+            case "变更确认人":
+                change.setChangeExecutorTime(date);
+                change.setChangeConfirmTime(date);
+                change.setChangeExecution(form.getChangeExecution());
+                break;
+            case "班长":
+                change.setMonitor(getUserId().toString());
+                change.setMonitorName(getNickName());
+                change.setMonitorTime(date);
+                change.setResetConfirmer1(form.getResetConfirmer1());
+                change.setResetConfirmer2(form.getResetConfirmer2());
+                change.setResetConfirmerName1(getUserNameById(form.getResetConfirmer1()));
+                change.setResetConfirmerName2(getUserNameById(form.getResetConfirmer2()));
+                change.setResetConfirmTime1(date);
+                change.setResetConfirmTime2(date);
+                change.setRevokeConfirm(form.getRevokeConfirm());
+                change.setResetConfirm(form.getResetConfirm());
+                change.setStatus(1L);
+                change.setApproveStatus("2");
+                break;
         }
+        param.put("condition", devTask.getCondition());
+        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
+        TaskService taskService = processEngine.getTaskService();
+        //认领任务
+        processEngine.getTaskService().claim(taskId, getUserId().toString());
+        taskService.addComment(taskId, processInstancesId, devTask.getComment());
+        taskService.complete(taskId, param);
+        tEoegLockChangeService.updateTEoegLockChange(change);
+        return AjaxResult.success();
     }
 
     /**
@@ -132,9 +350,8 @@ public class TEoegLockChangeController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('eoeg:eoegChange:remove')")
     @Log(title = "EOEG 锁开锁关申请", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids)
-    {
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(tEoegLockChangeService.deleteTEoegLockChangeByIds(ids));
     }
 }

+ 21 - 1
master/src/main/java/com/ruoyi/project/eoeg/domain/TEoegLockApply.java

@@ -1,12 +1,13 @@
 package com.ruoyi.project.eoeg.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;
+
 /**
  * EOEG 审批流关联对象 t_eoeg_lock_apply
  *
@@ -64,6 +65,25 @@ public class TEoegLockApply extends BaseEntity
     /** 部门编号 */
     @Excel(name = "部门编号")
     private Long deptId;
+    private String deptName;
+
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
+    private TEoegLockChange tEoegLockChange;
+
+    public TEoegLockChange gettEoegLockChange() {
+        return tEoegLockChange;
+    }
+
+    public void settEoegLockChange(TEoegLockChange tEoegLockChange) {
+        this.tEoegLockChange = tEoegLockChange;
+    }
 
     public void setId(Long id)
     {

+ 2 - 3
master/src/main/java/com/ruoyi/project/eoeg/mapper/TEoegLockApplyMapper.java

@@ -1,9 +1,9 @@
 package com.ruoyi.project.eoeg.mapper;
 
-import java.util.List;
-import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
 import com.ruoyi.project.eoeg.domain.TEoegLockApply;
 
+import java.util.List;
+
 /**
  * EOEG 审批流关联Mapper接口
  * 
@@ -26,7 +26,6 @@ public interface TEoegLockApplyMapper
      * @param tEoegLockApply EOEG 审批流关联
      * @return EOEG 审批流关联集合
      */
-    @DataScope(deptAlias = "d")
     public List<TEoegLockApply> selectTEoegLockApplyList(TEoegLockApply tEoegLockApply);
 
     /**

+ 10 - 0
master/src/main/java/com/ruoyi/project/plant/controller/TStaffmgrController.java

@@ -262,6 +262,16 @@ public class TStaffmgrController extends BaseController {
         return getDataTable(list);
     }
 
+
+    /**
+     * 通过班长查询人员列表
+     */
+    @GetMapping("/listStaffByMonitor")
+    public AjaxResult listStaffByMonitor(TStaffmgr tStaffmgr) {
+        List<TStaffmgr> list = tStaffmgrService.selectStaffByMonitor(tStaffmgr);
+        return AjaxResult.success(list);
+    }
+
     /**
      * 查询人员管理列表(包含离职)
      */

+ 1 - 0
master/src/main/java/com/ruoyi/project/plant/mapper/TStaffmgrMapper.java

@@ -19,6 +19,7 @@ public interface TStaffmgrMapper
      * 获取当班班长
      */
     public TStaffmgr selectMonitor(TStaffmgr tStaffmgr);
+    public List<TStaffmgr> selectStaffByMonitor(TStaffmgr tStaffmgr);
 
     /**
      * 获取OTS培训专员

+ 1 - 0
master/src/main/java/com/ruoyi/project/plant/service/ITStaffmgrService.java

@@ -57,6 +57,7 @@ public interface ITStaffmgrService
      */
     public List<TStaffmgr> selectAllTStaffmgrListWithoutScope(TStaffmgr tStaffmgr);
     public List<TStaffmgr> selectTStaffmgrListByDeptAndTeam(TStaffmgr tStaffmgr);
+    public List<TStaffmgr> selectStaffByMonitor(TStaffmgr tStaffmgr);
 
     /**
      * 定时任务查询人员管理列表

+ 5 - 0
master/src/main/java/com/ruoyi/project/plant/service/impl/TStaffmgrServiceImpl.java

@@ -94,6 +94,11 @@ public class TStaffmgrServiceImpl implements ITStaffmgrService
     {
         return tStaffmgrMapper.selectTStaffmgrListByDeptAndTeam(tStaffmgr);
     }
+    @Override
+    public List<TStaffmgr> selectStaffByMonitor(TStaffmgr tStaffmgr)
+    {
+        return tStaffmgrMapper.selectStaffByMonitor(tStaffmgr);
+    }
 
     /**
      * 定时任务查询人员管理列表

+ 9 - 0
master/src/main/resources/mybatis/plant/TStaffmgrMapper.xml

@@ -431,6 +431,15 @@
         where d.staffid = #{staffid} and d.del_flag = 0
     </select>
 
+    <select id="selectStaffByMonitor" parameterType="TStaffmgr" resultMap="TStaffmgrResult">
+        select u.user_id, d.id, d.plant_code,d.left_date, d.staffid, d.name, d.photo, d.sex, d.birthday, d.unit, d.team, d.actualpost, d.contact, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks, d.education, d.en_ability, d.accident_num, d.mail, d.skill_score, d.p_id , d.special_duty, d.region, s.dept_name from t_staffmgr d
+        left join sys_dept s on s.dept_id = d.dept_id
+        left join sys_user u on d.staffid = u.staffid
+        where d.p_id=(SELECT id FROM t_staffmgr WHERE staffid = #{staffid})
+          and d.DEL_FLAG=0
+          and u.user_id is not null
+    </select>
+
     <select id="selectMonitor" parameterType="TStaffmgr" resultMap="TStaffmgrResult">
         <include refid="selectTStaffmgrVo"/>
         where d.dept_id = #{deptId}

+ 36 - 13
master/src/main/resources/processes/eoeg/eoegLock.bpmn

@@ -1,10 +1,10 @@
 <?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="eoegLock" name="EOEG Lock" isExecutable="true">
+  <process id="eoegLock" name="EOEG锁开锁关申请流程" isExecutable="true">
     <startEvent id="startevent1" name="Start"></startEvent>
     <userTask id="applyTask" name="申请人提交申请" activiti:assignee="#{applyuser}"></userTask>
     <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="applyTask"></sequenceFlow>
-    <userTask id="pgrtask" name="评估人" activiti:candidateUsers="#{safaer}"></userTask>
+    <userTask id="pgrtask" name="评估人" activiti:assignee="#{safaer}"></userTask>
     <sequenceFlow id="flow2" sourceRef="applyTask" targetRef="pgrtask">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
     </sequenceFlow>
@@ -17,23 +17,23 @@
     </sequenceFlow>
     <userTask id="pzrtask" name="批准人" activiti:candidateUsers="#{approver}"></userTask>
     <sequenceFlow id="flow6" name="B 级风险" sourceRef="exclusivegateway" targetRef="pzrtask">
-      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 2}]]></conditionExpression>
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${lockLevel == 2}]]></conditionExpression>
     </sequenceFlow>
     <sequenceFlow id="flow8" name="驳回" sourceRef="pzrtask" targetRef="pgrtask">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 2}]]></conditionExpression>
     </sequenceFlow>
-    <userTask id="pgrtask2" name="评估人" activiti:candidateUsers="#{safaer}"></userTask>
+    <userTask id="pgrtask2" name="评估人2" activiti:assignee="#{safaer}"></userTask>
     <sequenceFlow id="flow9" name="C/D 级风险" sourceRef="exclusivegateway" targetRef="pgrtask2">
-      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${lockLevel == 1}]]></conditionExpression>
     </sequenceFlow>
-    <userTask id="csqrrtask" name="措施确认人" activiti:candidateUsers="#{safaer}"></userTask>
+    <userTask id="csqrrtask" name="措施确认人" activiti:assignee="#{safaer}"></userTask>
     <sequenceFlow id="flow10" sourceRef="pgrtask2" targetRef="csqrrtask">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
     </sequenceFlow>
     <sequenceFlow id="flow11" sourceRef="pzrtask" targetRef="csqrrtask">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
     </sequenceFlow>
-    <userTask id="bgqrrtask" name="变更确认人" activiti:candidateUsers="#{changeConfirmer}"></userTask>
+    <userTask id="bgqrrtask" name="变更确认人" activiti:assignee="#{changeConfirmer}"></userTask>
     <sequenceFlow id="flow12" sourceRef="csqrrtask" targetRef="bgqrrtask">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 1}]]></conditionExpression>
     </sequenceFlow>
@@ -52,6 +52,12 @@
     <sequenceFlow id="flow16" name="拒绝" sourceRef="pzrtask" targetRef="endevent2">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 0}]]></conditionExpression>
     </sequenceFlow>
+    <sequenceFlow id="flow17" name="拒绝" sourceRef="pgrtask2" targetRef="endevent2">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 0}]]></conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="flow18" name="驳回" sourceRef="pgrtask2" targetRef="pgrtask">
+      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 2}]]></conditionExpression>
+    </sequenceFlow>
   </process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_eoegLock">
     <bpmndi:BPMNPlane bpmnElement="eoegLock" id="BPMNPlane_eoegLock">
@@ -103,7 +109,7 @@
         <omgdi:waypoint x="407.0" y="147.0"></omgdi:waypoint>
         <omgdi:waypoint x="340.0" y="147.0"></omgdi:waypoint>
         <bpmndi:BPMNLabel>
-          <omgdc:Bounds height="16.0" width="100.0" x="409.0" y="180.0"></omgdc:Bounds>
+          <omgdc:Bounds height="16.0" width="22.0" x="409.0" y="180.0"></omgdc:Bounds>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
@@ -114,7 +120,7 @@
         <omgdi:waypoint x="307.0" y="330.0"></omgdi:waypoint>
         <omgdi:waypoint x="380.0" y="330.0"></omgdi:waypoint>
         <bpmndi:BPMNLabel>
-          <omgdc:Bounds height="16.0" width="100.0" x="307.0" y="330.0"></omgdc:Bounds>
+          <omgdc:Bounds height="16.0" width="44.0" x="307.0" y="330.0"></omgdc:Bounds>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8">
@@ -123,14 +129,14 @@
         <omgdi:waypoint x="420.0" y="237.0"></omgdi:waypoint>
         <omgdi:waypoint x="340.0" y="237.0"></omgdi:waypoint>
         <bpmndi:BPMNLabel>
-          <omgdc:Bounds height="16.0" width="100.0" x="432.0" y="267.0"></omgdc:Bounds>
+          <omgdc:Bounds height="16.0" width="22.0" x="432.0" y="267.0"></omgdc:Bounds>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow9" id="BPMNEdge_flow9">
         <omgdi:waypoint x="267.0" y="330.0"></omgdi:waypoint>
         <omgdi:waypoint x="195.0" y="330.0"></omgdi:waypoint>
         <bpmndi:BPMNLabel>
-          <omgdc:Bounds height="16.0" width="100.0" x="210.0" y="330.0"></omgdc:Bounds>
+          <omgdc:Bounds height="16.0" width="55.0" x="210.0" y="330.0"></omgdc:Bounds>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10">
@@ -159,7 +165,7 @@
         <omgdi:waypoint x="340.0" y="237.0"></omgdi:waypoint>
         <omgdi:waypoint x="580.0" y="237.0"></omgdi:waypoint>
         <bpmndi:BPMNLabel>
-          <omgdc:Bounds height="16.0" width="100.0" x="449.0" y="220.0"></omgdc:Bounds>
+          <omgdc:Bounds height="16.0" width="22.0" x="449.0" y="220.0"></omgdc:Bounds>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge bpmnElement="flow16" id="BPMNEdge_flow16">
@@ -167,7 +173,24 @@
         <omgdi:waypoint x="597.0" y="330.0"></omgdi:waypoint>
         <omgdi:waypoint x="597.0" y="255.0"></omgdi:waypoint>
         <bpmndi:BPMNLabel>
-          <omgdc:Bounds height="16.0" width="100.0" x="529.0" y="315.0"></omgdc:Bounds>
+          <omgdc:Bounds height="16.0" width="22.0" x="529.0" y="315.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow17" id="BPMNEdge_flow17">
+        <omgdi:waypoint x="142.0" y="303.0"></omgdi:waypoint>
+        <omgdi:waypoint x="142.0" y="28.0"></omgdi:waypoint>
+        <omgdi:waypoint x="597.0" y="28.0"></omgdi:waypoint>
+        <omgdi:waypoint x="597.0" y="220.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="100.0" x="332.0" y="31.0"></omgdc:Bounds>
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge bpmnElement="flow18" id="BPMNEdge_flow18">
+        <omgdi:waypoint x="142.0" y="303.0"></omgdi:waypoint>
+        <omgdi:waypoint x="142.0" y="237.0"></omgdi:waypoint>
+        <omgdi:waypoint x="235.0" y="237.0"></omgdi:waypoint>
+        <bpmndi:BPMNLabel>
+          <omgdc:Bounds height="16.0" width="100.0" x="168.0" y="236.0"></omgdc:Bounds>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>

+ 9 - 1
ui/src/api/eoeg/eoegChange.js

@@ -17,6 +17,14 @@ export function getEoegChange(id) {
   })
 }
 
+export function handle(data) {
+  return request({
+    url: '/eoeg/eoegChange/handle',
+    method: 'put',
+    data: data
+  })
+}
+
 // 新增EOEG 锁开锁关申请
 export function addEoegChange(data) {
   return request({
@@ -50,4 +58,4 @@ export function exportEoegChange(query) {
     method: 'get',
     params: query
   })
-}
+}

+ 7 - 0
ui/src/api/plant/staffmgr.js

@@ -78,6 +78,13 @@ export function listStaffmgrByDeptAndTeam(query) {
     params: query
   })
 }
+export function listStaffByMonitor(query) {
+  return request({
+    url: '/plant/staffmgr/listStaffByMonitor',
+    method: 'get',
+    params: query
+  })
+}
 
 // 查询人员管理列表
 export function listStaffmgrAll(query) {

+ 491 - 0
ui/src/views/approve/approveDetail/eoegLockChange-detail.vue

@@ -0,0 +1,491 @@
+<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.changeDescribe }}
+      </el-descriptions-item>
+      <el-descriptions-item label="状态变更的原因"  :label-style="labelStyle">
+        {{ this.dataForm.changeReason }}
+      </el-descriptions-item>
+      <el-descriptions-item label="申请人" :label-style="labelStyle">
+        {{ this.dataForm.applicantName }}
+      </el-descriptions-item>
+      <el-descriptions-item label="申请时间" :label-style="labelStyle">
+        <template>
+          <span>{{ parseTime(this.dataForm.applicationTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+        </template>
+      </el-descriptions-item>
+      <el-descriptions-item label="状态" :label-style="labelStyle">
+        <el-tag size="small" :type="statusFlag">{{ status[this.dataForm.status] }}</el-tag>
+      </el-descriptions-item>
+      <el-descriptions-item label="申请状态">
+        <el-tag size="small" :type="approveStatusFlag">{{ approveStatus[this.dataForm.approveStatus] }}</el-tag>
+      </el-descriptions-item>
+      <el-descriptions-item label="评估及临时的安全措施" :span="2" :label-style="labelStyle">
+        {{ this.dataForm.safa }}
+      </el-descriptions-item>
+      <el-descriptions-item label="评估人" :label-style="labelStyle">
+        {{ this.dataForm.safaerName }}
+      </el-descriptions-item>
+      <el-descriptions-item label="评估时间" :label-style="labelStyle">
+        <template>
+          <span>{{ parseTime(this.dataForm.safaTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+        </template>
+      </el-descriptions-item>
+      <el-descriptions-item label="批准人" :label-style="labelStyle">
+        {{ this.dataForm.approverName }}
+      </el-descriptions-item>
+      <el-descriptions-item label="批准时间" :label-style="labelStyle">
+        <template>
+          <span>{{ parseTime(this.dataForm.approveTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+        </template>
+      </el-descriptions-item>
+      <el-descriptions-item label="措施确认人" :label-style="labelStyle">
+        {{ this.dataForm.confirmerName }}
+      </el-descriptions-item>
+      <el-descriptions-item label="措施确认时间" :label-style="labelStyle">
+        <template>
+          <span>{{ parseTime(this.dataForm.confirmTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+        </template>
+      </el-descriptions-item>
+      <el-descriptions-item label="措施执行人" :label-style="labelStyle">
+        {{ this.dataForm.executorName }}
+      </el-descriptions-item>
+      <el-descriptions-item label="措施执行时间" :label-style="labelStyle">
+        <template>
+          <span>{{ parseTime(this.dataForm.executionTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+        </template>
+      </el-descriptions-item>
+      <el-descriptions-item label="组织保护措施状态变更执行" :span="2" :label-style="labelStyle">
+        {{ this.dataForm.changeExecution }}
+      </el-descriptions-item>
+      <el-descriptions-item label="变更确认人" :label-style="labelStyle">
+        {{ this.dataForm.changeConfirmerName }}
+      </el-descriptions-item>
+      <el-descriptions-item label="变更确认时间" :label-style="labelStyle">
+        <template>
+          <span>{{ parseTime(this.dataForm.changeConfirmTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+        </template>
+      </el-descriptions-item>
+      <el-descriptions-item label="变更执行人" :label-style="labelStyle">
+        {{ this.dataForm.changeExecutorName }}
+      </el-descriptions-item>
+      <el-descriptions-item label="变更执行时间" :label-style="labelStyle">
+        <template>
+          <span>{{ parseTime(this.dataForm.changeExecutorTime, '{y}-{m}-{d} {h}:{i}') }}</span>
+        </template>
+      </el-descriptions-item>
+      <el-descriptions-item label="组织保护措施是否已经恢复至变更前的状态" :label-style="labelStyle">
+        {{ this.dataForm.resetConfirm }}
+      </el-descriptions-item>
+      <el-descriptions-item label="锁唯一编号" :label-style="labelStyle">
+        {{ this.dataForm.lockNo }}
+      </el-descriptions-item>
+      <el-descriptions-item label="班长" :label-style="labelStyle">
+        {{ this.dataForm.monitorName }}
+      </el-descriptions-item>
+      <el-descriptions-item label="班长确认时间" :label-style="labelStyle">
+        {{ this.dataForm.monitorTime }}
+      </el-descriptions-item>
+      <el-descriptions-item label="确认人1" :label-style="labelStyle">
+        {{ this.dataForm.resetConfirmerName1 }}
+      </el-descriptions-item>
+      <el-descriptions-item label="确认时间" :label-style="labelStyle">
+        {{ this.dataForm.resetConfirmTime1 }}
+      </el-descriptions-item>
+      <el-descriptions-item label="确认人2" :label-style="labelStyle">
+        {{ this.dataForm.resetConfirmerName2 }}
+      </el-descriptions-item>
+      <el-descriptions-item label="确认时间" :label-style="labelStyle">
+        {{ this.dataForm.resetConfirmTime2 }}
+      </el-descriptions-item>
+      <el-descriptions-item label="状态恢复后,之前采取的安全措施是否已撤销" :span="2" :label-style="labelStyle">
+        {{ this.dataForm.revokeConfirm }}
+      </el-descriptions-item>
+      <el-descriptions-item label="备注" :span="2" :label-style="labelStyle">
+        {{ this.dataForm.remarks }}
+      </el-descriptions-item>
+    </el-descriptions>
+    <el-form ref="form" :model="form" label-position="left" :rules="rules" label-width="170px"
+             style="margin-top: 30px">
+      <div v-if="flag">
+        <div v-if="taskName=='申请人提交申请'">
+          <el-form-item label="组织保护措施变更描述" prop="changeDescribe">
+            <el-input type="textarea" v-model="form.changeDescribe" placeholder="请输入组织保护措施变更描述"/>
+          </el-form-item>
+          <el-form-item label="状态变更的原因" prop="changeReason">
+            <el-input type="textarea" v-model="form.changeReason" placeholder="请输入状态变更的原因"/>
+          </el-form-item>
+          <el-form-item label="状态变更的原因" prop="safa">
+            <el-input type="textarea" v-model="form.safa" placeholder="请输入安全评估及临时的安全措施"/>
+          </el-form-item>
+        </div>
+<!--        <div v-if="taskName=='评估人'">-->
+<!--          <el-form-item label="安全评估及临时的安全措施" prop="safa" label-width="190px">-->
+<!--            &lt;!&ndash;            <el-input type="textarea" v-model="form.safa" placeholder="请输入安全评估及临时的安全措施"/>&ndash;&gt;-->
+<!--            <el-autocomplete-->
+<!--              type="textarea"-->
+<!--              class="inline-input"-->
+<!--              style="width: 100%"-->
+<!--              v-model="form.safa"-->
+<!--              placeholder="请输入安全评估及临时的安全措施"-->
+<!--              :trigger-on-focus="false"></el-autocomplete>-->
+<!--          </el-form-item>-->
+<!--        </div>-->
+        <div v-if="taskName=='变更确认人'">
+          <el-form-item label="组织保护措施状态变更执行" prop="changeExecution" label-width="190px">
+            <el-input type="textarea" v-model="form.changeExecution" placeholder="请输入组织保护措施状态变更执行"/>
+          </el-form-item>
+        </div>
+        <div v-if="taskName=='班长'">
+          <el-form-item label="组织保护措施是否已经恢复至变更前的状态" prop="resetConfirm" label-width="310px">
+            <el-radio-group v-model="form.resetConfirm">
+              <el-radio label="是">是</el-radio>
+              <el-radio label="否">否</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="状态恢复后,之前采取的安全措施是否已撤销" prop="revokeConfirm" label-width="310px">
+            <el-radio-group v-model="form.revokeConfirm">
+              <el-radio label="是">是</el-radio>
+              <el-radio label="否">否</el-radio>
+              <el-radio label="NA">NA</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="确认人1" prop="resetConfirmer1">
+            <el-select v-model="form.resetConfirmer1" placeholder="请选择确认人" clearable size="small" filterable @change="compareToStaff('resetConfirmer1')"
+                       style="width: 100%">
+              <el-option
+                v-for="item in resetConfirmerList"
+                :key="item.userId"
+                :label="item.name"
+                :value="item.userId"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="确认人2" prop="resetConfirmer2">
+            <el-select v-model="form.resetConfirmer2" placeholder="请选择确认人2" clearable size="small" filterable @change="compareToStaff('resetConfirmer2')"
+                       style="width: 100%">
+              <el-option
+                v-for="item in resetConfirmerList"
+                :key="item.userId"
+                :label="item.name"
+                :value="item.userId"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </div>
+        <el-form-item label="备注" prop="remarks" v-if="taskName!='申请人提交申请'">
+          <el-input type="textarea" v-model="form.remarks" placeholder="选填"/>
+        </el-form-item>
+      </div>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button v-if="!this.taskForm.taskId == ''&&(this.taskName=='评估人'||this.taskName=='批准人')"
+                 type="warning"
+                 @click="dataFormSubmit(2)" :disabled="submitDisabled">{{ $t('驳回') }}</el-button>
+      <el-button v-if="!this.taskForm.taskId == ''" type="primary"
+                 @click="dataFormSubmit(1)"
+                 :disabled="submitDisabled">{{ $t(taskName != '申请人提交申请' ? '通过' : '提交') }}</el-button>
+      <el-button v-if="!this.taskForm.taskId == ''&&(this.taskName=='评估人'||this.taskName=='评估人2'||this.taskName=='批准人')"
+                 type="danger"
+                 @click="dataFormSubmit(0)" :disabled="submitDisabled">{{ $t('拒绝') }}</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 {getUserId, listUserPost} from "@/api/system/user";
+import {getEoegChange,handle} from "@/api/eoeg/eoegChange";
+import {getLockApply} from "@/api/eoeg/lockApply";
+import {getStaffId, listStaffByMonitor, listStaffmgrByDeptAndTeam} from "@/api/plant/staffmgr";
+
+export default {
+  name: "eoegLockChangeDetail",
+  data() {
+    return {
+      labelStyle: {'width': '200px'},
+      statusFlag: '',
+      approveStatusFlag: '',
+      status: {0: "未完成", 1: "已完成"},
+      approveStatus: {1: "申请中", 2: "已通过", 3: "已拒绝"},
+      flag: false,
+      visible: false,
+      resetConfirmerList: [],
+      statusList: [],
+      approveStatusList: [],
+      safaList: [],
+      //流转列表
+      historyList: [],
+      historyLoading: true,
+      submitDisabled: false,
+      taskName: '',
+      devList: [],
+      form: {},
+      rules: {
+        //resetConfirmer1: [{required: true, message: "请选择确认人", trigger: "blur"}],
+        resetConfirm: [{required: true, message: "请选择是/否", trigger: "blur"}],
+        changeExecution: [{required: true, message: "请输入组织保护措施状态变更执行", trigger: "blur"}],
+        safa: [{required: true, message: "请输入安全评估及临时的安全措施", trigger: "blur"}],
+        changeDescribe: [
+          {required: true, message: "请输入组织保护措施变更描述", trigger: "blur"}
+        ],
+        changeReason: [
+          {required: true, message: "请输入状态变更的原因", trigger: "blur"}
+        ],
+        revokeConfirm: [{required: true, message: "请选择是/否/NA", trigger: "blur"}],
+        resetConfirmer1: [{required: true, message: "请选择确认人", trigger: "blur"}],
+        resetConfirmer2: [{required: true, message: "请选择确认人", trigger: "blur"}]
+      },
+      dataForm: {
+        id: null,
+        changeDescribe: null,
+        changeReason: null,
+        applicant: null,
+        applicantName: null,
+        applicationTime: null,
+        safa: null,
+        safaer: null,
+        safaerName: null,
+        safaTime: null,
+        approver: null,
+        approverName: null,
+        approveTime: null,
+        executor: null,
+        executorName: null,
+        executionTime: null,
+        confirmer: null,
+        confirmerName: null,
+        confirmTime: null,
+        changeExecution: null,
+        changeExecutor: null,
+        changeExecutorName: null,
+        changeExecutorTime: null,
+        resetConfirm: null,
+        resetConfirmer1: null,
+        resetConfirmerName1: null,
+        resetConfirmTime1: null,
+        resetConfirmer2: null,
+        resetConfirmerName2: null,
+        resetConfirmTime2: null,
+        revokeConfirm: null,
+        remarks: null,
+        status: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        approveStatus: null,
+        apNo: null,
+        processId: null,
+        lockNo: null,
+        changeConfirmer: null,
+        changeConfirmerName: null,
+        changeConfirmTime: null,
+        monitor: null,
+        monitorName: null,
+        monitorTime: null
+      },
+      taskForm: {
+        comment: '',
+        taskId: '',
+        files: '',
+        govDate: '',
+        govFileList: [],
+        businessKey: '',
+        tEoegLockApply: {
+          tEoegLockChange:{}
+        }
+      },
+    }
+  },
+  methods: {
+    init(id, taskId, processId, taskName, flag) {
+      this.reset();
+      this.devList = [];
+      this.dataForm = {};
+      this.historyList = [];
+      this.dataForm.id = id || 0;
+      this.form.id = id || 0;
+      this.submitDisabled = false;
+      this.flag = flag;
+      this.visible = true;
+      this.taskName = taskName;
+      console.log('taskName:' + taskName)
+      console.log('flag:' + flag)
+      this.taskForm.taskId = taskId;
+      this.taskForm.businessKey = id;
+      this.dataForm.processId = processId;
+      this.statusFlag = '';
+      this.approveStatusFlag = '';
+      getEoegChange(id).then(res => {
+        this.dataForm = res.data;
+      })
+      this.getDicts("apply_status").then(response => {
+        this.statusList = response.data;
+      });
+      this.getDicts("apply_approve_status").then(response => {
+        this.approveStatusList = response.data;
+      });
+      getHistorylist({processId: processId}).then(response => {
+        this.historyList = response.rows;
+        this.historyLoading = false
+      });
+      let staffId = null;
+      getStaffId().then(res => {
+        staffId = res.data;
+        listStaffByMonitor({staffid:staffId}).then(res=>{
+          this.resetConfirmerList = res.data;
+        })
+      })
+    },
+    statusFormat(row, column) {
+      let s = this.selectDictLabel(this.statusList, row.status);
+      let type = '';
+      if (row.status === 1) {
+        type = 'success';
+      }
+      return <el-tag type={type}>{s}</el-tag>;
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        changeDescribe: null,
+        changeReason: null,
+        applicant: null,
+        applicantName: null,
+        applicationTime: null,
+        safa: null,
+        safaer: null,
+        safaerName: null,
+        safaTime: null,
+        approver: null,
+        approverName: null,
+        approveTime: null,
+        executor: null,
+        executorName: null,
+        executionTime: null,
+        confirmer: null,
+        confirmerName: null,
+        confirmTime: null,
+        changeExecution: null,
+        changeExecutor: null,
+        changeExecutorName: null,
+        changeExecutorTime: null,
+        resetConfirm: null,
+        resetConfirmer1: null,
+        resetConfirmerName1: null,
+        resetConfirmTime1: null,
+        resetConfirmer2: null,
+        resetConfirmerName2: null,
+        resetConfirmTime2: null,
+        revokeConfirm: null,
+        remarks: null,
+        status: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        approveStatus: null,
+        apNo: null,
+        processId: null,
+        lockNo: null,
+        changeConfirmer: null,
+        changeConfirmerName: null,
+        changeConfirmTime: null,
+        monitor: null,
+        monitorName: null,
+        monitorTime: null
+      };
+      this.resetForm("form");
+    },
+    // 字典翻译
+    approveStatusFormat(row, column) {
+      let s = this.selectDictLabel(this.approveStatusList, row.approveStatus)
+      let type = '';
+      if (row.approveStatus === '2') {
+        type = 'success';
+      } else if (row.approveStatus === '1') {
+        type = 'warning';
+      } else if (row.approveStatus === '3') {
+        type = 'danger';
+      }
+      return <el-tag type={type}>{s}</el-tag>;
+    },
+    dataFormSubmit(val) {
+      if (val == 2 || val == 0) {
+        if (this.form.remarks == "" || this.form.remarks == null || this.form.remarks == undefined) {
+          this.$alert("驳回/拒绝申请必须填写备注!", "注意!", {dangerouslyUseHTMLString: true});
+          return;
+        }
+      }
+      this.$refs["form"].validate(valid => {
+        if (valid || val != 1) {
+          this.submitDisabled = true;
+          this.taskForm.condition = val;
+          this.taskForm.tEoegLockApply.tEoegLockChange = this.form;
+          handle(this.taskForm).then(res => {
+            this.msgSuccess("审核成功");
+            this.visible = false;
+            this.$emit('refreshDataList')
+          })
+        }
+      })
+    },
+    compareToStaff(field) {
+      // 定义验证规则:字段名和错误消息
+      const validationRules = [
+        {
+          fields: ['resetConfirmer1', 'resetConfirmer2'],
+          message: '确认人1不能与确认人2为同一人!'
+        }
+      ];
+      const isValidValue = (value) => {
+        return value !== null && value !== undefined && value !== '';
+      };
+
+      // 使用循环检查所有规则
+      for (const rule of validationRules) {
+        const [field1, field2] = rule.fields;
+        const value1 = this.form[field1];
+        const value2 = this.form[field2];
+
+        // 只有当两个字段都有有效值且相等时才提示
+        if (isValidValue(value1) && isValidValue(value2) && value1 === value2) {
+          this.$alert(rule.message, "警告", {dangerouslyUseHTMLString: true});
+          this.form[field] = null;
+          break;
+        }
+      }
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 10 - 1
ui/src/views/approve/myapprove/index.vue

@@ -62,6 +62,7 @@
     <dsdt-nopass-detail v-if="dsdtNopassDetailVisible" ref="dsdtNopassDetail" @refreshDataList="getList"></dsdt-nopass-detail>
     <pssr-approve-detail v-if="pssrApproveDetailVisible" ref="pssrApproveDetail" @refreshDataList="getList"></pssr-approve-detail>
     <pssr-mgr-approve-detail v-if="pssrMgrApproveDetailVisible" ref="pssrMgrApproveDetail" @refreshDataList="getList"></pssr-mgr-approve-detail>
+    <EoegLockChangeDetail v-if="eoegLockApproveDetailVisible" ref="eoegLockApproveDetail" @refreshDataList="getList"></EoegLockChangeDetail>
 
   </div>
 </template>
@@ -87,10 +88,12 @@
   import DsdtNopassDetail from "@/views/approve/approveDetail/dsdtNoPass-detail.vue";
   import PssrApproveDetail from "@/views/approve/approveDetail/pssrApprove-detail.vue";
   import PssrMgrApproveDetail from "@/views/approve/approveDetail/pssrMgrApprove-detail.vue";
+  import EoegLockChangeDetail from "@/views/approve/approveDetail/eoegLockChange-detail.vue";
 
   export default {
     name: "Myapprove",
     components: {
+      EoegLockChangeDetail,
       PssrMgrApproveDetail,
       PssrApproveDetail,
       DsdtNopassDetail,
@@ -120,6 +123,7 @@
         dsdtNopassDetailVisible: false,
         pssrApproveDetailVisible: false,
         pssrMgrApproveDetailVisible: false,
+        eoegLockApproveDetailVisible: false,
         // 选中数组
         ids: [],
         // 非单个禁用
@@ -287,7 +291,12 @@
           this.$nextTick(() => {
             this.$refs.pssrApproveDetail.init(row.approveObject.subId, row.taskId, row.processId, row.taskName,row.approveObject.sn)
           })
-        }else {
+        } else if (row.processName == "EOEG锁开锁关申请流程") {
+          this.eoegLockApproveDetailVisible = true
+          this.$nextTick(() => {
+            this.$refs.eoegLockApproveDetail.init(row.approveObject.changeId, row.taskId, row.processId, row.taskName,false)
+          })
+        } else {
           this.approveInfo = row;
           this.infoTaskName = row.taskName;
           this.infoprocessName = row.processName;

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

@@ -137,6 +137,7 @@
     <dsdt-nopass-detail v-if="dsdtNopassDetailVisible" ref="dsdtNopassDetail" @refreshDataList="getList"></dsdt-nopass-detail>
     <pssr-approve-detail v-if="pssrApproveDetailVisible" ref="pssrApproveDetail" @refreshDataList="getList"></pssr-approve-detail>
     <pssr-mgr-approve-detail v-if="pssrMgrApproveDetailVisible" ref="pssrMgrApproveDetail" @refreshDataList="getList"></pssr-mgr-approve-detail>
+    <EoegLockChangeDetail v-if="eoegLockApproveDetailVisible" ref="eoegLockApproveDetail" @refreshDataList="getList"></EoegLockChangeDetail>
 
   </div>
 </template>
@@ -164,10 +165,12 @@ import DsdtTrainingDetail from "@/views/approve/approveDetail/dsdtTraining-detai
 import DsdtNopassDetail from "@/views/approve/approveDetail/dsdtNoPass-detail.vue";
 import PssrApproveDetail from "@/views/approve/approveDetail/pssrApprove-detail.vue";
 import PssrMgrApproveDetail from "@/views/approve/approveDetail/pssrMgrApprove-detail.vue";
+import EoegLockChangeDetail from "@/views/approve/approveDetail/eoegLockChange-detail.vue";
 
 export default {
     name: "Pending",
     components: {
+      EoegLockChangeDetail,
       PssrMgrApproveDetail,
       PssrApproveDetail,
       DsdtNopassDetail,
@@ -209,6 +212,7 @@ export default {
         dsdtNopassDetailVisible: false,
         pssrApproveDetailVisible: false,
         pssrMgrApproveDetailVisible: false,
+        eoegLockApproveDetailVisible: false,
         // 选中数组
         ids: [],
         // 非单个禁用
@@ -464,6 +468,11 @@ export default {
           this.$nextTick(() => {
             this.$refs.pssrApproveDetail.init(row.approveObject.subId, row.taskId, row.processId, row.taskName,row.approveObject.sn)
           })
+        } else if (row.processName == "EOEG锁开锁关申请流程") {
+          this.eoegLockApproveDetailVisible = true
+          this.$nextTick(() => {
+            this.$refs.eoegLockApproveDetail.init(row.approveObject.changeId, row.taskId, row.processId, row.taskName,true)
+          })
         } else {
           this.approveInfo = row;
           this.infoTaskName = row.taskName;

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

@@ -66,6 +66,7 @@
     <dsdt-nopass-detail v-if="dsdtNopassDetailVisible" ref="dsdtNopassDetail" @refreshDataList="getList"></dsdt-nopass-detail>
     <pssr-approve-detail v-if="pssrApproveDetailVisible" ref="pssrApproveDetail" @refreshDataList="getList"></pssr-approve-detail>
     <pssr-mgr-approve-detail v-if="pssrMgrApproveDetailVisible" ref="pssrMgrApproveDetail" @refreshDataList="getList"></pssr-mgr-approve-detail>
+    <EoegLockChangeDetail v-if="eoegLockApproveDetailVisible" ref="eoegLockApproveDetail" @refreshDataList="getList"></EoegLockChangeDetail>
 
   </div>
 </template>
@@ -92,10 +93,12 @@
   import DsdtNopassDetail from "@/views/approve/approveDetail/dsdtNoPass-detail.vue";
   import PssrApproveDetail from "@/views/approve/approveDetail/pssrApprove-detail.vue";
   import PssrMgrApproveDetail from "@/views/approve/approveDetail/pssrMgrApprove-detail.vue";
+  import EoegLockChangeDetail from "@/views/approve/approveDetail/eoegLockChange-detail.vue";
 
   export default {
     name: "Taskdone",
     components: {
+      EoegLockChangeDetail,
       PssrMgrApproveDetail,
       PssrApproveDetail,
       DsdtNopassDetail,
@@ -126,6 +129,7 @@
         dsdtNopassDetailVisible: false,
         pssrApproveDetailVisible: false,
         pssrMgrApproveDetailVisible: false,
+        eoegLockApproveDetailVisible: false,
         // 选中数组
         ids: [],
         // 非单个禁用
@@ -299,6 +303,11 @@
           this.$nextTick(() => {
             this.$refs.pssrApproveDetail.init(row.approveObject.subId, row.taskId, row.processId, row.taskName,row.approveObject.sn)
           })
+        } else if (row.processName == "EOEG锁开锁关申请流程") {
+          this.eoegLockApproveDetailVisible = true
+          this.$nextTick(() => {
+            this.$refs.eoegLockApproveDetail.init(row.approveObject.changeId, row.taskId, row.processId, row.taskName,false)
+          })
         }  else {
           this.approveInfo = row;
           this.infoTaskName = row.taskName;

+ 125 - 49
ui/src/views/eoeg/eoegChange/index.vue

@@ -19,45 +19,15 @@
         >新增
         </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="['eoeg:eoegChange: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="['eoeg:eoegChange:remove']"
-        >删除
-        </el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['eoeg:eoegChange:export']"
-        >导出
-        </el-button>
-      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="eoegChangeList" @selection-change="handleSelectionChange"
               :height="clientHeight" border>
       <el-table-column type="selection" width="55" align="center" fixed="left"/>
-      <el-table-column label="申请状态" align="center" prop="approveStatus"
+      <el-table-column label="申请状态" align="center" prop="approveStatus" :formatter="approveStatusFormat"
+                       :show-overflow-tooltip="true" width="150" fixed="left"/>
+      <el-table-column label="完成状态" align="center" prop="status" :formatter="statusFormat"
                        :show-overflow-tooltip="true" width="150" fixed="left"/>
       <el-table-column label="锁编号" align="center" prop="lockNo" :show-overflow-tooltip="true" width="200"
                        fixed="left"/>
@@ -142,20 +112,11 @@
       <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="['eoeg:eoegChange:edit']"
-          >修改
-          </el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['eoeg:eoegChange:remove']"
-          >删除
+          size="mini"
+          type="text"
+          icon="el-icon-document"
+          @click="openDetail(scope.row)"
+          >详情
           </el-button>
         </template>
       </el-table-column>
@@ -169,6 +130,54 @@
       @pagination="getList"
     />
 
+    <el-dialog title="详情" :visible.sync="detail.open" width="70%" append-to-body close-on-click-modal>
+      <el-descriptions class="margin-top"  :column="2"  border :label-style="{'width': '200px'}">
+        <el-descriptions-item label="申请状态"><el-tag size="small" :type="approveStatusFlag">{{ approveStatus[detail.detailData.approveStatus] }}</el-tag></el-descriptions-item>
+        <el-descriptions-item label="完成状态"><el-tag size="small" :type="statusFlag">{{ status[detail.detailData.status] }}</el-tag></el-descriptions-item>
+        <el-descriptions-item label="锁编号">{{ detail.detailData.lockNo }}</el-descriptions-item>
+        <el-descriptions-item label="措施变更描述">{{ detail.detailData.changeDescribe }}</el-descriptions-item>
+        <el-descriptions-item label="状态变更原因">{{ detail.detailData.changeReason }}</el-descriptions-item>
+        <el-descriptions-item label="评估及临时的安全措施">{{ detail.detailData.safa }}</el-descriptions-item>
+        <el-descriptions-item label="申请人">{{ detail.detailData.applicantName }}</el-descriptions-item>
+        <el-descriptions-item label="申请时间">{{ parseTime(detail.detailData.applicationTime, '{y}-{m}-{d}') }}</el-descriptions-item>
+        <el-descriptions-item label="评估人">{{ detail.detailData.safaerName }}</el-descriptions-item>
+        <el-descriptions-item label="评估时间">{{ parseTime(detail.detailData.safaTime, '{y}-{m}-{d}') }}</el-descriptions-item>
+        <el-descriptions-item :span="2" label="组织保护措施状态变更执行">{{ detail.detailData.changeExecution }}</el-descriptions-item>
+        <el-descriptions-item label="批准人">{{ detail.detailData.approverName }}</el-descriptions-item>
+        <el-descriptions-item label="批准时间">{{ parseTime(detail.detailData.approveTime, '{y}-{m}-{d}') }}</el-descriptions-item>
+        <el-descriptions-item label="措施确认人">{{ detail.detailData.confirmerName }}</el-descriptions-item>
+        <el-descriptions-item label="措施确认时间">{{ parseTime(detail.detailData.confirmTime, '{y}-{m}-{d}') }}</el-descriptions-item>
+        <el-descriptions-item label="措施执行人">{{ detail.detailData.executorName }}</el-descriptions-item>
+        <el-descriptions-item label="措施执行时间">{{ parseTime(detail.detailData.executionTime, '{y}-{m}-{d}') }}</el-descriptions-item>
+        <el-descriptions-item label="变更确认人">{{ detail.detailData.changeConfirmerName }}</el-descriptions-item>
+        <el-descriptions-item label="变更确认人确认时间">{{ parseTime(detail.detailData.changeConfirmTime, '{y}-{m}-{d}') }}</el-descriptions-item>
+        <el-descriptions-item label="变更执行人">{{ detail.detailData.changeExecutorName }}</el-descriptions-item>
+        <el-descriptions-item label="变更执行时间">{{ parseTime(detail.detailData.changeExecutorTime, '{y}-{m}-{d}') }}</el-descriptions-item>
+        <el-descriptions-item label="班长">{{ detail.detailData.monitorName }}</el-descriptions-item>
+        <el-descriptions-item label="班长确认时间">{{ parseTime(detail.detailData.monitorTime, '{y}-{m}-{d}') }}</el-descriptions-item>
+        <el-descriptions-item label="确认人1">{{ detail.detailData.resetConfirmerName1 }}</el-descriptions-item>
+        <el-descriptions-item label="确认时间1">{{ parseTime(detail.detailData.resetConfirmTime1, '{y}-{m}-{d}') }}</el-descriptions-item>
+        <el-descriptions-item label="确认人2">{{ detail.detailData.resetConfirmerName2 }}</el-descriptions-item>
+        <el-descriptions-item label="确认时间2">{{ parseTime(detail.detailData.resetConfirmTime2, '{y}-{m}-{d}') }}</el-descriptions-item>
+        <el-descriptions-item label="状态恢复后,之前采取的安全措施是否已撤销:">{{ detail.detailData.revokeConfirm }}</el-descriptions-item>
+        <el-descriptions-item label="组织保护措施是否已经恢复至变更前的状态">{{ detail.detailData.resetConfirm }}</el-descriptions-item>
+        <el-descriptions-item :span="2" label="备注">{{ detail.detailData.remarks }}</el-descriptions-item>
+      </el-descriptions>
+      <div class="mt5">
+        <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>
+
     <!-- 添加或修改EOEG 锁开锁关申请对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="180px">
@@ -271,13 +280,29 @@ import {getToken} from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import {listEoegLock} from "@/api/eoeg/eoegLock";
-import {listStaffmgr, listStaffmgrByActualposts} from "@/api/plant/staffmgr";
+import {listStaffmgrByActualposts} from "@/api/plant/staffmgr";
+import {getHistorylist} from "@/api/ehs/approvedanger";
+import {listLockApply} from "@/api/eoeg/lockApply";
 
 export default {
   name: "EoegChange",
   components: {Treeselect},
   data() {
     return {
+      detail:{
+        open:false,
+        detailData:{}
+      },
+      statusFlag: '',
+      approveStatusFlag: '',
+      status: {0: "未完成", 1: "已完成"},
+      approveStatus: {1: "申请中", 2: "已通过", 3: "已拒绝"},
+      // 字典
+      statusList: [],
+      approveStatusList: [],
+      //流转列表
+      historyList: [],
+      historyLoading: true,
       // 遮罩层
       loading: true,
       // 选中数组
@@ -417,8 +442,35 @@ export default {
     this.getLockList();
     this.getSaferList();
     this.getClassStaffList();
+    this.getDicts("apply_status").then(response => {
+      this.statusList = response.data;
+    });
+    this.getDicts("apply_approve_status").then(response => {
+      this.approveStatusList = response.data;
+    });
   },
-  methods: {
+  methods: {// 字典翻译
+    approveStatusFormat(row, column) {
+      let s = this.selectDictLabel(this.approveStatusList, row.approveStatus)
+      let type = '';
+      if (row.approveStatus === '2') {
+        type = 'success';
+      } else if (row.approveStatus === '1') {
+        type = 'warning';
+      } else if (row.approveStatus === '3') {
+        type = 'danger';
+      }
+      return <el-tag type={type}>{s}</el-tag>;
+    },
+    // 字典翻译
+    statusFormat(row, column) {
+      let s = this.selectDictLabel(this.statusList, row.status);
+      let type = '';
+      if (row.status === 1) {
+        type = 'success';
+      }
+      return <el-tag type={type}>{s}</el-tag>;
+    },
     compareToStaff(field) {
       // 定义验证规则:字段名和错误消息
       const validationRules = [
@@ -464,6 +516,30 @@ export default {
         this.classStaffOptions = response.data;
       });
     },
+    openDetail(row){
+      this.detail.open=true;
+      this.detail.detailData=row;
+      this.statusFlag = '';
+      this.approveStatusFlag = '';
+      if (row.status === 1) {
+        this.statusFlag = 'success';
+      }
+      if (row.approveStatus === '2') {
+        this.approveStatusFlag = 'success';
+      } else if (row.approveStatus === '1') {
+        this.approveStatusFlag = 'warning';
+      } else if (row.approveStatus === '3') {
+        this.approveStatusFlag = 'danger';
+      }
+      let processId;
+      listLockApply({changeId:row.id}).then(res=>{
+        processId=res.rows[0].processId;
+        getHistorylist({processId: processId}).then(response => {
+          this.historyList = response.rows;
+          this.historyLoading = false
+        });
+      })
+    },
     getLockList() {
       listEoegLock({}).then(response => {
         this.lockList = response.rows;