ソースを参照

修改江西中医药流程找人流程

wangliang 3 年 前
コミット
3f1119b022

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/DirectorApproveByJxzyyListener.java

@@ -12,6 +12,7 @@ import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.FlowApproveNameEnum;
 import com.qmth.teachcloud.common.enums.FlowApproveSetupEnum;
 import com.qmth.teachcloud.common.enums.FlowStatusEnum;
 import com.qmth.teachcloud.common.service.SysUserService;
@@ -56,7 +57,7 @@ public class DirectorApproveByJxzyyListener implements TaskListener {
             }.getType());
             delegateTask.addCandidateUsers(approveUserIds.stream().map(x -> String.valueOf(x)).collect(Collectors.toList()));
         } else {
-            sysUserList = sysUserService.findByJxzyyDirectorApprove(null);
+            sysUserList = sysUserService.findByJxzyyDirectorApprove(null, FlowApproveNameEnum.DIRECTOR);
             if (Objects.nonNull(sysUserList) && sysUserList.size() > 0) {
                 List<String> ids = sysUserList.stream().map(s -> String.valueOf(s.getId())).collect(Collectors.toList());
                 //添加或签的人员,一人通过即可进入下一环节

+ 9 - 10
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -12,7 +12,6 @@ import com.qmth.distributed.print.business.bean.result.FlowTaskResult;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
 import com.qmth.distributed.print.business.enums.FlowModelEnum;
-import com.qmth.distributed.print.business.enums.FlowSchoolCodeEnum;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -296,7 +295,7 @@ public class ActivitiServiceImpl implements ActivitiService {
         }
         try {
             Task task = taskService.createTaskQuery().taskId(flowTaskId).singleResult();
-            Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空"));
+            Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空或该流程已被他人审核,请刷新再试!"));
             String processInstanceId = task.getProcessInstanceId();
             ExamTask examTask = examTaskService.findByFlowId(Long.parseLong(processInstanceId));
 
@@ -477,7 +476,7 @@ public class ActivitiServiceImpl implements ActivitiService {
         List<FlowTaskApprovePeopleResult> flowTaskApprovePeopleResultList = null;
         if (Objects.nonNull(taskId) && !Objects.equals(taskId, "")) {//说明从已审核的节点开始捞人
             Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
-            Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空"));
+            Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空或该流程已被他人审核,请刷新再试!"));
             flowTaskApprovePeopleAllResult = new FlowTaskApprovePeopleAllResult(Long.parseLong(task.getProcessInstanceId()));
             flowTaskApprovePeopleResultList = new LinkedList();
             //获取当前流程节点
@@ -616,7 +615,7 @@ public class ActivitiServiceImpl implements ActivitiService {
     @Transactional
     public boolean taskApproverExchange(String userId, String taskId) {
         Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
-        Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空"));
+        Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空或该流程已被他人审核,请刷新再试!"));
         Long flowId = Long.parseLong(task.getProcessInstanceId());
         TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(flowId);
         Optional.ofNullable(tfFlowApprove).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未找到流程状态记录"));
@@ -690,7 +689,7 @@ public class ActivitiServiceImpl implements ActivitiService {
     public FlowTaskApprovePeopleAllResult taskApproverExchangePeople(String taskId, String realName) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
-        Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空"));
+        Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空或该流程已被他人审核,请刷新再试!"));
         FlowTaskApprovePeopleAllResult flowTaskApprovePeopleAllResult = new FlowTaskApprovePeopleAllResult(Long.parseLong(task.getProcessInstanceId()));
         //获取当前流程节点
         TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(flowTaskApprovePeopleAllResult.getFlowId());
@@ -735,7 +734,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                 //江西中医药大学
                 else if (Objects.nonNull(processDefinitionEntity) && processDefinitionEntity.getKey().contains(SystemConstant.JXZYY_FLOW_KEY)) {
                     //获取教研室主任审批人
-                    sysUserDirectorList = sysUserService.findByJxzyyDirectorApprove(realName);
+                    sysUserDirectorList = sysUserService.findByJxzyyDirectorApprove(realName, FlowApproveNameEnum.DIRECTOR);
                 }
                 flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(sysUserDirectorList));
                 break;
@@ -774,7 +773,7 @@ public class ActivitiServiceImpl implements ActivitiService {
         List<FlowTaskApprovePeopleResult> flowTaskApprovePeopleResultList = null;
         if (Objects.nonNull(taskId) && !Objects.equals(taskId, "")) {//说明从已审核的节点开始捞人
             Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
-            Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空"));
+            Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空或该流程已被他人审核,请刷新再试!"));
 
             flowTaskApprovePeopleAllResult = new FlowTaskApprovePeopleAllResult(Long.parseLong(task.getProcessInstanceId()));
             //获取当前流程节点
@@ -802,7 +801,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                     //江西中医药大学
                     else if (Objects.nonNull(processDefinitionEntity) && processDefinitionEntity.getKey().contains(SystemConstant.JXZYY_FLOW_KEY)) {
                         //获取教研室主任审批人
-                        approveUserResultList = sysUserService.findByJxzyyDirectorApprove(null);
+                        approveUserResultList = sysUserService.findByJxzyyDirectorApprove(null, FlowApproveNameEnum.DIRECTOR);
                         flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowApproveSetupEnum.PRIMARY_APPROVE.getSetup(), false, approveUserResultList));
                     }
                     break;
@@ -823,7 +822,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                 }
                 approveUserResultList = sysUserService.findByRootApprove(courseCode, null, null, FlowApproveNameEnum.DIRECTOR);
             } else if (Objects.equals(basicSchool.getCode(), FlowSchoolCodeEnum.JXZYYDX.getCode())) {//江西中医药大学
-                approveUserResultList = sysUserService.findByJxzyyDirectorApprove(null);
+                approveUserResultList = sysUserService.findByJxzyyDirectorApprove(null, FlowApproveNameEnum.DIRECTOR);
             }
             flowTaskApprovePeopleResultList = new LinkedList<>();
             flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowApproveSetupEnum.PRIMARY_APPROVE.getSetup(), false, approveUserResultList));
@@ -891,7 +890,7 @@ public class ActivitiServiceImpl implements ActivitiService {
         //江西中医药大学
         else if (Objects.nonNull(processDefinitionEntity) && processDefinitionEntity.contains(SystemConstant.JXZYY_FLOW_KEY)) {
             //获取教研室主任审批人
-            List<ApproveUserResult> sysUserDirectorList = sysUserService.findByJxzyyDirectorApprove(null);
+            List<ApproveUserResult> sysUserDirectorList = sysUserService.findByJxzyyDirectorApprove(null, FlowApproveNameEnum.DIRECTOR);
             flowTaskApprovePeopleResultList.add(new FlowTaskApprovePeopleResult(FlowApproveSetupEnum.PRIMARY_APPROVE.getSetup(), false, sysUserDirectorList));
         }
         return flowTaskApprovePeopleResultList;

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowApproveNameEnum.java

@@ -11,6 +11,8 @@ import java.util.Objects;
  */
 public enum FlowApproveNameEnum {
 
+    TEACHER("命题老师", "Teacher"),
+
     DIRECTOR("主任审批", "Director"),
 
     PRESIDENT("院长审核", "President");

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/FlowSchoolCodeEnum.java → teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowSchoolCodeEnum.java

@@ -1,4 +1,4 @@
-package com.qmth.distributed.print.business.enums;
+package com.qmth.teachcloud.common.enums;
 
 import java.util.Objects;
 

+ 9 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysOrgMapper.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.qmth.teachcloud.common.bean.dto.OrgDto;
 import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.enums.OrgTypeEnum;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -39,6 +38,15 @@ public interface SysOrgMapper extends BaseMapper<SysOrg> {
      */
     List<SysOrg> findByConnectByParentId(@Param("orgId") Long orgId, @Param("school") Boolean school, @Param("college") Boolean college);
 
+    /**
+     * 递归树查询(同级及以上)
+     *
+     * @param orgId
+     * @param orgType
+     * @return
+     */
+    List<SysOrg> findByJxzyyConnectByParentId(@Param("orgId") Long orgId, @Param("orgType") String orgType);
+
     /**
      * 递归树查询(同级及以下)
      *

+ 9 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java

@@ -7,7 +7,6 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.OrgTypeEnum;
 
 import java.util.List;
-import java.util.Set;
 
 /**
  * <p>
@@ -79,6 +78,15 @@ public interface SysOrgService extends IService<SysOrg> {
      */
     List<SysOrg> findByConnectByParentId(Long orgId, Boolean school, Boolean college);
 
+    /**
+     * 递归树查询(同级及以上)
+     *
+     * @param orgId
+     * @param orgType
+     * @return
+     */
+    List<SysOrg> findByJxzyyConnectByParentId(Long orgId, OrgTypeEnum orgType);
+
     /**
      * 递归树查询(同级及以下)
      *

+ 12 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java

@@ -136,9 +136,10 @@ public interface SysUserService extends IService<SysUser> {
      * 获取教研室主任审批人
      *
      * @param realName
+     * @param flowApproveNameEnum
      * @return
      */
-    public List<ApproveUserResult> findByJxzyyDirectorApprove(String realName);
+    public List<ApproveUserResult> findByJxzyyDirectorApprove(String realName, FlowApproveNameEnum flowApproveNameEnum);
 
     /**
      * 获取院长审批人
@@ -149,6 +150,16 @@ public interface SysUserService extends IService<SysUser> {
      */
     public List<ApproveUserResult> findByPresidentApprove(List<Long> orgIds, String realName);
 
+    /**
+     * 获取主任或院长审批人
+     *
+     * @param orgIds
+     * @param realName
+     * @param flowApproveNameEnum
+     * @return
+     */
+    public List<ApproveUserResult> findByJxzyyTopDirectorOrPresidentApprove(List<Long> orgIds, String realName, FlowApproveNameEnum flowApproveNameEnum);
+
     /**
      * 获取同级别下一级审批人
      *

+ 12 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -289,6 +289,18 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         return sysOrgMapper.findByConnectByParentId(orgId, school, college);
     }
 
+    /**
+     * 递归树查询(同级及以下)
+     *
+     * @param orgId
+     * @param orgType
+     * @return
+     */
+    @Override
+    public List<SysOrg> findByJxzyyConnectByParentId(Long orgId, OrgTypeEnum orgType) {
+        return sysOrgMapper.findByJxzyyConnectByParentId(orgId, Objects.nonNull(orgType) ? orgType.name() : null);
+    }
+
     /**
      * 递归树查询(同级及以下)
      *

+ 97 - 5
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -108,7 +108,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Resource
     StmmsUtils stmmsUtils;
 
-
     @Override
     public IPage<UserDto> list(String loginName, String roleId, Boolean enable, String realName, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
@@ -376,6 +375,31 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             throw ExceptionResultEnum.ERROR.exception("找不到此课程信息");
         }
 
+        BasicSchool basicSchool = (BasicSchool) ServletUtil.getRequestSchool();
+        if (Objects.equals(basicSchool.getCode(), FlowSchoolCodeEnum.JXZYYDX.getCode())) {
+            List<ApproveUserResult> approveUserResultList = sysUserService.findByJxzyyDirectorApprove(null, FlowApproveNameEnum.TEACHER);
+            if (Objects.nonNull(approveUserResultList) && approveUserResultList.size() > 0) {//说明是实施人员提交
+                List<BlurryUserDto> blurryUserDtoList = new ArrayList<>();
+                for (ApproveUserResult sysUser : approveUserResultList) {
+                    blurryUserDtoList.add(new BlurryUserDto(sysUser.getId(), sysUser.getLoginName(), sysUser.getRealName()));
+                }
+                return blurryUserDtoList;
+            } else {
+                return listUserCommon(basicCourse, schoolId);
+            }
+        } else {
+            return listUserCommon(basicCourse, schoolId);
+        }
+    }
+
+    /**
+     * 查找命题老师公用
+     *
+     * @param basicCourse
+     * @param schoolId
+     * @return
+     */
+    private List<BlurryUserDto> listUserCommon(BasicCourse basicCourse, Long schoolId) {
         int count = this.countByTeachingRoomId(basicCourse.getTeachingRoomId());
         List<SysOrg> sysOrgList = null;
         if (count == 0) {
@@ -829,14 +853,59 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
      * 获取教研室主任审批人
      *
      * @param realName
+     * @param flowApproveNameEnum
      * @return
      */
     @Override
-    public List<ApproveUserResult> findByJxzyyDirectorApprove(String realName) {
+    public List<ApproveUserResult> findByJxzyyDirectorApprove(String realName, FlowApproveNameEnum flowApproveNameEnum) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        List<SysOrg> sysOrgList = sysOrgService.findByConnectByParentId(sysUser.getOrgId(), true, false);
-        Set<Long> orgIds = sysOrgList.stream().map(s -> s.getId()).collect(Collectors.toSet());
-        return sysUserService.filterFlowPrivilege(sysUser.getSchoolId(), orgIds, true, FlowApproveNameEnum.DIRECTOR, realName);
+        AuthBean authBean = teachcloudCommonService.getUserAuth(sysUser.getId());
+        Set<SysRolePrivilege> sysRolePrivilegeSet = new HashSet<>();
+        for (SysRole s : authBean.getRoleList()) {
+            sysRolePrivilegeSet.addAll(teachcloudCommonService.getRolePrivilege(s.getId()));
+        }
+        boolean cjmt = false, cjss = false;
+        List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(new QueryWrapper<SysPrivilege>().lambda().in(SysPrivilege::getUrl, Arrays.asList(FlowApproveNameEnum.DIRECTOR.getId(), FlowApproveNameEnum.PRESIDENT.getId())));
+        go:
+        for (SysRolePrivilege sysRolePrivilege : sysRolePrivilegeSet) {
+            for (SysPrivilege sysPrivilege : sysPrivilegeList) {
+                if (Objects.equals(sysPrivilege.getUrl(), FlowApproveNameEnum.DIRECTOR.getId()) && sysRolePrivilege.getPrivilegeId().longValue() == sysPrivilege.getId().longValue()) {
+                    cjmt = true;
+                } else if (Objects.equals(sysPrivilege.getUrl(), FlowApproveNameEnum.PRESIDENT.getId()) && sysRolePrivilege.getPrivilegeId().longValue() == sysPrivilege.getId().longValue()) {
+                    cjss = true;
+                }
+            }
+            if (cjmt && cjss) {
+                break go;
+            }
+        }
+        SysOrg sysOrg = authBean.getOrg();
+        if (sysOrg.getType() == OrgTypeEnum.SCHOOL) {//学校下是实施人员或者超级老师
+            List<ApproveUserResult> approveUserResultList = new ArrayList<>();
+            if (cjss && cjmt) {
+                List<ApproveUserResult> presidentList = this.findByJxzyyTopDirectorOrPresidentApprove(Arrays.asList(sysOrg.getId()), realName, FlowApproveNameEnum.PRESIDENT);
+                List<ApproveUserResult> directorList = this.findByJxzyyTopDirectorOrPresidentApprove(Arrays.asList(sysOrg.getId()), realName, FlowApproveNameEnum.DIRECTOR);
+                approveUserResultList.addAll(presidentList);
+                approveUserResultList.addAll(directorList);
+                Set<ApproveUserResult> approveUserResultSet = new HashSet<>(approveUserResultList);
+                approveUserResultList = new ArrayList<>(approveUserResultSet);
+            } else if (cjss) {
+                approveUserResultList = this.findByJxzyyTopDirectorOrPresidentApprove(Arrays.asList(sysOrg.getId()), realName, FlowApproveNameEnum.PRESIDENT);
+            } else if (cjmt && flowApproveNameEnum == FlowApproveNameEnum.DIRECTOR) {
+                approveUserResultList = this.findByJxzyyTopDirectorOrPresidentApprove(Arrays.asList(sysOrg.getId()), realName, FlowApproveNameEnum.DIRECTOR);
+            }
+            return approveUserResultList;
+        } else {//否则是学校命题老师
+            if (flowApproveNameEnum == FlowApproveNameEnum.DIRECTOR) {
+                List<ApproveUserResult> approveUserResultList = this.findByJxzyyTopDirectorOrPresidentApprove(Arrays.asList(sysOrg.getId()), realName, FlowApproveNameEnum.DIRECTOR);
+                List<SysOrg> sysOrgList = sysOrgService.findByConnectByParentId(sysUser.getOrgId(), true, false);
+                Set<Long> orgIds = sysOrgList.stream().map(s -> s.getId()).collect(Collectors.toSet());
+                approveUserResultList.addAll(sysUserService.filterFlowPrivilege(sysUser.getSchoolId(), orgIds, true, FlowApproveNameEnum.DIRECTOR, realName));
+                return approveUserResultList;
+            } else {
+                return null;
+            }
+        }
     }
 
     /**
@@ -865,6 +934,29 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         }
     }
 
+    /**
+     * 获取院长审批人
+     *
+     * @param orgIds
+     * @param realName
+     * @return
+     */
+    @Override
+    public List<ApproveUserResult> findByJxzyyTopDirectorOrPresidentApprove(List<Long> orgIds, String realName, FlowApproveNameEnum flowApproveNameEnum) {
+        if (Objects.nonNull(orgIds) && orgIds.size() > 0) {
+            Long schoolId = SystemConstant.getHeadOrUserSchoolId();
+            Set<SysOrg> sysOrgSet = new HashSet<>();
+            for (Long l : orgIds) {
+                sysOrgSet.addAll(sysOrgService.findByJxzyyConnectByParentId(l, OrgTypeEnum.SCHOOL));
+            }
+            Set<Long> orgIdsSet = sysOrgSet.stream().map(s -> s.getId()).collect(Collectors.toSet());
+            List<ApproveUserResult> approveUserResultList = sysUserService.filterFlowPrivilege(schoolId, orgIdsSet, true, flowApproveNameEnum, realName);
+            return approveUserResultList;
+        } else {
+            return new ArrayList<>();
+        }
+    }
+
     /**
      * 获取同级别下一级审批人
      *

+ 9 - 0
teachcloud-common/src/main/resources/mapper/SysOrgMapper.xml

@@ -34,6 +34,15 @@
         </where>
     </select>
 
+    <select id="findByJxzyyConnectByParentId" resultType="com.qmth.teachcloud.common.entity.SysOrg">
+        SELECT su.* FROM (SELECT @a AS _id, (SELECT @a := so.parent_id FROM sys_org so WHERE so.id = _id) AS parent_id FROM (SELECT @a := #{orgId}) vars, sys_org h WHERE @a <![CDATA[ <> ]]> 0) temp JOIN sys_org su ON temp._id = su.id
+        <where>
+            <if test="orgType != null and orgType != ''">
+                and su.type = #{orgType}
+            </if>
+        </where>
+    </select>
+
     <select id="findByConnectByRootOrgId" resultType="com.qmth.teachcloud.common.entity.SysOrg">
         SELECT so.* FROM sys_org so WHERE FIND_IN_SET(id, getRootChildId(#{orgId}))
     </select>