Explorar el Código

登录调试、增加权限校验

chenminghua hace 4 años
padre
commit
f661362724
Se han modificado 28 ficheros con 438 adiciones y 106 borrados
  1. 4 4
      src/main/java/com/gyee/frame/aspect/VerificationAspect.java
  2. 3 3
      src/main/java/com/gyee/frame/common/exception/GlobalExceptionResolver.java
  3. 3 3
      src/main/java/com/gyee/frame/common/exception/LoginException.java
  4. 31 6
      src/main/java/com/gyee/frame/controller/ticket/LaborController.java
  5. 21 0
      src/main/java/com/gyee/frame/controller/ticket/LaborgroupController.java
  6. 8 7
      src/main/java/com/gyee/frame/controller/ticket/WfassignmentController.java
  7. 9 7
      src/main/java/com/gyee/frame/controller/ticket/WfinstanceController.java
  8. 10 3
      src/main/java/com/gyee/frame/controller/ticket/WftransController.java
  9. 6 3
      src/main/java/com/gyee/frame/controller/ticket/WorkticketController.java
  10. 27 2
      src/main/java/com/gyee/frame/mapper/ticket/LaborMapper.java
  11. 16 0
      src/main/java/com/gyee/frame/mapper/ticket/LaborgroupMapper.java
  12. 41 0
      src/main/java/com/gyee/frame/model/ticket/Laborgroup.java
  13. 20 2
      src/main/java/com/gyee/frame/service/impl/ticket/LaborServiceImpl.java
  14. 20 0
      src/main/java/com/gyee/frame/service/impl/ticket/LaborgroupServiceImpl.java
  15. 32 13
      src/main/java/com/gyee/frame/service/impl/ticket/WfassignmentServiceImpl.java
  16. 45 33
      src/main/java/com/gyee/frame/service/impl/ticket/WfinstanceServiceImpl.java
  17. 12 0
      src/main/java/com/gyee/frame/service/impl/ticket/WfroleServiceImpl.java
  18. 5 5
      src/main/java/com/gyee/frame/service/impl/ticket/WftransServiceImpl.java
  19. 7 1
      src/main/java/com/gyee/frame/service/impl/ticket/WorkticketServiceImpl.java
  20. 37 1
      src/main/java/com/gyee/frame/service/ticket/LaborService.java
  21. 16 0
      src/main/java/com/gyee/frame/service/ticket/LaborgroupService.java
  22. 6 4
      src/main/java/com/gyee/frame/service/ticket/WfassignmentService.java
  23. 2 2
      src/main/java/com/gyee/frame/service/ticket/WfinstanceService.java
  24. 8 0
      src/main/java/com/gyee/frame/service/ticket/WfroleService.java
  25. 4 2
      src/main/java/com/gyee/frame/service/ticket/WftransService.java
  26. 4 2
      src/main/java/com/gyee/frame/service/ticket/WorkticketService.java
  27. 24 3
      src/main/java/com/gyee/frame/util/ticket/TicketUtil.java
  28. 17 0
      src/main/resources/mybatis/ticket/LaborgroupMapper.xml

+ 4 - 4
src/main/java/com/gyee/frame/aspect/VerificationAspect.java

@@ -1,7 +1,7 @@
 package com.gyee.frame.aspect;
 
 
-import com.gyee.frame.common.exception.LoginException;
+import com.gyee.frame.common.exception.TicketException;
 import com.gyee.frame.model.ticket.Ibsusers;
 import com.gyee.frame.model.ticket.TokenUser;
 import com.gyee.frame.service.ticket.IbsusersService;
@@ -57,11 +57,11 @@ public class VerificationAspect {
              *  如果users == null 表示之前的登录信息和现有的登录信息不一致
              */
             if (users == null)
-                throw new LoginException("请先登录");
+                throw new TicketException("请登录后使用");
         } else {
             TokenUser user = shiroService.findToken(token);
             if (user == null)
-                throw new LoginException("请先登录");
+                throw new TicketException("请登录后使用");
 
             long expireTime = user.getExpireTime();
             long nowTime = new Date().getTime();
@@ -69,7 +69,7 @@ public class VerificationAspect {
              * 判断登录是否过期
              */
             if (nowTime - expireTime > shiroService.EXPIRE)
-                throw new LoginException("请先登录");
+                throw new TicketException("请登录后使用");
         }
     }
 }

+ 3 - 3
src/main/java/com/gyee/frame/common/exception/GlobalExceptionResolver.java

@@ -122,10 +122,10 @@ public class GlobalExceptionResolver{
      * @param e
      * @return
      */
-    @ExceptionHandler(LoginException.class)
-    public AjaxResult loginFail(LoginException e)
+    @ExceptionHandler(TicketException.class)
+    public AjaxResult loginFail(TicketException e)
     {
-        logger.error("登录异常:", e.getMsg());
+        logger.error("TICKET异常:", e.getMsg());
         return AjaxResult.error(e.getMessage());
     }
 }

+ 3 - 3
src/main/java/com/gyee/frame/common/exception/LoginException.java

@@ -1,17 +1,17 @@
 package com.gyee.frame.common.exception;
 
 
-public class LoginException extends RuntimeException{
+public class TicketException extends RuntimeException{
 
     private static final long serialVersionUID = 1L;
     private int code = 4004;
     private String msg;
 
-    public LoginException() {
+    public TicketException() {
         super();
     }
 
-    public LoginException(String msg) {
+    public TicketException(String msg) {
         super(msg);
     }
 

+ 31 - 6
src/main/java/com/gyee/frame/controller/ticket/LaborController.java

@@ -6,7 +6,11 @@ import com.gyee.frame.common.dataSources.DataSource;
 import com.gyee.frame.common.dataSources.DataSourceType;
 import com.gyee.frame.common.domain.AjaxResult;
 import com.gyee.frame.model.ticket.Labor;
+import com.gyee.frame.model.ticket.TokenUser;
+import com.gyee.frame.model.ticket.Wfrole;
 import com.gyee.frame.service.ticket.LaborService;
+import com.gyee.frame.service.ticket.ShiroService;
+import com.gyee.frame.service.ticket.WfroleService;
 import com.gyee.frame.util.ticket.TicketUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -28,15 +32,36 @@ public class LaborController {
 
     @Autowired
     LaborService laborService;
+    @Autowired
+    WfroleService wfroleService;
+    @Autowired
+    ShiroService shiroService;
 
     @DataSource(value = DataSourceType.TICKET)
     @GetMapping(value = "group")
-    public AjaxResult getLaborGroup(@RequestParam("role") String role) {
-        String groupName = TicketUtil.roleFormat(role);
-        List<Labor> labors = laborService.getLaborGroups("", groupName);
-        if (labors == null || labors.size() == 0)
+    public AjaxResult getLaborGroup( @RequestParam("role") String role, @RequestParam("dept") String dept) {
+        Wfrole wfrole = wfroleService.getRole(role);
+        if (wfrole == null)
             return AjaxResult.error(4004, "人员获取失败");
 
+        System.out.println(role);
+        System.out.println(wfrole.getRoletype());
+        List<Labor> labors = new ArrayList<>();
+        switch (wfrole.getRoletype()){
+            case "自定义类":
+                labors = laborService.getLaborOfDept(dept, role);
+                break;
+            case "人员组":
+                labors = laborService.getLaborOfPersonGroup(role);
+                break;
+            case "人员":
+                labors = laborService.getLaborOfPerson(role);
+                break;
+        }
+
+        if (labors == null || labors.size() == 0)
+            return AjaxResult.error(4004, "数据为空");
+
         return AjaxResult.successData(labors);
     }
 
@@ -47,14 +72,14 @@ public class LaborController {
         Double instId = jsonObject.getDouble("instid");
         String role = jsonObject.getString("role");
 
-        List<Labor> labors = null;
+        List<Labor> labors = new ArrayList<>();
         if (role.contains("流程启动者") || role.contains("流程人员变更"))
             labors = laborService.getFlowStarter(instId);
         else
             labors = laborService.getLaborSingle(jsonObject.getDouble("instid"), jsonObject.getString("role"));
 
         if (labors == null || labors.size() == 0)
-            return AjaxResult.error(4004, "人员获取失败");
+            return AjaxResult.error(4004, "数据为空");
 
         return AjaxResult.successData(labors);
     }

+ 21 - 0
src/main/java/com/gyee/frame/controller/ticket/LaborgroupController.java

@@ -0,0 +1,21 @@
+package com.gyee.frame.controller.ticket;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author chenmh
+ * @since 2020-08-06
+ */
+@RestController
+@RequestMapping("//laborgroup")
+public class LaborgroupController {
+
+}
+

+ 8 - 7
src/main/java/com/gyee/frame/controller/ticket/WfassignmentController.java

@@ -5,14 +5,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.gyee.frame.common.dataSources.DataSource;
 import com.gyee.frame.common.dataSources.DataSourceType;
 import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.ticket.TokenUser;
 import com.gyee.frame.model.ticket.Wfassignment;
+import com.gyee.frame.service.ticket.ShiroService;
 import com.gyee.frame.service.ticket.WfassignmentService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Optional;
 
@@ -29,6 +27,8 @@ import java.util.Optional;
 public class WfassignmentController {
 
     @Autowired
+    ShiroService shiroService;
+    @Autowired
     WfassignmentService wfassignmentService;
 
     /**
@@ -38,10 +38,11 @@ public class WfassignmentController {
      */
     @DataSource(value = DataSourceType.TICKET)
     @GetMapping(value = "list")
-    public AjaxResult getList(@RequestParam("page") Optional<Long> page){
+    public AjaxResult getList(@RequestHeader(value = "token") String header, @RequestParam("page") Optional<Long> page){
+        TokenUser token = shiroService.findToken(header);
         Long pageNum = page.orElse(1L);
 
-        IPage<Wfassignment> wfassignment = wfassignmentService.selectPage(pageNum);
+        IPage<Wfassignment> wfassignment = wfassignmentService.selectPage(token.getLaborNum(), pageNum);
         if(wfassignment != null)
             return AjaxResult.successData(wfassignment);
         else

+ 9 - 7
src/main/java/com/gyee/frame/controller/ticket/WfinstanceController.java

@@ -5,13 +5,11 @@ import com.alibaba.fastjson.JSONObject;
 import com.gyee.frame.common.dataSources.DataSource;
 import com.gyee.frame.common.dataSources.DataSourceType;
 import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.ticket.TokenUser;
+import com.gyee.frame.service.ticket.ShiroService;
 import com.gyee.frame.service.ticket.WfinstanceService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -28,11 +26,13 @@ import java.util.List;
 public class WfinstanceController {
 
     @Autowired
+    ShiroService shiroService;
+    @Autowired
     WfinstanceService wfinstanceService;
 
     @DataSource(DataSourceType.TICKET)
     @PostMapping(value = "init/flow")
-    public AjaxResult initFlow(@RequestParam("info") String info){
+    public AjaxResult initFlow(@RequestHeader("token") String header, @RequestParam("info") String info){
         JSONObject jsonObject = JSONObject.parseObject(info);
         int status = jsonObject.getInteger("status");
         double ownerId = jsonObject.getDouble("ownerid");
@@ -43,9 +43,11 @@ public class WfinstanceController {
         String ticketNum = jsonObject.getString("ticketnum");
         List<String> labors = (List<String>) jsonObject.get("labors");
 
+        TokenUser token = shiroService.findToken(header);
+
         // 流程初始化
         if (status == 0){
-            boolean result = wfinstanceService.initInstance(ownerId, wfName, ticketNum, principal, stater, labors.get(0), role);
+            boolean result = wfinstanceService.initInstance(ownerId, wfName, ticketNum, principal, stater, labors, role, token.getLaborName());
             if (!result)
                 return AjaxResult.error(4004, "流程发送失败");
         }

+ 10 - 3
src/main/java/com/gyee/frame/controller/ticket/WftransController.java

@@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONObject;
 import com.gyee.frame.common.dataSources.DataSource;
 import com.gyee.frame.common.dataSources.DataSourceType;
 import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.ticket.TokenUser;
+import com.gyee.frame.service.ticket.ShiroService;
 import com.gyee.frame.service.ticket.WfassignmentService;
 import com.gyee.frame.service.ticket.WfinstanceService;
 import com.gyee.frame.service.ticket.WftransService;
@@ -32,6 +34,9 @@ public class WftransController {
     WfassignmentService wfassignmentService;
     @Autowired
     WftransService wftransService;
+    @Autowired
+    ShiroService shiroService;
+
 
     @DataSource(value = DataSourceType.TICKET)
     @GetMapping(value = "index")
@@ -47,7 +52,7 @@ public class WftransController {
 
     @DataSource(DataSourceType.TICKET)
     @PostMapping(value = "flow")
-    public AjaxResult postTransFlow(@RequestParam("info") String info){
+    public AjaxResult postTransFlow(@RequestHeader("token") String header, @RequestParam("info") String info){
         JSONObject jsonObject = JSONObject.parseObject(info);
         int status = jsonObject.getInteger("status");
         double actionId = jsonObject.getDouble("actionid");
@@ -61,10 +66,12 @@ public class WftransController {
         String ticketNum = jsonObject.getString("ticketnum");
         List<String> labors = (List<String>) jsonObject.get("labors");
 
+        TokenUser token = shiroService.findToken(header);
+
         // 流程正在进行
         if (status == 2){
-            boolean result = wftransService.insertTrans(currNodeId, preNodeId,
-                    actionId, instId,version , ownerId, wfName, ticketNum, role, labors);
+            boolean result = wftransService.insertTrans(currNodeId, preNodeId, actionId, instId,version ,
+                    ownerId, wfName, ticketNum, role, labors, token.getLaborNum());
             if(!result)
                 AjaxResult.error(4004, "流程发送失败");
         }

+ 6 - 3
src/main/java/com/gyee/frame/controller/ticket/WorkticketController.java

@@ -30,7 +30,6 @@ public class WorkticketController {
 
     @Autowired
     WorkticketService workticketService;
-
     @Autowired
     WoworktaskService woworktaskService;
     @Autowired
@@ -39,6 +38,8 @@ public class WorkticketController {
     WosafetybaffleService wosafetybaffleService;
     @Autowired
     FjykService fjykService;
+    @Autowired
+    ShiroService shiroService;
 
     /**
      * 分页查询工作票
@@ -49,12 +50,14 @@ public class WorkticketController {
      */
     @DataSource(value = DataSourceType.TICKET)
     @GetMapping(value = "list")
-    public AjaxResult getList(@RequestParam("page") Optional<Long> page,
+    public AjaxResult getList(@RequestHeader(value = "token") String header,
+                              @RequestParam("page") Optional<Long> page,
                               @RequestParam("type") Optional<String> type) {
+        TokenUser token = shiroService.findToken(header);
         Long pageNum = page.orElse(1L);
         String ticketType = type.orElse("wind");
 
-        IPage<Workticket> ticket = workticketService.selectPage(pageNum, ticketType);
+        IPage<Workticket> ticket = workticketService.selectPage(pageNum, ticketType, token.getDepartment());
         if (ticket == null)
             return AjaxResult.error(4004, "数据读取异常");
 

+ 27 - 2
src/main/java/com/gyee/frame/mapper/ticket/LaborMapper.java

@@ -18,12 +18,37 @@ public interface LaborMapper extends BaseMapper<Labor> {
 
     /**
      * 根据流程节点角色查询人员
+     *
+     * WFROLE -- 人员组
+     *
+     * @param groupName
+     * @return
+     */
+    @Select("SELECT t3.* FROM WFROLE t1 LEFT JOIN LABORGRPS t2 ON t1.VALUE = t2.GROUPNAME LEFT JOIN LABOR t3 ON t2.LABORNUM = t3.LABORNUM WHERE t1.ROLETYPE = '人员组' and t1.WFROLE = #{groupName}")
+    List<Labor> getLaborOfPersonGroup(String groupName);
+
+    /**
+     * 根据流程节点角色查询人员
+     *
+     * 过滤部门
+     *
      * @param dept
      * @param groupName
      * @return
      */
-    @Select("select t1.* from LABOR t1 LEFT JOIN  LABORGRPS t2 ON t1.LABORNUM=t2.LABORNUM WHERE t2.GROUPNAME = #{groupName}")
-    List<Labor>getLaborGroup(String dept, String groupName);
+    @Select("SELECT t3.* FROM  LABORGROUP t1 LEFT JOIN LABORGRPS t2 ON t1.GROUPNAME = t2.GROUPNAME LEFT JOIN LABOR t3 ON t2.LABORNUM = t3.LABORNUM WHERE t3.DEPTNUM = #{dept} AND t1.DESCRIPTION = #{groupName}")
+    List<Labor> getLaborOfDept(String dept, String groupName);
+
+    /**
+     * 根据流程节点角色查询人员
+     *
+     * WFROLE -- 人员
+     *
+     * @param role
+     * @return
+     */
+    @Select("SELECT t1.* FROM LABOR t1 LEFT JOIN WFROLE t2 ON t1.LABORNUM = t2.VALUE WHERE t2.ROLETYPE = '人员' and t2.WFROLE = #{role}")
+    List<Labor> getLaborOfPerson(String role);
 
     /**
      * 查询之前节点出现过的人员

+ 16 - 0
src/main/java/com/gyee/frame/mapper/ticket/LaborgroupMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.ticket;
+
+import com.gyee.frame.model.ticket.Laborgroup;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author chenmh
+ * @since 2020-08-06
+ */
+public interface LaborgroupMapper extends BaseMapper<Laborgroup> {
+
+}

+ 41 - 0
src/main/java/com/gyee/frame/model/ticket/Laborgroup.java

@@ -0,0 +1,41 @@
+package com.gyee.frame.model.ticket;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author chenmh
+ * @since 2020-08-06
+ */
+@Data
+  @EqualsAndHashCode(callSuper = false)
+    @TableName("LABORGROUP")
+public class Laborgroup extends Model<Laborgroup> {
+
+    private static final long serialVersionUID=1L;
+
+      @TableId("ID")
+      private Double id;
+
+    @TableField("GROUPNAME")
+    private String groupname;
+
+    @TableField("DESCRIPTION")
+    private String description;
+
+
+    @Override
+    protected Serializable pkVal() {
+          return this.id;
+      }
+
+}

+ 20 - 2
src/main/java/com/gyee/frame/service/impl/ticket/LaborServiceImpl.java

@@ -28,12 +28,30 @@ public class LaborServiceImpl extends ServiceImpl<LaborMapper, Labor> implements
     }
 
     @Override
-    public List<Labor> getLaborGroups(String dept, String groupName) {
-        List<Labor> labors = baseMapper.getLaborGroup(dept, groupName);
+    public List<Labor> getLaborOfPersonGroup(String groupName) {
+        List<Labor> labors = baseMapper.getLaborOfPersonGroup(groupName);
         return labors;
     }
 
     @Override
+    public List<Labor> getLaborOfDept(String dept, String groupName) {
+        List<Labor> labors = baseMapper.getLaborOfDept(dept, groupName);
+        return labors;
+    }
+
+    @Override
+    public List<Labor>  getLaborOfPerson(String role) {
+        List<Labor> labors = baseMapper.getLaborOfPerson(role);
+        return labors;
+    }
+
+    @Override
+    public List<Labor> getLabors(String dept) {
+        return null;
+    }
+
+
+    @Override
     public List<Labor> getLaborSingle(double instId, String role) {
         List<Labor> labor = baseMapper.getLaborSingle(instId, role);
 

+ 20 - 0
src/main/java/com/gyee/frame/service/impl/ticket/LaborgroupServiceImpl.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.service.impl.ticket;
+
+import com.gyee.frame.model.ticket.Laborgroup;
+import com.gyee.frame.mapper.ticket.LaborgroupMapper;
+import com.gyee.frame.service.ticket.LaborgroupService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author chenmh
+ * @since 2020-08-06
+ */
+@Service
+public class LaborgroupServiceImpl extends ServiceImpl<LaborgroupMapper, Laborgroup> implements LaborgroupService {
+
+}

+ 32 - 13
src/main/java/com/gyee/frame/service/impl/ticket/WfassignmentServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gyee.frame.common.exception.TicketException;
 import com.gyee.frame.model.ticket.Wfassignment;
 import com.gyee.frame.mapper.ticket.WfassignmentMapper;
 import com.gyee.frame.model.ticket.Wftaskassign;
@@ -14,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -37,8 +39,9 @@ public class WfassignmentServiceImpl extends ServiceImpl<WfassignmentMapper, Wfa
     }
 
     @Override
-    public IPage<Wfassignment> selectPage(long pageNum) {
+    public IPage<Wfassignment> selectPage(String labor, long pageNum) {
         QueryWrapper<Wfassignment> wrapper = new QueryWrapper();
+        wrapper.eq("ASSIGNCODE", labor);
         wrapper.eq("ASSIGNSTATUS", "活动");
         wrapper.eq("APP", "WINDELEC");
         wrapper.orderByDesc("ID");
@@ -62,9 +65,7 @@ public class WfassignmentServiceImpl extends ServiceImpl<WfassignmentMapper, Wfa
     }
 
     @Override
-    public Wfassignment updateAssignment(double instId, double version, double ownerId, String wfName) {
-        //TODO
-        //根据登录角色删除其它多余项
+    public Wfassignment updateAssignment(double instId, double version, double ownerId, String wfName, String processor) {
         QueryWrapper<Wfassignment> wrapper = new QueryWrapper<>();
         wrapper.eq("WFREVISION", version);
         wrapper.eq("WFINSTID", instId);
@@ -72,15 +73,35 @@ public class WfassignmentServiceImpl extends ServiceImpl<WfassignmentMapper, Wfa
         wrapper.eq("OWNERID", ownerId);
         wrapper.eq("ASSIGNSTATUS", "活动");
 
-        Wfassignment assignment = baseMapper.selectOne(wrapper);
-        assignment.setAssignstatus("完成");
-        assignment.setEnddate(new Date());
+        Wfassignment wfassignment = null;
+        List<Wfassignment> list = baseMapper.selectList(wrapper);
+        //根据登录角色删除其它多余项
+        if (list != null && list.size() > 1){
+            List<Double> ids = new ArrayList();
+            for (Wfassignment assignment : list){
+                if (!assignment.getAssigncode().equals(processor))
+                    ids.add(assignment.getId());
+                else
+                    wfassignment = assignment;
+            }
+            // 删除之前判断是否待办人
+            if (wfassignment == null)
+                throw new TicketException("你没有流程任务分配,不能发送工作流程");
+
+            baseMapper.deleteBatchIds(ids);
+        }else {
+            wfassignment = list.get(0);
+            if (!wfassignment.getAssigncode().equals(processor))
+                throw new TicketException("你没有流程任务分配,不能发送工作流程");
+        }
+        wfassignment.setAssignstatus("完成");
+        wfassignment.setEnddate(new Date());
 
-        int update = baseMapper.updateById(assignment);
+        int update = baseMapper.updateById(wfassignment);
         if (update == 0)
             throw new RuntimeException();
 
-        return assignment;
+        return wfassignment;
     }
 
     @Transactional
@@ -126,7 +147,7 @@ public class WfassignmentServiceImpl extends ServiceImpl<WfassignmentMapper, Wfa
     }
 
     @Override
-    public Wfassignment getLastItem(double instId, double version, double ownerId, String status) {
+    public List<Wfassignment> getActiveItem(double instId, double version, double ownerId, String status) {
         QueryWrapper<Wfassignment> wrapper = new QueryWrapper<>();
         if (status != null)
             wrapper.eq("ASSIGNSTATUS", status);
@@ -137,8 +158,6 @@ public class WfassignmentServiceImpl extends ServiceImpl<WfassignmentMapper, Wfa
 
         List<Wfassignment> wfassignments = baseMapper.selectList(wrapper);
 
-        return wfassignments.get(0);
+        return wfassignments;
     }
-
-
 }

+ 45 - 33
src/main/java/com/gyee/frame/service/impl/ticket/WfinstanceServiceImpl.java

@@ -1,6 +1,7 @@
 package com.gyee.frame.service.impl.ticket;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.frame.common.exception.TicketException;
 import com.gyee.frame.model.ticket.*;
 import com.gyee.frame.mapper.ticket.WfinstanceMapper;
 import com.gyee.frame.service.ticket.*;
@@ -121,14 +122,19 @@ public class WfinstanceServiceImpl extends ServiceImpl<WfinstanceMapper, Wfinsta
          */
         if (wfinstance.getActive().equals("是")) {
             // 添加最后一条待办信息
-            Wfassignment lastItem = wfassignmentService.getLastItem(wfinstance.getId(), wfinstance.getWfrevision(), wfinstance.getOwnerid(), "活动");
-            FlowStep obj = new FlowStep("节点:" + nodeMap.get(lastItem.getNodeid()),
-                    "人员:" + laborMap.get(lastItem.getAssigncode()),
+            List<Wfassignment> items = wfassignmentService.getActiveItem(wfinstance.getId(), wfinstance.getWfrevision(), wfinstance.getOwnerid(), "活动");
+            String labor = "";
+            for (int i = 0; i < items.size(); i++){
+                String code = laborMap.get(items.get(i).getAssigncode());
+                labor = labor + " " + code;
+            }
+            FlowStep obj = new FlowStep("节点:" + nodeMap.get(items.get(0).getNodeid()),
+                    "人员:" + labor,
                     "日期:");
             list.add(obj);
             map.put("flow", list);
             map.put("status", 2);
-            map.put("nodeid", lastItem.getNodeid());
+            map.put("nodeid", items.get(0).getNodeid());
             map.put("version", wfinstance.getWfrevision());
             map.put("instid", wfinstance.getId());
         }
@@ -147,7 +153,11 @@ public class WfinstanceServiceImpl extends ServiceImpl<WfinstanceMapper, Wfinsta
 
     @Transactional
     @Override
-    public boolean initInstance(double ownerId, String wfName, String ticketNum, String principal, String stater, String labor, String role) {
+    public boolean initInstance(double ownerId, String wfName, String ticketNum, String principal, String stater, List<String> labor, String role, String online) {
+        // 如果在线人员不是工作负责人,则不可启动流程
+        if (!online.equals(principal))
+            throw new TicketException("只有工作票负责人可以启动流程");
+
         QueryWrapper<Wfinstance> wrapper = new QueryWrapper<>();
         wrapper.eq("OWNERID", ownerId);
         List<Wfinstance> wfinstances = baseMapper.selectList(wrapper);
@@ -183,34 +193,36 @@ public class WfinstanceServiceImpl extends ServiceImpl<WfinstanceMapper, Wfinsta
             throw new RuntimeException();
 
         Wftaskassign task= wftaskassignService.taskAssign(action.getEndnodeid(), process.getWfrevision(), wfName);
-        Wfassignment assignment = new Wfassignment();
-        assignment.setDescription(task.getDescription().replace(":{TICKETNUM}", ticketNum));
-        assignment.setId((double)wfassignmentService.selectMaxId() + 1);
-        assignment.setAssigncode(labor);
-        assignment.setApp(TicketUtil.wfNameFormat(wfName));
-        assignment.setStartdate(new Date());
-        assignment.setEmailnotify("否");
-        assignment.setAssignstatus("活动");
-        assignment.setWfinstid((double)id + 1);
-        assignment.setWfname(wfName);
-        assignment.setWfrevision(process.getWfrevision());
-        assignment.setInitperson("");
-        assignment.setOwnertable(process.getTablename());
-        assignment.setOwnerid(ownerId);
-        assignment.setInitperson(stater);
-        assignment.setWfrole(role);
-        assignment.setDealtimeout(0.0);
-        assignment.setDealtype("0");
-        assignment.setDealtype("自动发送");
-        assignment.setPriority(0.0);
-        assignment.setEnddate(null);
-        assignment.setNodeid(action.getEndnodeid());
-        assignment.setTaskid(task.getId());
-        assignment.setNeedpass("否");
-
-        boolean save = wfassignmentService.save(assignment);
-        if(!save)
-            throw new RuntimeException();
+        for (int i = 0; i < labor.size(); i++){
+            Wfassignment assignment = new Wfassignment();
+            assignment.setDescription(task.getDescription().replace(":{TICKETNUM}", ticketNum));
+            assignment.setId((double)wfassignmentService.selectMaxId() + 1);
+            assignment.setAssigncode(labor.get(i));
+            assignment.setApp(TicketUtil.wfNameFormat(wfName));
+            assignment.setStartdate(new Date());
+            assignment.setEmailnotify("否");
+            assignment.setAssignstatus("活动");
+            assignment.setWfinstid((double)id + 1);
+            assignment.setWfname(wfName);
+            assignment.setWfrevision(process.getWfrevision());
+            assignment.setInitperson("");
+            assignment.setOwnertable(process.getTablename());
+            assignment.setOwnerid(ownerId);
+            assignment.setInitperson(stater);
+            assignment.setWfrole(role);
+            assignment.setDealtimeout(0.0);
+            assignment.setDealtype("0");
+            assignment.setDealtype("自动发送");
+            assignment.setPriority(0.0);
+            assignment.setEnddate(null);
+            assignment.setNodeid(action.getEndnodeid());
+            assignment.setTaskid(task.getId());
+            assignment.setNeedpass("否");
+
+            boolean save = wfassignmentService.save(assignment);
+            if(!save)
+                throw new RuntimeException();
+        }
 
         Wftrans trans = new Wftrans();
         trans.setId((double)wftransService.selectMaxId() + 1);

+ 12 - 0
src/main/java/com/gyee/frame/service/impl/ticket/WfroleServiceImpl.java

@@ -1,5 +1,6 @@
 package com.gyee.frame.service.impl.ticket;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.gyee.frame.model.ticket.Labor;
 import com.gyee.frame.model.ticket.Wfrole;
 import com.gyee.frame.mapper.ticket.WfroleMapper;
@@ -19,4 +20,15 @@ import java.util.List;
  */
 @Service
 public class WfroleServiceImpl extends ServiceImpl<WfroleMapper, Wfrole> implements WfroleService {
+
+
+    @Override
+    public Wfrole getRole(String role) {
+        QueryWrapper<Wfrole> wrapper = new QueryWrapper<>();
+        wrapper.eq("WFROLE", role);
+
+        Wfrole wfrole = baseMapper.selectOne(wrapper);
+
+        return wfrole;
+    }
 }

+ 5 - 5
src/main/java/com/gyee/frame/service/impl/ticket/WftransServiceImpl.java

@@ -55,8 +55,8 @@ public class WftransServiceImpl extends ServiceImpl<WftransMapper, Wftrans> impl
 
     @Transactional
     @Override
-    public boolean insertTrans(double currNodeId, double preNodeId, double actionId, double instId,
-                               double version, double ownerId, String wfName, String ticketNum, String role, List<String> labors) {
+    public boolean insertTrans(double currNodeId, double preNodeId, double actionId, double instId, double version, double ownerId,
+                               String wfName, String ticketNum, String role, List<String> labors, String processor) {
         Wfinstance instance = wfinstanceService.instance(ownerId);
         if (instance == null || instance.getActive().equals("否"))
             return false;
@@ -70,19 +70,19 @@ public class WftransServiceImpl extends ServiceImpl<WftransMapper, Wftrans> impl
         if (node.getNodetype().equals("结束")){
             wfinstanceService.updateInstance(instId, currNodeId, "否");
             // 更新之前的待办任务
-            Wfassignment assignment = wfassignmentService.updateAssignment(instId, version, ownerId, wfName);
+            Wfassignment assignment = wfassignmentService.updateAssignment(instId, version, ownerId, wfName, processor);
             // 插入事务
             saveTrans((double)maxId + 1, preNodeId, instId, assignment.getId(), actionId, "任务", "任务",
                     wfName, version, instance.getOwnertable(), ownerId, assignment.getAssigncode());
             // 插入结束事务
-            saveTrans((double)maxId + 2, preNodeId, instId, 0, actionId, "结束", "结束",
+            saveTrans((double)maxId + 2, currNodeId, instId, 0, actionId, "结束", "结束",
                     wfName, version, instance.getOwnertable(), ownerId, assignment.getAssigncode());
             // 更新票据状态
             workticketService.updateTicket(ownerId, preNodeId, currNodeId);
         }else {
             wfinstanceService.updateInstance(instId, currNodeId, null);
             // 更新之前的待办任务
-            Wfassignment assignment = wfassignmentService.updateAssignment(instId, version, ownerId, wfName);
+            Wfassignment assignment = wfassignmentService.updateAssignment(instId, version, ownerId, wfName, processor);
             // 插入新的待办任务
             wfassignmentService.insertAssignment(currNodeId, instId, version, ownerId, wfName, ticketNum,
                     instance.getStartor(), instance.getOwnertable(), role, labors);

+ 7 - 1
src/main/java/com/gyee/frame/service/impl/ticket/WorkticketServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.gyee.frame.model.ticket.Wfaction;
 import com.gyee.frame.service.ticket.WfactionService;
+import com.gyee.frame.util.StringUtils;
 import com.gyee.frame.util.ticket.TicketUtil;
 import com.gyee.frame.model.ticket.Workticket;
 import com.gyee.frame.mapper.ticket.WorkticketMapper;
@@ -30,12 +31,17 @@ public class WorkticketServiceImpl extends ServiceImpl<WorkticketMapper, Worktic
     WfactionService wfactionService;
 
     @Override
-    public IPage<Workticket> selectPage(long pageNum, String type) {
+    public IPage<Workticket> selectPage(long pageNum, String type, String dept) {
         String ticketType = TicketUtil.ticketType(type);
         QueryWrapper<Workticket> wrapper = new QueryWrapper();
 
         wrapper.eq("WTICKETTYPE", ticketType);
         wrapper.orderByDesc("ID");
+        if (TicketUtil.allDept().contains(dept)){
+            wrapper.eq("WORKDEPT", dept);
+        }else{
+            wrapper.in("WORKDEPT", TicketUtil.allDept());
+        }
 
         Page<Workticket> page = new Page<>(pageNum, 15);
         IPage<Workticket> iPage = baseMapper.selectPage(page, wrapper);

+ 37 - 1
src/main/java/com/gyee/frame/service/ticket/LaborService.java

@@ -23,11 +23,47 @@ public interface LaborService extends IService<Labor> {
 
     /**
      * 根据流程节点角色查询人员
+     *
+     * 人员组
+     *
+     * @param groupName
+     * @return
+     */
+    List<Labor> getLaborOfPersonGroup(String groupName);
+
+
+    /**
+     * 根据流程节点角色查询人员
+     *
+     * 部门过滤
+     *
      * @param dept
+     * @param groupName
+     * @return
+     */
+    List<Labor> getLaborOfDept(String dept, String groupName);
+
+    /**
+     * 根据流程节点角色查询人员
+     *
+     * 人员
+     *
      * @param role
      * @return
      */
-    List<Labor> getLaborGroups(String dept, String role);
+    List<Labor> getLaborOfPerson(String role);
+
+
+    /**
+     * 根据流程节点角色查询人员
+     *
+     * 场站
+     *
+     * @param dept
+     * @return
+     */
+    List<Labor> getLabors(String dept);
+
 
     /**
      * 查询之前节点出现过的人员

+ 16 - 0
src/main/java/com/gyee/frame/service/ticket/LaborgroupService.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.service.ticket;
+
+import com.gyee.frame.model.ticket.Laborgroup;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author chenmh
+ * @since 2020-08-06
+ */
+public interface LaborgroupService extends IService<Laborgroup> {
+
+}

+ 6 - 4
src/main/java/com/gyee/frame/service/ticket/WfassignmentService.java

@@ -26,10 +26,11 @@ public interface WfassignmentService extends IService<Wfassignment> {
     /**
      * 分页
      *
+     * @param labor
      * @param pageNum
      * @return
      */
-    IPage<Wfassignment> selectPage(long pageNum);
+    IPage<Wfassignment> selectPage(String labor, long pageNum);
 
 
     /**
@@ -51,9 +52,10 @@ public interface WfassignmentService extends IService<Wfassignment> {
      * @param version
      * @param ownerId
      * @param wfName
+     * @param processor  当前处理任务的人
      * @return
      */
-    Wfassignment updateAssignment(double instId, double version, double ownerId, String wfName);
+    Wfassignment updateAssignment(double instId, double version, double ownerId, String wfName, String processor);
 
     /**
      * 写入待办 返回 ID
@@ -71,12 +73,12 @@ public interface WfassignmentService extends IService<Wfassignment> {
                                   String ticketNum, String starter, String tableName, String role, List<String> labors);
 
     /**
-     * 查询最后一条活动记录
+     * 查询所有活动记录
      *
      * @param instId
      * @param version
      * @param ownerId
      * @return
      */
-    Wfassignment getLastItem(double instId, double version, double ownerId, String status);
+    List<Wfassignment> getActiveItem(double instId, double version, double ownerId, String status);
 }

+ 2 - 2
src/main/java/com/gyee/frame/service/ticket/WfinstanceService.java

@@ -1,6 +1,5 @@
 package com.gyee.frame.service.ticket;
 
-import com.gyee.frame.model.ticket.FlowStep;
 import com.gyee.frame.model.ticket.Wfinstance;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -46,9 +45,10 @@ public interface WfinstanceService extends IService<Wfinstance> {
      * @param stater
      * @param labors
      * @param role
+     * @param online  在线人员
      * @return
      */
-    boolean initInstance(double ownerId, String wfName, String ticketNum, String principal, String stater, String labors, String role);
+    boolean initInstance(double ownerId, String wfName, String ticketNum, String principal, String stater, List<String> labors, String role, String online);
 
     /**
      * 更新 cuenodeid 字段及状态

+ 8 - 0
src/main/java/com/gyee/frame/service/ticket/WfroleService.java

@@ -13,4 +13,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2020-07-21
  */
 public interface WfroleService extends IService<Wfrole> {
+
+    /**
+     * 根据角色查询角角色类型
+     *
+     * @param role
+     * @return
+     */
+    Wfrole getRole(String role);
 }

+ 4 - 2
src/main/java/com/gyee/frame/service/ticket/WftransService.java

@@ -39,10 +39,12 @@ public interface WftransService extends IService<Wftrans> {
      * @param version
      * @param ownerId
      * @param wfName
+     * @param ticketNum
      * @param role
      * @param labors
+     * @param processor
      * @return
      */
-    boolean insertTrans(double currNodeId, double preNodeId, double actionId, double instId,
-                        double version, double ownerId, String wfName, String ticketNum, String role, List<String> labors);
+    boolean insertTrans(double currNodeId, double preNodeId, double actionId, double instId, double version, double ownerId,
+                        String wfName, String ticketNum, String role, List<String> labors, String processor);
 }

+ 4 - 2
src/main/java/com/gyee/frame/service/ticket/WorkticketService.java

@@ -16,12 +16,14 @@ import com.baomidou.mybatisplus.extension.service.IService;
 public interface WorkticketService extends IService<Workticket> {
 
     /**
-     * 分页
+     * 分页查询工作票
+     *
      * @param pageNum
      * @param type
+     * @param dept
      * @return
      */
-    IPage<Workticket> selectPage(long pageNum, String type);
+    IPage<Workticket> selectPage(long pageNum, String type, String dept);
 
 
     /**

+ 24 - 3
src/main/java/com/gyee/frame/util/ticket/TicketUtil.java

@@ -11,6 +11,27 @@ import java.util.Map;
 public class TicketUtil {
 
     /**
+     * 返回所有场站集合
+     *
+     * @return
+     */
+    public static List<String> allDept(){
+        List<String> list = new ArrayList<>();
+
+        list.add("石板泉风电场");
+        list.add("麻黄山风电场");
+        list.add("牛首山风电场");
+        list.add("香山风电场");
+        list.add("青山风电场");
+        list.add("平罗光伏电站");
+        list.add("宣和光伏发电站");
+        list.add("大武口电站");
+
+        return list;
+    }
+
+
+    /**
      * 工作票类型
      *
      * @param type
@@ -88,16 +109,16 @@ public class TicketUtil {
         String groupName = null;
         switch (role) {
             case "工作票签发人":
-                groupName = "SHIFTENGINEER";
+                groupName = "WTSIGNATOR";
                 break;
             case "值班负责人":
-                groupName = "WTSIGNATORY";
+                groupName = "SHIFTENGINEER";
                 break;
             case "工作票许可人":
                 groupName = "XUKEREN";
                 break;
             case "经济运行人员":
-                groupName = "经济运行人员";
+                groupName = "ECONOMY";
                 break;
             case "缺陷运行人员":
                 groupName = "RUNUSER";

+ 17 - 0
src/main/resources/mybatis/ticket/LaborgroupMapper.xml

@@ -0,0 +1,17 @@
+<?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.gyee.frame.mapper.ticket.LaborgroupMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.gyee.frame.model.ticket.Laborgroup">
+        <id column="ID" property="id" />
+        <result column="GROUPNAME" property="groupname" />
+        <result column="DESCRIPTION" property="description" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        ID, GROUPNAME, DESCRIPTION
+    </sql>
+
+</mapper>