package com.zt.modules.workflowconfig.service; 
 | 
  
 | 
import cn.hutool.core.convert.Convert; 
 | 
import com.zt.common.db.query.QueryFilter; 
 | 
import com.zt.common.exception.RenException; 
 | 
import com.zt.common.service.BaseService; 
 | 
import com.zt.modules.sys.model.SysRoleMenu; 
 | 
import com.zt.modules.sys.service.SysRoleMenuService; 
 | 
import com.zt.modules.sys.service.SysRoleUserService; 
 | 
import com.zt.modules.workflowconfig.dao.WfDefStepDao; 
 | 
import com.zt.modules.workflowconfig.dto.FlowMenuDto; 
 | 
import com.zt.modules.workflowconfig.model.WfDef; 
 | 
import com.zt.modules.workflowconfig.model.WfDefStep; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.util.List; 
 | 
  
 | 
@Service 
 | 
public class WorkflowConfigService extends BaseService<WfDefStepDao, WfDefStep> { 
 | 
  
 | 
    @Autowired 
 | 
    private WfDefStepDao wfDefStepDao; 
 | 
  
 | 
    @Autowired 
 | 
    private SysRoleMenuService sysRoleMenuService; 
 | 
  
 | 
    @Autowired 
 | 
    private SysRoleUserService sysRoleUserService; 
 | 
    /** 
 | 
     * 根据id查询流程配置列表 
 | 
     * 
 | 
     * @param queryFilter 
 | 
     * @return 
 | 
     */ 
 | 
    public List<WfDefStep> queryStepsList(QueryFilter queryFilter) { 
 | 
        List<WfDefStep> wfDefStepList = wfDefStepDao.queryStepsList(queryFilter.getQueryParams()); 
 | 
        return wfDefStepList; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 查询工作流下拉框 
 | 
     * 
 | 
     * @return 
 | 
     */ 
 | 
    public List<WfDef> workflowSelect() { 
 | 
        return wfDefStepDao.workflowSelect(); 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    /** 
 | 
     * 按 ID 获取工作流程步骤列表 
 | 
     * 
 | 
     * @param id 
 | 
     * @return 
 | 
     */ 
 | 
    public WfDefStep getWorkflowStepsListById(Long id) { 
 | 
        WfDefStep  result = baseDao.selectById(id); 
 | 
        return result; 
 | 
    } 
 | 
  
 | 
    public WfDefStep getWorkflowStepByCode(String stepCode) { 
 | 
        WfDefStep  result = baseDao.getWorkflowStepByCode(stepCode); 
 | 
        return result; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据步骤获取相关审核用户 
 | 
     * 
 | 
     * @param stepsId 
 | 
     * @return 
 | 
     */ 
 | 
    public List<WfDefStep> getUserByWorkflowSteps(Long stepsId) { 
 | 
        return baseDao.getUserByWorkflowSteps(stepsId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 查询用户列表 
 | 
     * 
 | 
     * @param queryFilter 
 | 
     * @return 
 | 
     */ 
 | 
    public List<WfDefStep> getUserList(QueryFilter queryFilter) { 
 | 
        return queryFilter.getPageList(baseDao.getUserList(queryFilter.getQueryParams())); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 添加工作流步骤审核用户 
 | 
     * 
 | 
     * @param approver_ids 
 | 
     * @param id 
 | 
     */ 
 | 
    public void addWorkflowStepsUser(String approver_ids, Long id) { 
 | 
        WfDefStep wfDefStep = baseDao.selectById(id); 
 | 
        StringBuffer sb = new StringBuffer(); 
 | 
        if (StringUtils.isNotBlank(wfDefStep.getApproverIds())) { 
 | 
            sb.append(wfDefStep.getApproverIds()); 
 | 
            sb.append(","); 
 | 
            sb.append(approver_ids); 
 | 
            baseDao.addWorkflowStepsUser(sb.toString(), id); 
 | 
        } else { 
 | 
            baseDao.addWorkflowStepsUser(approver_ids, id); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 删除工作流步骤审核用户 
 | 
     * 
 | 
     * @param userId 
 | 
     * @param stepId 
 | 
     */ 
 | 
    public void deleteWorkflowStepsUser(String userId, String stepId) { 
 | 
        WfDefStep wfDefStep = baseDao.selectById(stepId); 
 | 
        if (StringUtils.isNotBlank(wfDefStep.getApproverIds())) { 
 | 
            String[] newAppRoverId = userId.split(","); 
 | 
            String[] oldAppRoverId = wfDefStep.getApproverIds().split(","); 
 | 
            String appRoverId = ""; 
 | 
            for (int i = 0; i < oldAppRoverId.length; i++) { 
 | 
                int num = 0; 
 | 
                for (int j = 0; j < newAppRoverId.length; j++) { 
 | 
                    if (oldAppRoverId[i].equals(newAppRoverId[j])) { 
 | 
                        num = num + 1; 
 | 
                    } 
 | 
                } 
 | 
                if (num == 0) { 
 | 
                    appRoverId += oldAppRoverId[i] + ","; 
 | 
                } 
 | 
                num = 0; 
 | 
            } 
 | 
            baseDao.deleteWorkflowStepsUser(appRoverId, stepId); 
 | 
        } else { 
 | 
            throw new RenException("请添加数据后删除"); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 添加工作流流程步骤 
 | 
     * 
 | 
     * @param wfDefStep 
 | 
     */ 
 | 
    @Override 
 | 
    public void insert(WfDefStep wfDefStep) { 
 | 
        //wfDefStep.setIsDelete(0); 
 | 
        super.insert(wfDefStep); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 删除工作流流程步骤 
 | 
     * 
 | 
     * @param ids 
 | 
     */ 
 | 
    public void delete(Long[] ids) { 
 | 
        for (Long id : ids) { 
 | 
            baseDao.delete(id); 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 根据步骤获取相关审核用户 
 | 
     * 
 | 
     * @param stepsId 
 | 
     * @return 
 | 
     */ 
 | 
    public List<WfDefStep> getRoleByWorkflowSteps(Long stepsId) { 
 | 
        List<WfDefStep> list = baseDao.getRoleByWorkflowSteps(stepsId); 
 | 
        return list; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 查询用户列表 
 | 
     * 
 | 
     * @param queryFilter 
 | 
     * @return 
 | 
     */ 
 | 
    public List<WfDefStep> getRoleList(QueryFilter queryFilter) { 
 | 
        List<WfDefStep> list = queryFilter.getPageList(baseDao.getRoleList(queryFilter.getQueryParams())); 
 | 
        return list; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 添加工作流步骤审核用户 
 | 
     * 
 | 
     * @param approver_ids 
 | 
     * @param id 
 | 
     */ 
 | 
    public void addWorkflowStepsRole(String approver_ids, Long id) { 
 | 
        WfDefStep wfDefStep = baseDao.selectById(id); 
 | 
        StringBuffer sb = new StringBuffer(); 
 | 
        if (StringUtils.isNotBlank(wfDefStep.getApproverRoleIds())) { 
 | 
            sb.append(wfDefStep.getApproverRoleIds()); 
 | 
            sb.append(","); 
 | 
            sb.append(approver_ids); 
 | 
            baseDao.addWorkflowStepsRole(sb.toString(), id); 
 | 
        } else { 
 | 
            baseDao.addWorkflowStepsRole(approver_ids, id); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 删除工作流步骤审核用户 
 | 
     * 
 | 
     * @param roleId 
 | 
     * @param stepId 
 | 
     */ 
 | 
    public void deleteWorkflowStepsRole(String roleId, String stepId) { 
 | 
        WfDefStep wfDefStep = baseDao.selectById(stepId); 
 | 
        if (StringUtils.isNotBlank(wfDefStep.getApproverRoleIds())) { 
 | 
            String[] newAppRoverId = roleId.split(","); 
 | 
            String[] oldAppRoverId = wfDefStep.getApproverRoleIds().split(","); 
 | 
            String appRoverId = ""; 
 | 
            for (int i = 0; i < oldAppRoverId.length; i++) { 
 | 
                int num = 0; 
 | 
                for (int j = 0; j < newAppRoverId.length; j++) { 
 | 
                    if (oldAppRoverId[i].equals(newAppRoverId[j])) { 
 | 
                        num = num + 1; 
 | 
                    } 
 | 
                } 
 | 
                if (num == 0) { 
 | 
                    appRoverId += oldAppRoverId[i] + ","; 
 | 
                } 
 | 
                num = 0; 
 | 
            } 
 | 
            baseDao.deleteWorkflowStepsRole(appRoverId, stepId); 
 | 
        } else { 
 | 
            throw new RenException("请添加数据后删除"); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void refreshFlowMenu() { 
 | 
        //baseDao.deleteFlowMenu(); 
 | 
  
 | 
         //没有待办、已办菜单权限的菜单权限记录的角色的更改为有效(sys_role_menu 更改is_delete=0) 
 | 
        List<FlowMenuDto> list = baseDao.selectFlowMenu(); 
 | 
        for (FlowMenuDto item : list 
 | 
        ) { 
 | 
            String roleId = item.getRoleId(); 
 | 
            String menuId = item.getMenuId(); 
 | 
            String menuId2 = item.getMenuId2(); 
 | 
            Long id2 = item.getId2(); 
 | 
            if (!StringUtils.isEmpty(menuId2)) { 
 | 
                //选择了角色没有待办、已办菜单权限的菜单权限记录被删除了的更改为有效(sys_role_menu 更改is_delete=0) 
 | 
                SysRoleMenu sysRoleMenu = sysRoleMenuService.get(id2); 
 | 
                sysRoleMenu.setDelete(false); 
 | 
                sysRoleMenuService.update(sysRoleMenu); 
 | 
            } else { 
 | 
                //选择了角色没有待办、已办菜单权限的加上菜单权限记录 
 | 
                SysRoleMenu sysRoleMenu = new SysRoleMenu(); 
 | 
                sysRoleMenu.setRoleId(Convert.toLong(roleId)); 
 | 
                sysRoleMenu.setMenuId(Convert.toLong(menuId)); 
 | 
                sysRoleMenu.setDelete(false); 
 | 
                sysRoleMenuService.insert(sysRoleMenu); 
 | 
            } 
 | 
        } 
 | 
        baseDao.deleteRoleFlowMenu(); 
 | 
    } 
 | 
    public void refreshFlowMenuOld() { 
 | 
        //baseDao.deleteFlowMenu(); 
 | 
        //选择了角色没有待办、已办菜单权限的加上菜单权限记录 
 | 
        //选择了角色没有待办、已办菜单权限的菜单权限记录被删除了的更改为有效(sys_role_menu 更改is_delete=0) 
 | 
        //没有待办、已办菜单权限的菜单权限记录的角色的更改为有效(sys_role_menu 更改is_delete=0) 
 | 
        List<FlowMenuDto> list = baseDao.selectFlowMenu(); 
 | 
        for (FlowMenuDto item : list 
 | 
        ) { 
 | 
            String roleId = item.getRoleId(); 
 | 
            String menuId = item.getMenuId(); 
 | 
            String menuId2 = item.getMenuId2(); 
 | 
            Long id2 = item.getId2(); 
 | 
            if (!StringUtils.isEmpty(menuId2)) { 
 | 
                SysRoleMenu sysRoleMenu = sysRoleMenuService.get(id2); 
 | 
                if (StringUtils.isEmpty(menuId)) { 
 | 
                    if (!sysRoleMenu.isDelete()) { 
 | 
                        sysRoleMenu.setDelete(true); 
 | 
                        sysRoleMenuService.update(sysRoleMenu); 
 | 
                    } 
 | 
                } else { 
 | 
                    if (sysRoleMenu.isDelete()) { 
 | 
                        sysRoleMenu.setDelete(false); 
 | 
                        sysRoleMenuService.update(sysRoleMenu); 
 | 
                    } 
 | 
                } 
 | 
            } else { 
 | 
                SysRoleMenu sysRoleMenu = new SysRoleMenu(); 
 | 
                sysRoleMenu.setRoleId(Convert.toLong(roleId)); 
 | 
                sysRoleMenu.setMenuId(Convert.toLong(menuId)); 
 | 
                sysRoleMenu.setDelete(false); 
 | 
                sysRoleMenuService.insert(sysRoleMenu); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
} 
 |