package doumeemes.service.ext.impl; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.Wrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.github.pagehelper.PageHelper; 
 | 
import com.github.pagehelper.PageInfo; 
 | 
import doumeemes.core.constants.ResponseStatus; 
 | 
import doumeemes.core.exception.BusinessException; 
 | 
import doumeemes.core.model.LoginUserInfo; 
 | 
import doumeemes.core.model.PageData; 
 | 
import doumeemes.core.model.PageWrap; 
 | 
import doumeemes.core.utils.Constants; 
 | 
import doumeemes.core.utils.DateUtil; 
 | 
import doumeemes.core.utils.dingding.DingDingSyncUtil; 
 | 
import doumeemes.core.utils.dingding.bean.CompanyUserDTO; 
 | 
import doumeemes.core.utils.redis.RedisUtil; 
 | 
import doumeemes.dao.business.BackorderMapper; 
 | 
import doumeemes.dao.business.model.*; 
 | 
import doumeemes.dao.ext.*; 
 | 
import doumeemes.dao.ext.dto.*; 
 | 
import doumeemes.dao.ext.vo.CompanyExtListVO; 
 | 
import doumeemes.dao.ext.vo.DepartmentExtListVO; 
 | 
import doumeemes.dao.system.SystemDepartmentUserMapper; 
 | 
import doumeemes.dao.system.SystemUserMapper; 
 | 
import doumeemes.dao.system.model.SystemDepartmentUser; 
 | 
import doumeemes.dao.system.model.SystemUser; 
 | 
import doumeemes.service.ext.CompanyExtService; 
 | 
import doumeemes.service.ext.DepartmentExtService; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.shiro.SecurityUtils; 
 | 
import org.springframework.beans.BeanUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.data.redis.core.RedisTemplate; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import javax.annotation.PostConstruct; 
 | 
import java.util.*; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * 组织信息Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2022/04/20 10:59 
 | 
 */ 
 | 
@Slf4j 
 | 
@Service 
 | 
public class DepartmentExtServiceImpl implements DepartmentExtService { 
 | 
  
 | 
    @Autowired 
 | 
    private RedisTemplate<String, Object> redisTemplate; 
 | 
  
 | 
    @Autowired 
 | 
    private DepartmentExtMapper departmentExtMapper; 
 | 
    @Autowired 
 | 
    private SystemUserMapper systemUserMapper; 
 | 
    @Autowired 
 | 
    private CompanyPositionExtMapper companyPositionExtMapper; 
 | 
    @Autowired 
 | 
    private PlansExtMapper plansExtMapper; 
 | 
    @Autowired 
 | 
    private BackorderMapper backorderMapper; 
 | 
    @Autowired 
 | 
    private CompanyUserExtMapper  companyUserExtMapper; 
 | 
    @Autowired 
 | 
    private WorkorderExtMapper workorderExtMapper; 
 | 
    @Autowired 
 | 
    private WorkorderCheckExtMapper workorderCheckExtMapper; 
 | 
    @Autowired 
 | 
    private WOutboundExtMapper wOutboundExtMapper; 
 | 
    @Autowired 
 | 
    private CompanyExtMapper companyExtMapper; 
 | 
    @Autowired 
 | 
    private CompanyExtService companyExtService; 
 | 
    @Autowired 
 | 
    private WTransferExtMapper wTransferExtMapper; 
 | 
  
 | 
    @Override 
 | 
    public PageData<DepartmentExtListVO> findPage(PageWrap<QueryDepartmentExtDTO> pageWrap) { 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //如果是企业级用户,只能看自己企业的部门数据 
 | 
            pageWrap.getModel().setType(Constants.DEPART_TYPE.com); 
 | 
            pageWrap.getModel().setRootId(user.getRootDepartment().getId()); 
 | 
        }else{ 
 | 
            pageWrap.getModel().setType(Constants.DEPART_TYPE.plat); 
 | 
        } 
 | 
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        List<DepartmentExtListVO> result = departmentExtMapper.selectList(pageWrap.getModel()); 
 | 
        return PageData.from(new PageInfo<>(result)); 
 | 
    } 
 | 
    @Override 
 | 
    public  DepartmentExtListVO treeComList(QueryDepartmentExtDTO pageWrap) { 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //如果是企业级用户,只能看自己企业的部门数据 
 | 
            DepartmentExtListVO treeList = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_DEPART_TREE_KEY+user.getCompany().getId(),DepartmentExtListVO.class); 
 | 
            return treeList; 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Integer create(Department department) { 
 | 
        // 用户信息 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        department.setCreateTime(DateUtil.getCurrentDate()); 
 | 
        department.setDeleted(Constants.ZERO); 
 | 
        department.setCreateUser(user.getId()); 
 | 
        department.setStatus(Constants.formatIntegerNum(department.getStatus())); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //如果是企业级用户 
 | 
            if(department.getParentId() != null){ 
 | 
                DepartmentExtListVO p = getModelById(user.getCompany().getId(),department.getParentId()); 
 | 
                if(p==null){ 
 | 
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,上级部门不存在"); 
 | 
                } 
 | 
                if(p.getParentId()!= null && Constants.equalsInteger(department.getType(),Constants.DEPART_TYPE.com)){ 
 | 
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请选择正确的部门类型"); 
 | 
                } 
 | 
            }else{ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请选择上级部门"); 
 | 
            } 
 | 
            department.setCompanyId(user.getCompany().getId()); 
 | 
            department.setRootId(user.getRootDepartment().getId()); 
 | 
        }else { 
 | 
            department.setType(Constants.DEPART_TYPE.plat); 
 | 
        } 
 | 
        departmentExtMapper.insert(department); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //更新缓存信息 
 | 
            loadComDepart(user.getCompany()); 
 | 
        } 
 | 
        return department.getId(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(Integer id) { 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            DepartmentExtListVO model  =getModelById(user.getCompany().getId(),id) ; 
 | 
            if(model == null){ 
 | 
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), ResponseStatus.DATA_EMPTY.getMessage()); 
 | 
            } 
 | 
            if(model.getParentId()==null){ 
 | 
                //如果是根组织,不允许修改 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,主组织不允许删除"); 
 | 
            } 
 | 
            if(model.getChildren()!= null && model.getChildren().size()>0){ 
 | 
                //如果有子部门,不允许修改 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,子部门不为空,不能删除!"); 
 | 
            } 
 | 
            CompanyUser cu = new CompanyUser(); 
 | 
            cu.setDepartmentId(model.getId()); 
 | 
            cu.setDeleted(Constants.ZERO); 
 | 
            if(companyUserExtMapper.selectCount(new QueryWrapper<>(cu))>0 ){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,部门下存在绑定员工,不能删除!"); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        Department department = new Department(); 
 | 
        department.setId(id); 
 | 
        department.setDeleted(Constants.ONE); 
 | 
        departmentExtMapper.updateById(department); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //更新缓存信息 
 | 
            loadComDepart(user.getCompany()); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    @Transactional 
 | 
    public void deleteByIdInBatch(List<Integer> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) return; 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        for (Integer id : ids) { 
 | 
            if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM) &&  getModelById(user.getCompany().getId(),id) ==null){ 
 | 
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), ResponseStatus.DATA_EMPTY.getMessage()); 
 | 
            } 
 | 
            Department department = new Department(); 
 | 
            department.setId(id); 
 | 
            department.setDeleted(Constants.ONE); 
 | 
            departmentExtMapper.updateById(department); 
 | 
        } 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //更新缓存信息 
 | 
            loadComDepart(user.getCompany()); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(Department department) { 
 | 
        // 用户信息 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            DepartmentExtListVO model  =getModelById(user.getCompany().getId(),department.getId()) ; 
 | 
            if(model == null){ 
 | 
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), ResponseStatus.DATA_EMPTY.getMessage()); 
 | 
            } 
 | 
            if(model.getParentId()==null){ 
 | 
                //如果是根组织,不允许修改 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,主组织不允许修改"); 
 | 
            } 
 | 
            if(department.getParentId()==null){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请选择父级组织"); 
 | 
            } 
 | 
            if(getModelById(user.getCompany().getId(),department.getParentId())==null){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,父级组织不存在"); 
 | 
            } 
 | 
        } 
 | 
        department.setUpdateTime(DateUtil.getCurrentDate()); 
 | 
        department.setUpdateUser(user.getId()); 
 | 
        departmentExtMapper.updateById(department); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //更新缓存信息 
 | 
            loadComDepart(user.getCompany()); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    @Transactional 
 | 
    public void updateByIdInBatch(List<Department> departments) { 
 | 
        if (CollectionUtils.isEmpty(departments)) return; 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        for (Department department: departments) { 
 | 
            if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM) &&  getModelById(user.getCompany().getId(),department.getId()) ==null){ 
 | 
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), ResponseStatus.DATA_EMPTY.getMessage()); 
 | 
            } 
 | 
            departmentExtMapper.updateById(department); 
 | 
        } 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //更新缓存信息 
 | 
            loadComDepart(user.getCompany()); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Department findById(Integer id) { 
 | 
        return departmentExtMapper.selectById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Department> findByIds(List<Integer> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return Collections.emptyList(); 
 | 
        } 
 | 
        QueryWrapper<Department> queryWrapper = new QueryWrapper<>(); 
 | 
        queryWrapper.lambda().in(Department::getId, ids).eq(Department::getDeleted, Boolean.FALSE); 
 | 
        return departmentExtMapper.selectList(queryWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Department findOne(Department Department) { 
 | 
        QueryWrapper<Department> wrapper = new QueryWrapper<>(Department); 
 | 
        return departmentExtMapper.selectOne(wrapper.last("limit 1")); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<DepartmentExtListVO> findList(QueryDepartmentExtDTO dto) { 
 | 
        return departmentExtMapper.selectList(dto); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public long count(Department Department) { 
 | 
        Wrapper<Department> wrapper = new QueryWrapper<>(Department); 
 | 
        return departmentExtMapper.selectCount(wrapper); 
 | 
    } 
 | 
    @Override 
 | 
    public void changeCom(Integer id) { 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //如果是企业级用户,只能看自己企业的部门数据 
 | 
          List<Integer> pList = user.getDepartPermissionList(); 
 | 
          boolean hasRole = false; 
 | 
          if(pList!=null && pList.size()>0){ 
 | 
              for(Integer t : pList){ 
 | 
                  if(Constants.equalsInteger(t,id)){ 
 | 
                      hasRole = true; 
 | 
                      break; 
 | 
                  } 
 | 
              } 
 | 
          }else{ 
 | 
              hasRole = true; 
 | 
          } 
 | 
          if(!hasRole){ 
 | 
              throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "您没有权限切换到该部门"); 
 | 
          } 
 | 
          //切换当前部门 
 | 
          DepartmentExtListVO d = getModelById(user.getCompany().getId(),id); 
 | 
          if(d==null || !Constants.equalsInteger(d.getType(),Constants.DEPART_TYPE.com)){ 
 | 
              throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起!只能切换到公司级部门!"); 
 | 
          } 
 | 
          user.setCurComDepartment(d); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Integer> findChildren(Integer departmentId) { 
 | 
        List<Integer> pool = new ArrayList<>(); 
 | 
        this.fillChildren(pool, Arrays.asList(departmentId)); 
 | 
        return pool; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Integer> userDataPermissonList(DepartmentExtListVO depart ,boolean isleaf) { 
 | 
        List<Integer> pool = new ArrayList<>(); 
 | 
        List<DepartmentExtListVO> departList = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_DEPART_LIST_KEY+depart.getCompanyId(),ArrayList.class); 
 | 
        pool.add(depart.getId()); 
 | 
        this.fillDepartChildren(pool, Arrays.asList(depart.getId()),isleaf,departList); 
 | 
        return pool; 
 | 
    } 
 | 
  
 | 
    private void fillDepartChildren(List<Integer> pool, List<Integer> asList, boolean isleaf, List<DepartmentExtListVO> departList) { 
 | 
        List<DepartmentExtListVO> departments = getDepartListByParentIds(asList,departList); 
 | 
        List<Integer> ids = departments.stream().map(DepartmentExtListVO::getId).collect(Collectors.toList()); 
 | 
        if(isleaf){ 
 | 
            if (ids.size() > 0) { 
 | 
                pool.addAll(ids); 
 | 
                this.fillDepartChildren(pool, ids,isleaf,departList); 
 | 
            } 
 | 
        }else{ 
 | 
            pool.addAll(ids); 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    private List<DepartmentExtListVO> getDepartListByParentIds(List<Integer> asList, List<DepartmentExtListVO> departList) { 
 | 
        List<DepartmentExtListVO> list = new ArrayList<>(); 
 | 
        if(asList.size()>0){ 
 | 
            for(Integer id : asList){ 
 | 
                list.addAll(getDepartListByParentId(id,departList)); 
 | 
            } 
 | 
        } 
 | 
        return list; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public DepartmentExtListVO getModelById(Integer comId,Integer id) { 
 | 
        List<DepartmentExtListVO>  list = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_DEPART_LIST_KEY+comId,ArrayList.class); 
 | 
        if(list != null){ 
 | 
            for(DepartmentExtListVO d : list){ 
 | 
                if(Constants.equalsInteger(d.getId(),id)){ 
 | 
                    return  d; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
    @Override 
 | 
    public DepartmentExtListVO getModelById(Integer comId,Integer id, List<DepartmentExtListVO>  list ) { 
 | 
        if(list != null){ 
 | 
            for(DepartmentExtListVO d : list){ 
 | 
                if(Constants.equalsInteger(d.getId(),id)){ 
 | 
                    return  d; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public DepartmentExtListVO getModelByName(Integer comId,String name) { 
 | 
        List<DepartmentExtListVO>  list = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_DEPART_LIST_KEY+comId,ArrayList.class); 
 | 
        if(list != null){ 
 | 
            for(DepartmentExtListVO d : list){ 
 | 
                if(StringUtils.equals(name,d.getName())){ 
 | 
                    return  d; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
    @Override 
 | 
    public DepartmentExtListVO getModelByComDepartAndName(Integer comId,Integer comDepartId,String name) { 
 | 
        List<DepartmentExtListVO>  list = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_DEPART_LIST_KEY+comId,ArrayList.class); 
 | 
        if(list != null){ 
 | 
            for(DepartmentExtListVO d : list){ 
 | 
                if(StringUtils.equals(name,d.getName()) && Constants.equalsInteger(getComDepartId(d,list),comDepartId)){ 
 | 
                        return  d; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
    @Override 
 | 
    public Integer getComDepartId(DepartmentExtListVO depart) { 
 | 
        //如果是根节点或者已经企业级部门 
 | 
       if(depart.getParentId() == null || Constants.equalsInteger(depart.getType(),Constants.DEPART_TYPE.com)){ 
 | 
           return depart.getId(); 
 | 
       } 
 | 
       //父级部门 
 | 
       DepartmentExtListVO d = getModelById(depart.getCompanyId(),depart.getParentId()); 
 | 
       if(d == null){ 
 | 
           return null; 
 | 
       } 
 | 
        if( Constants.equalsInteger(d.getType(),Constants.DEPART_TYPE.com)){ 
 | 
            //如果父级是企业级部门,直接返回 
 | 
            return  d.getId(); 
 | 
        }else{ 
 | 
            //如果父级不是企业级部门继续往上级查,直到查到父级几点 
 | 
            return getComDepartId(d); 
 | 
        } 
 | 
    } 
 | 
    @Override 
 | 
    public Integer getComDepartId(DepartmentExtListVO depart,List<DepartmentExtListVO> allDepartList) { 
 | 
        //如果是根节点或者已经企业级部门 
 | 
       if(depart.getParentId() == null || Constants.equalsInteger(depart.getType(),Constants.DEPART_TYPE.com)){ 
 | 
           return depart.getId(); 
 | 
       } 
 | 
       //父级部门 
 | 
       DepartmentExtListVO d = getModelById(depart.getCompanyId(),depart.getParentId(),allDepartList); 
 | 
       if(d == null){ 
 | 
           return null; 
 | 
       } 
 | 
        if( Constants.equalsInteger(d.getType(),Constants.DEPART_TYPE.com)){ 
 | 
            //如果父级是企业级部门,直接返回 
 | 
            return  d.getId(); 
 | 
        }else{ 
 | 
            //如果父级不是企业级部门继续往上级查,直到查到父级几点 
 | 
            return getComDepartId(d,allDepartList); 
 | 
        } 
 | 
    } 
 | 
    @Override 
 | 
    public  void loadComDepart(CompanyExtListVO com ) { 
 | 
  
 | 
            QueryDepartmentExtDTO d = new QueryDepartmentExtDTO(); 
 | 
            d.setDeleted(Constants.ZERO); 
 | 
            d.setCompanyId(com.getId()); 
 | 
            //查询全部企业部门信息 
 | 
            List<DepartmentExtListVO> allDepart =    departmentExtMapper.selectList(d); 
 | 
            DepartmentExtListVO rootDepart = getDepartByComId(com.getId(),allDepart); 
 | 
            if(rootDepart!=null){ 
 | 
                List<DepartmentExtListVO> pool = new ArrayList<>(); 
 | 
                pool.add(rootDepart); 
 | 
                getCompnayDepartTree(pool, allDepart); 
 | 
            } 
 | 
            //加入redis缓存,以企业id为编码,缓存企业全部部门 
 | 
            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_DEPART_LIST_KEY+com.getId(),allDepart); 
 | 
            //加入redis缓存,以企业id为编码,缓存企业部门树形结构 
 | 
            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_INFO_KEY+com.getId(),com); 
 | 
            //加入redis缓存,存储企业信息 
 | 
            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_DEPART_TREE_KEY+com.getId(),rootDepart); 
 | 
    } 
 | 
    @PostConstruct 
 | 
    @Override 
 | 
    public  void loadAllDepart() { 
 | 
        QueryCompanyExtDTO dto = new QueryCompanyExtDTO(); 
 | 
        dto.setDeleted(Constants.ZERO); 
 | 
        //查询全部企业信息 
 | 
        List<CompanyExtListVO> list =    companyExtMapper.selectList(dto); 
 | 
        if(list != null && list.size()>0){ 
 | 
            QueryDepartmentExtDTO d = new QueryDepartmentExtDTO(); 
 | 
            d.setDeleted(Constants.ZERO); 
 | 
            //查询全部企业部门信息 
 | 
            List<DepartmentExtListVO> departList =    departmentExtMapper.selectList(d); 
 | 
            for(CompanyExtListVO com : list){ 
 | 
                //当前企业的全部部门信息 
 | 
                List<DepartmentExtListVO> allDepart = getAllDepartByComId(com.getId(),departList); 
 | 
                DepartmentExtListVO rootDepart = getDepartByComId(com.getId(),allDepart); 
 | 
                if(rootDepart!=null){ 
 | 
                    List<DepartmentExtListVO> pool = new ArrayList<>(); 
 | 
                    pool.add(rootDepart); 
 | 
                    getCompnayDepartTree(pool, allDepart); 
 | 
                } 
 | 
                //加入redis缓存,以企业id为编码,缓存企业全部部门 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_DEPART_LIST_KEY+com.getId(),allDepart); 
 | 
  
 | 
                QueryWOutboundExtDTO w = new QueryWOutboundExtDTO(); 
 | 
                w.setRootDepartId(rootDepart.getId()); 
 | 
                if(RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_OUTBOUND_IN_KEY+com.getId(),Integer.class) == null){ 
 | 
                    w.setType(Constants.WOUTBOUND_TYPE.in); 
 | 
                    //加入redis缓存,以企业id为编码,缓存企业入库单总数量 
 | 
                    RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_OUTBOUND_IN_KEY+com.getId(),wOutboundExtMapper.selectCountToday(w)); 
 | 
                } 
 | 
                if(RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_OUTBOUND_OUT_KEY+com.getId(),Integer.class) == null){ 
 | 
                    w.setType(Constants.WOUTBOUND_TYPE.out); 
 | 
                    //加入redis缓存,以企业id为编码,缓存企业出库单总数量 
 | 
                    RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_OUTBOUND_OUT_KEY+com.getId(),wOutboundExtMapper.selectCountToday(w)); 
 | 
                } 
 | 
                if(RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_BACKORDER_CODE_KEY+com.getId(),Integer.class) == null){ 
 | 
                    Backorder backorder = new Backorder(); 
 | 
                    backorder.setRootDepartId(rootDepart.getId()); 
 | 
                    //加入redis缓存,以企业id为编码,缓存企业今天返工总数量 
 | 
                    RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_BACKORDER_CODE_KEY+com.getId(),backorderMapper.selectCount( new LambdaQueryWrapper<>(backorder).apply(" to_days(CREATE_TIME)=to_days(now())"))); 
 | 
                } 
 | 
                QueryPlansExtDTO p = new QueryPlansExtDTO(); 
 | 
                p.setRootDepartId(rootDepart.getId()); 
 | 
                if(RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_PLANS_CODE_KEY+com.getId(),Integer.class) == null){ 
 | 
                    //加入redis缓存,以企业id为编码,缓存企业今天计划总数量 
 | 
                    RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_PLANS_CODE_KEY+com.getId(),plansExtMapper.selectCountToday(p)); 
 | 
                } 
 | 
                if(RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_PLAN_BATCH_KEY+com.getId(),Integer.class) == null){ 
 | 
                    p.setType(Constants.PLAN_TYPE.back); 
 | 
                    //加入redis缓存,以企业id为编码,缓存企业今天返工计划总数量 
 | 
                    RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_PLAN_BATCH_KEY+com.getId(),plansExtMapper.selectCountToday(p)); 
 | 
                } 
 | 
                if(RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_CHECK_CODE_KEY+com.getId(),Integer.class) == null){ 
 | 
                    QueryWorkorderCheckExtDTO cp = new QueryWorkorderCheckExtDTO(); 
 | 
                    p.setRootDepartId(rootDepart.getId()); 
 | 
                    //加入redis缓存,以企业id为编码,缓存企业今天检验总数量 
 | 
                    RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_CHECK_CODE_KEY+com.getId(),workorderCheckExtMapper.selectCountToday(cp)); 
 | 
                } 
 | 
                if(RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_WORKORDER_CODE_KEY+com.getId(),Integer.class) == null){ 
 | 
                    QueryWorkorderExtDTO o = new QueryWorkorderExtDTO(); 
 | 
                    o.setRootDepartId(rootDepart.getId()); 
 | 
                    //加入redis缓存,以企业id为编码,缓存企业今天工单总数量 
 | 
                    RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_WORKORDER_CODE_KEY+com.getId(),workorderExtMapper.selectCountToday(o)); 
 | 
                    //加入redis缓存,以企业id为编码,缓存企业部门树形结构 
 | 
                } 
 | 
                if(RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_TRANSFER_KEY+com.getId(),Integer.class) == null){ 
 | 
                    QueryWTransferExtDTO o = new QueryWTransferExtDTO(); 
 | 
                    o.setRootDepartId(rootDepart.getId()); 
 | 
                    //加入redis缓存,以企业id为编码,缓存企业今天工单总数量 
 | 
                    RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_TRANSFER_KEY+com.getId(),wTransferExtMapper.selectCountToday(o)); 
 | 
                    //加入redis缓存,以企业id为编码,缓存企业部门树形结构 
 | 
                } 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_INFO_KEY+com.getId(),com); 
 | 
                //加入redis缓存,存储企业信息 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_DEPART_TREE_KEY+com.getId(),rootDepart); 
 | 
            } 
 | 
//            Integer comId =   getComDepartId(departList.get(departList.size()-2)); 
 | 
//            System.out.println(comId+"========================"); 
 | 
        } 
 | 
    } 
 | 
    @Override 
 | 
    public  void initCompnayCodes(){ 
 | 
        QueryCompanyExtDTO dto = new QueryCompanyExtDTO(); 
 | 
        dto.setDeleted(Constants.ZERO); 
 | 
        //查询全部企业信息 
 | 
        List<CompanyExtListVO> list =    companyExtMapper.selectList(dto); 
 | 
        if(list != null && list.size()>0){ 
 | 
            for(CompanyExtListVO com : list){ 
 | 
                //加入redis缓存,以企业id为编码,缓存企业入库单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_OUTBOUND_IN_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业出库单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_OUTBOUND_OUT_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业今天计划总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_PLANS_CODE_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业今天工单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_WORKORDER_CODE_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业今天检验总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_CHECK_CODE_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业转库单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_TRANSFER_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业返修申请单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_BACKORDER_CODE_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业计划批次单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_PLAN_BATCH_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业计划批次单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_DEVIECE_CHECK_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业计划批次单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_WORK_PLAN_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业计划批次单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_CATEGORY_CHECK_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业计划批次单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_PROCEDURES_CHECK_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业计划批次单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_ROUTE_CHECK_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业计划批次单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_WAREHOUSE_CHECK_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业计划批次单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_LOCATION_CHECK_KEY+com.getId(),0); 
 | 
                //加入redis缓存,以企业id为编码,缓存企业计划批次单总数量 
 | 
                RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_MATERIAL_CHECK_KEY+com.getId(),0); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    @Override 
 | 
    public void initCompnayCodesByCom(Company com){ 
 | 
        if(com != null){ 
 | 
            //加入redis缓存,以企业id为编码,缓存企业入库单总数量 
 | 
            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_OUTBOUND_IN_KEY+com.getId(),0); 
 | 
            //加入redis缓存,以企业id为编码,缓存企业出库单总数量 
 | 
            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_OUTBOUND_OUT_KEY+com.getId(),0); 
 | 
            //加入redis缓存,以企业id为编码,缓存企业今天计划总数量 
 | 
            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_PLANS_CODE_KEY+com.getId(),0); 
 | 
            //加入redis缓存,以企业id为编码,缓存企业今天工单总数量 
 | 
            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_WORKORDER_CODE_KEY+com.getId(),0); 
 | 
            //加入redis缓存,以企业id为编码,缓存企业今天检验总数量 
 | 
            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_CHECK_CODE_KEY+com.getId(),0); 
 | 
            //加入redis缓存,以企业id为编码,缓存企业转库单总数量 
 | 
            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_TRANSFER_KEY+com.getId(),0); 
 | 
            //加入redis缓存,以企业id为编码,缓存企业返修申请单总数量 
 | 
            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_BACKORDER_CODE_KEY+com.getId(),0); 
 | 
            //加入redis缓存,以企业id为编码,缓存企业计划批次单总数量 
 | 
            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_PLAN_BATCH_KEY+com.getId(),0); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据企业编码获取企业根组织 
 | 
     * @param id 
 | 
     * @param departList 
 | 
     * @return 
 | 
     */ 
 | 
    private DepartmentExtListVO getDepartByComId(Integer id, List<DepartmentExtListVO> departList) { 
 | 
        if(departList!= null){ 
 | 
            for(DepartmentExtListVO d :departList){ 
 | 
                if(Constants.equalsInteger(id,d.getCompanyId())&&d.getParentId() == null){ 
 | 
                    return d; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
    /** 
 | 
     * 根据企业编码获取企业根组织 
 | 
     * @param id 
 | 
     * @param departList 
 | 
     * @return 
 | 
     */ 
 | 
    private  List<DepartmentExtListVO>  getAllDepartByComId(Integer id, List<DepartmentExtListVO> departList) { 
 | 
        List<DepartmentExtListVO> list = null; 
 | 
        if(departList!= null){ 
 | 
            for(DepartmentExtListVO d :departList){ 
 | 
                if(Constants.equalsInteger(id,d.getCompanyId())){ 
 | 
                   if(list == null){ 
 | 
                       list = new ArrayList<>(); 
 | 
                   } 
 | 
                   list.add(d); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  list; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取子部门集合 
 | 
     * @author Eva.Caesar Liu 
 | 
     * @date 2022/04/18 18:12 
 | 
     */ 
 | 
    private void getCompnayDepartTree(List<DepartmentExtListVO> pool, List<DepartmentExtListVO> departList) { 
 | 
        if(pool!=null && pool.size()>0){ 
 | 
            for(DepartmentExtListVO d : pool){ 
 | 
                List<DepartmentExtListVO> departments = getDepartListByParentId(d.getId(),departList); 
 | 
                getCompnayDepartTree(departments,departList); 
 | 
                d.setChildren(departments); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private List<DepartmentExtListVO> getDepartListByParentId(Integer pId, List<DepartmentExtListVO> departList) { 
 | 
        List<DepartmentExtListVO> list = new ArrayList<>(); 
 | 
        if(departList!= null){ 
 | 
            for(DepartmentExtListVO d :departList){ 
 | 
                if(Constants.equalsInteger(d.getParentId(),pId)){ 
 | 
  
 | 
                    list.add(d); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  list; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取子部门ID 
 | 
     * @author Eva.Caesar Liu 
 | 
     * @date 2022/04/18 18:12 
 | 
     */ 
 | 
    private void fillChildren(List<Integer> pool, List<Integer> parentIds) { 
 | 
        QueryWrapper<Department> queryWrapper = new QueryWrapper<>(); 
 | 
        queryWrapper.lambda() 
 | 
                .eq(Department::getDeleted, Constants.ZERO) 
 | 
                .in(Department::getParentId, parentIds); 
 | 
        List<Department> departments = departmentExtMapper.selectList(queryWrapper); 
 | 
        List<Integer> ids = departments.stream().map(Department::getId).collect(Collectors.toList()); 
 | 
        if (ids.size() > 0) { 
 | 
            pool.addAll(ids); 
 | 
            this.fillChildren(pool, ids); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private static DepartmentExtListVO departmentExtListVO; 
 | 
    @Override 
 | 
    public  List<DepartmentExtListVO> getDepartmentListByConditon(QueryDepartmentExtDTO pageWrap) { 
 | 
        departmentExtListVO=null; 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //如果是企业级用户,只能看自己企业的部门数据 
 | 
            //数据权限 
 | 
            if(!Constants.equalsInteger(pageWrap.getType(),Constants.DEPART_TYPE.com)){ 
 | 
                //如果查询非公司级部门,只能查询当前用户切换的公司级下属部门 
 | 
                pageWrap.setComDepartId(user.getCurComDepartment().getId()); 
 | 
            } 
 | 
            List<Integer> dataPermission = user.getDepartPermissionList(); 
 | 
            if(dataPermission!=null && dataPermission.size()==0) { 
 | 
                if(pageWrap.getType()!=null &&   Constants.equalsInteger(pageWrap.getType(),Constants.DEPART_TYPE.com)){ 
 | 
                    //只能看自己的公司级 
 | 
                    List<DepartmentExtListVO> list =new ArrayList<>(); 
 | 
                    list.add(user.getComDepartment()); 
 | 
                    return list; 
 | 
                } else if(pageWrap.getType()!=null &&   Constants.equalsInteger(pageWrap.getType(),user.getDepartment().getType())){ 
 | 
                    //只能看自己的部门 
 | 
                    List<DepartmentExtListVO> list =new ArrayList<>(); 
 | 
                    list.add(user.getDepartment()); 
 | 
                    return list; 
 | 
                } 
 | 
                return  null; 
 | 
            } 
 | 
            //否则走数据权限 
 | 
            //查询全部企业部门信息 
 | 
            List<DepartmentExtListVO>  list = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_DEPART_LIST_KEY+user.getCompany().getId(),ArrayList.class); 
 | 
            List<DepartmentExtListVO> allDepart = new ArrayList<>(); 
 | 
            if(list != null && list.size()>0){ 
 | 
                for(DepartmentExtListVO d : list){ 
 | 
                    if(pageWrap.getType()!=null &&  !Constants.equalsInteger(pageWrap.getType(),d.getType())){ 
 | 
                        continue; 
 | 
                    } 
 | 
                    if(pageWrap.getName()!=null &&  !StringUtils.equals(pageWrap.getName(),d.getName())){ 
 | 
                        continue; 
 | 
                    } 
 | 
                    if(pageWrap.getComDepartId()!=null &&  !Constants.equalsInteger(getComDepartId(d,list),pageWrap.getComDepartId())){ 
 | 
                        continue; 
 | 
                    } 
 | 
                    if(dataPermission == null || (dataPermission!=null && inPerissionList(dataPermission,d.getId()))) { 
 | 
                        allDepart.add(d); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
  
 | 
            //获取当前用户所在的公司级或者工厂型组织 
 | 
            this.getpartentList(list,user.getDepartment().getId(),pageWrap.getType()); 
 | 
  
 | 
            Boolean mark=false; 
 | 
  
 | 
            if(departmentExtListVO!=null){ 
 | 
                if(allDepart.size()>0){ 
 | 
                    for(int p=0;p<allDepart.size();p++){ 
 | 
                        DepartmentExtListVO depv=allDepart.get(p); 
 | 
  
 | 
                        if(Constants.equalsInteger(depv.getId(),departmentExtListVO.getId())){ 
 | 
                            mark=true; 
 | 
                        } 
 | 
                    } 
 | 
                }else{ 
 | 
                    // allDepart.add(pool); 
 | 
                } 
 | 
            if(!mark){ 
 | 
                    allDepart.add(departmentExtListVO); 
 | 
                } 
 | 
  
 | 
            } 
 | 
  
 | 
            return allDepart; 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    private boolean inPerissionList(List<Integer> dataPermission, Integer id) { 
 | 
        if(dataPermission!=null){ 
 | 
            for(Integer tid : dataPermission){ 
 | 
                if(Constants.equalsInteger(tid,id)){ 
 | 
                    return true; 
 | 
                } 
 | 
            } 
 | 
        }else{ 
 | 
            //为null表示拥有全部数据权限 
 | 
            return true; 
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    /** 
 | 
     * 获取当前用户所在的的工厂型或公司型组织 
 | 
     * @author Eva.Caesar Liu 
 | 
     * @date 2022/04/18 18:12 
 | 
     */ 
 | 
    private void getpartentList( List<DepartmentExtListVO> list ,Integer departmentid,Integer type) { 
 | 
        for(int i=0;i<list.size();i++){ 
 | 
            DepartmentExtListVO del=list.get(i); 
 | 
            if(Constants.equalsInteger(del.getId(),departmentid)){ 
 | 
                if(Constants.equalsInteger(del.getType(),type)){ 
 | 
                    departmentExtListVO=del; 
 | 
                }else{ 
 | 
                    this.getpartentList( list ,del.getParentId() ,type); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 手动同步钉钉数据 
 | 
     */ 
 | 
    @Override 
 | 
    public void syncDingDingDepartment(){ 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        //读取对应部门信息 
 | 
        List<Department> departmentList = DingDingSyncUtil.getDingDingDepartListInfo 
 | 
                (user.getCompanyUser(),null); 
 | 
        if(departmentList.size()>Constants.ZERO){ 
 | 
            for (Department department:departmentList ) { 
 | 
                this.dealDepartmentData(department,user); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void dealDepartmentData(Department department,LoginUserInfo user){ 
 | 
        //初始化此部门下所有用户集合 
 | 
        List<CompanyUser> companyUserList = new ArrayList<>(); 
 | 
        Company company = companyExtMapper.selectById(user.getCompany().getId()); 
 | 
        //同步初始下标 
 | 
        Long cursor = 0L; 
 | 
        //是否存在下一页 
 | 
        Boolean hasMore = true; 
 | 
        while(hasMore){ 
 | 
            //同步部门下所有用户信息 
 | 
            CompanyUserDTO companyUserDTO = DingDingSyncUtil.getDingDingDepartUserListInfo(company,department,cursor); 
 | 
            if(companyUserDTO.getCompanyUserList().size()>Constants.ZERO){ 
 | 
                companyUserList.addAll(companyUserDTO.getCompanyUserList()); 
 | 
            } 
 | 
            cursor = companyUserDTO.getNextCursor(); 
 | 
            hasMore = companyUserDTO.getHasMore(); 
 | 
        } 
 | 
        //查询部门是否已存在 
 | 
        if(departmentExtMapper.selectCount(new QueryWrapper<Department>().eq("NAME",department.getName()) 
 | 
                .eq("COMPANY_ID",department.getCompanyId()) 
 | 
                .eq("DELETED",Constants.ZERO) 
 | 
        )<Constants.ZERO){ 
 | 
            departmentExtMapper.insert(department); 
 | 
        } 
 | 
        else{ 
 | 
            department = departmentExtMapper.selectOne(new QueryWrapper<Department>() 
 | 
                    .eq("NAME",department.getName()) 
 | 
                    .eq("COMPANY_ID",department.getCompanyId()) 
 | 
                    .eq("DELETED",Constants.ZERO) 
 | 
                    .last("limit 1")); 
 | 
        } 
 | 
        //循环处理部门用户数据 
 | 
        if(companyUserList.size()>Constants.ZERO){ 
 | 
            for (CompanyUser companyUser:companyUserList) { 
 | 
                //查询手机号是否存在用户 
 | 
                SystemUser systemUser = systemUserMapper.selectOne(new QueryWrapper<SystemUser>() 
 | 
                        .eq("MOBILE",companyUser.getPhone()) 
 | 
                        .eq("DELETED",Constants.ZERO) 
 | 
                        .last(" limit 1  ") 
 | 
                ); 
 | 
                if(Objects.isNull(systemUser)){ 
 | 
                    systemUser = new SystemUser(); 
 | 
                    systemUser.setCreateUser(user.getId()); 
 | 
                    systemUser.setCreateTime(new Date()); 
 | 
                    systemUser.setUsername(companyUser.getPhone()); 
 | 
                    systemUser.setRealname(companyUser.getName()); 
 | 
                    systemUser.setType(Constants.ONE); 
 | 
                    systemUserMapper.insert(systemUser); 
 | 
                } 
 | 
                if(StringUtils.isNotBlank(companyUser.getPosition())){ 
 | 
                    //查询岗位是否已存在 
 | 
                    CompanyPosition companyPosition = companyPositionExtMapper.selectOne(new QueryWrapper<CompanyPosition>() 
 | 
                            .eq("COMPANY_ID",company.getId()) 
 | 
                            .eq("NAME",companyUser.getPosition()) 
 | 
                            .eq("DELETED",Constants.ZERO) 
 | 
                            .eq("STATUS",Constants.ZERO) 
 | 
                            .last(" limit 1 ") 
 | 
                    ); 
 | 
                    if(Objects.isNull(companyPosition)){ 
 | 
                        companyPosition = new CompanyPosition(); 
 | 
                        companyPosition.setDeleted(Constants.ZERO); 
 | 
                        companyPosition.setStatus(Constants.ZERO); 
 | 
                        companyPosition.setCreateTime(new Date()); 
 | 
                        companyPosition.setCreateUser(user.getId()); 
 | 
                        companyPosition.setName(companyUser.getPosition()); 
 | 
                        companyPosition.setCompanyId(company.getId()); 
 | 
                        companyPositionExtMapper.insert(companyPosition); 
 | 
                    } 
 | 
                    companyUser.setPositionId(companyPosition.getId()); 
 | 
                } 
 | 
  
 | 
  
 | 
                //查询 companyUser是否已存在 
 | 
                if(companyUserExtMapper.selectCount(new QueryWrapper<CompanyUser>() 
 | 
                        .eq("DEPARTMENT_ID",companyUser.getDepartmentId()) 
 | 
                        .eq("USER_ID",systemUser.getId()) 
 | 
                        .eq("STATUS",Constants.ZERO) 
 | 
                        .eq("PHONE",companyUser.getPhone()) 
 | 
                )<=Constants.ZERO){ 
 | 
  
 | 
                    companyUser.setDepartmentId(department.getId()); 
 | 
                    companyUser.setUserId(systemUser.getId()); 
 | 
                    companyUserExtMapper.insert(companyUser); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 订阅部门信息 
 | 
     * @param departmentId 
 | 
     * @param companyId 
 | 
     * @param optType add = 新增 edit = 修改 delete = 删除 
 | 
     */ 
 | 
    @Override 
 | 
    public Department syncDepartment(Long departmentId,Integer companyId,String optType){ 
 | 
        Company company = companyExtMapper.selectById(companyId); 
 | 
        String accessToken = companyExtService.getDingdingToken(companyId); 
 | 
        Department  department = DingDingSyncUtil.getDingDingDepartInfo(company,departmentId,accessToken); 
 | 
        //公司级企业信息 
 | 
        Department comDepartment = departmentExtMapper.selectOne(new QueryWrapper<Department>() 
 | 
                .eq("TYPE",Constants.DEPART_TYPE.com) 
 | 
                .eq("COMPANY_ID",companyId) 
 | 
                .eq("DELETED",Constants.ZERO).last("limit 1")); 
 | 
        if(Objects.isNull(comDepartment)){ 
 | 
            department.setRootId(comDepartment.getRootId()); 
 | 
            department.setValidTime(comDepartment.getValidTime()); 
 | 
        } 
 | 
        //查询部门父级是否存在 
 | 
        if(!Objects.isNull(department.getParentId())){ 
 | 
           Department parentDepartment = departmentExtMapper.selectOne(new QueryWrapper<Department>() 
 | 
                   .eq("DD_DEPT_ID",department.getParentId()).last("limit 1")); 
 | 
           if(!Objects.isNull(parentDepartment)){ 
 | 
               department.setParentId(parentDepartment.getId()); 
 | 
           } 
 | 
        }else{ 
 | 
            //若无父级部门,则默认归属公司部门 type = 0 
 | 
            if(!Objects.isNull(comDepartment)){ 
 | 
                department.setParentId(comDepartment.getId()); 
 | 
            }else{ 
 | 
                department.setParentId(null); 
 | 
            } 
 | 
        } 
 | 
        if(optType.equals("add")){ 
 | 
            if(departmentExtMapper.selectCount(new QueryWrapper<Department>() 
 | 
                    .eq("NAME",department.getName()) 
 | 
                    .eq("COMPANY_ID",department.getCompanyId()) 
 | 
                    .eq("DELETED",Constants.ZERO) 
 | 
            )<=Constants.ZERO){ 
 | 
                departmentExtMapper.insert(department); 
 | 
            }else{ 
 | 
                Department dbDepartment = departmentExtMapper.selectOne(new QueryWrapper<Department>() 
 | 
                        .eq("NAME",department.getName()) 
 | 
                        .eq("COMPANY_ID",department.getCompanyId()) 
 | 
                        .eq("DELETED",Constants.ZERO)); 
 | 
                dbDepartment.setDdDeptId(department.getDdDeptId()); 
 | 
                dbDepartment.setUpdateTime(new Date()); 
 | 
                departmentExtMapper.updateById(dbDepartment); 
 | 
            } 
 | 
        }else if(optType.equals("edit")){ 
 | 
            Department dbDepartment = departmentExtMapper.selectOne(new QueryWrapper<Department>().eq("DD_DEPT_ID",departmentId)); 
 | 
            if(!Objects.isNull(dbDepartment)){ 
 | 
                dbDepartment.setName(department.getName()); 
 | 
                dbDepartment.setParentId(department.getParentId()); 
 | 
                dbDepartment.setUpdateTime(new Date()); 
 | 
                departmentExtMapper.updateById(dbDepartment); 
 | 
            } 
 | 
        }else if(optType.equals("delete")){ 
 | 
            Department dbDepartment = departmentExtMapper.selectOne(new QueryWrapper<Department>().eq("DD_DEPT_ID",departmentId)); 
 | 
            if(!Objects.isNull(dbDepartment)){ 
 | 
                dbDepartment.setDeleted(Constants.ONE); 
 | 
                dbDepartment.setUpdateTime(new Date()); 
 | 
                departmentExtMapper.updateById(dbDepartment); 
 | 
            } 
 | 
        } 
 | 
        return department; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void syncDelDepartment(Long departmentId){ 
 | 
        log.debug("钉钉部门信息同步删除业务=>同步钉钉部门主键【"+departmentId+"】"); 
 | 
        Department dbDepartment = departmentExtMapper.selectOne(new QueryWrapper<Department>().eq("DD_DEPT_ID",departmentId)); 
 | 
        if(!Objects.isNull(dbDepartment)){ 
 | 
            dbDepartment.setDeleted(Constants.ONE); 
 | 
            dbDepartment.setUpdateTime(new Date()); 
 | 
            departmentExtMapper.updateById(dbDepartment); 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |