package doumeemes.service.ext.impl; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.github.pagehelper.PageHelper; 
 | 
import com.github.pagehelper.PageInfo; 
 | 
import doumeemes.core.model.LoginUserInfo; 
 | 
import doumeemes.core.model.PageData; 
 | 
import doumeemes.core.model.PageWrap; 
 | 
import doumeemes.core.utils.Constants; 
 | 
import doumeemes.core.utils.dingding.DingDingSyncUtil; 
 | 
import doumeemes.dao.business.model.Company; 
 | 
import doumeemes.dao.business.model.CompanyPosition; 
 | 
import doumeemes.dao.business.model.CompanyUser; 
 | 
import doumeemes.dao.business.model.Department; 
 | 
import doumeemes.dao.ext.CompanyExtMapper; 
 | 
import doumeemes.dao.ext.CompanyPositionExtMapper; 
 | 
import doumeemes.dao.ext.CompanyUserExtMapper; 
 | 
import doumeemes.dao.ext.dto.QueryCompanyUserExtDTO; 
 | 
import doumeemes.dao.ext.vo.CompanyUserExtListVO; 
 | 
import doumeemes.dao.ext.vo.DepartmentExtListVO; 
 | 
import doumeemes.dao.system.SystemUserMapper; 
 | 
import doumeemes.dao.system.model.SystemRole; 
 | 
import doumeemes.dao.system.model.SystemUser; 
 | 
import doumeemes.service.ext.CompanyExtService; 
 | 
import doumeemes.service.ext.CompanyUserExtService; 
 | 
import doumeemes.service.ext.DepartmentExtService; 
 | 
import doumeemes.service.ext.ProceduresExtService; 
 | 
import doumeemes.service.system.SystemRoleService; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.shiro.SecurityUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.context.annotation.Lazy; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
import java.util.Objects; 
 | 
  
 | 
/** 
 | 
 * 组织人员关联信息Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2022/04/20 10:59 
 | 
 */ 
 | 
@Service 
 | 
public class CompanyUserExtServiceImpl implements CompanyUserExtService { 
 | 
  
 | 
    @Autowired 
 | 
    private CompanyUserExtMapper companyUserExtMapper; 
 | 
    @Autowired 
 | 
    private DepartmentExtService departmentExtService; 
 | 
    @Autowired 
 | 
    private CompanyExtMapper companyExtMapper; 
 | 
    @Autowired 
 | 
    private SystemUserMapper systemUserMapper; 
 | 
    @Lazy 
 | 
    @Autowired 
 | 
    private SystemRoleService systemRoleService; 
 | 
    @Autowired 
 | 
    private ProceduresExtService proceduresExtService; 
 | 
    @Autowired 
 | 
    private CompanyPositionExtMapper companyPositionExtMapper; 
 | 
    @Autowired 
 | 
    private CompanyExtService companyExtService; 
 | 
  
 | 
    @Override 
 | 
    public PageData<CompanyUserExtListVO> findPage(PageWrap<QueryCompanyUserExtDTO> pageWrap) { 
 | 
       pageWrap.getModel().setDeleted(Constants.ZERO); 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //如果是企业级用户,只能看自己企业的部门数据 
 | 
            pageWrap.getModel().setCompanyId(user.getCompany().getId()); 
 | 
            pageWrap.getModel().setRootDepartId(user.getRootDepartment().getId()); 
 | 
        }else{ 
 | 
            return PageData.from(new PageInfo<>(new ArrayList<>())); 
 | 
        } 
 | 
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        List<CompanyUserExtListVO> result = companyUserExtMapper.selectList(pageWrap.getModel()); 
 | 
        if(result!=null && user!=null){ 
 | 
            SystemRole role = new SystemRole(); 
 | 
            role.setCompanyId(user.getCompany().getId()); 
 | 
            role.setType(Constants.ROLETYPE.com); 
 | 
            role.setDeleted(Boolean.FALSE); 
 | 
            for(CompanyUserExtListVO u : result){ 
 | 
                //查询工序名称 
 | 
                u.setProcedureNames(proceduresExtService.getNamesByIdStr(user.getCompany().getId(),u.getProcedureIds())); 
 | 
                // 查询用户角色列表 
 | 
                u.setRoles(systemRoleService.findByUserModel(u.getUserId(),role)); 
 | 
            } 
 | 
        } 
 | 
        return PageData.from(new PageInfo<>(result)); 
 | 
    } 
 | 
    @Override 
 | 
    public  List<CompanyUserExtListVO> allUser(QueryCompanyUserExtDTO pageWrap){ 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //如果是企业级用户,只能看自己企业的部门数据 
 | 
            pageWrap.setCompanyId(user.getCompany().getId()); 
 | 
            pageWrap.setRootDepartId(user.getRootDepartment().getId()); 
 | 
            if(pageWrap.getDepartmentId()!=null){ 
 | 
                DepartmentExtListVO t = new DepartmentExtListVO(); 
 | 
                t.setCompanyId(user.getCompany().getId()); 
 | 
                t.setId(pageWrap.getDepartmentId()); 
 | 
                pageWrap.setDepartIds(departmentExtService.userDataPermissonList(t, true)); 
 | 
            } 
 | 
            if(pageWrap.getDepartIds()!=null && pageWrap.getDepartIds().size()>0){ 
 | 
                pageWrap.setDepartmentId(null); 
 | 
            } 
 | 
            pageWrap.setDeleted(null); 
 | 
        }else{ 
 | 
            return  new ArrayList<>() ; 
 | 
        } 
 | 
        pageWrap.setDeleted(Constants.ZERO); 
 | 
        List<CompanyUserExtListVO> result = companyUserExtMapper.selectList(pageWrap ); 
 | 
        return  result; 
 | 
    } 
 | 
    @Override 
 | 
    public CompanyUserExtListVO selectOne(QueryCompanyUserExtDTO c) { 
 | 
        CompanyUserExtListVO result = companyUserExtMapper.selectModel(c); 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(result!=null && user !=null && user.getCompany()!=null){ 
 | 
            //查询工序名称 
 | 
            result.setProcedureNames(proceduresExtService.getNamesByIdStr(user.getCompany().getId(),result.getProcedureIds())); 
 | 
        } 
 | 
        return result; 
 | 
    } 
 | 
    @Override 
 | 
    public CompanyUserExtListVO selectById(Integer proUserId){ 
 | 
        QueryCompanyUserExtDTO c = new  QueryCompanyUserExtDTO(); 
 | 
        c.setId(proUserId); 
 | 
        CompanyUserExtListVO result = companyUserExtMapper.selectModel(c); 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(result!=null && user !=null){ 
 | 
            //查询工序名称 
 | 
            result.setProcedureNames(proceduresExtService.getNamesByIdStr(user.getCompany().getId(),result.getProcedureIds())); 
 | 
        } 
 | 
        return result; 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public  List<CompanyUserExtListVO> getUserDevice(QueryCompanyUserExtDTO pageWrap){ 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            //如果是企业级用户,只能看自己企业的部门数据 
 | 
            pageWrap.setCompanyId(user.getCompany().getId()); 
 | 
        }else{ 
 | 
            return  new ArrayList<>() ; 
 | 
        } 
 | 
        List<CompanyUserExtListVO> result = companyUserExtMapper.getUserDevice(pageWrap ); 
 | 
        return  result; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    /** 
 | 
     * 订阅用户信息变动 
 | 
     * @param ddUserId 
 | 
     * @param companyId 
 | 
     * @param optType add = 新增 edit = 修改 delete = 删除 
 | 
     */ 
 | 
    @Override 
 | 
    public void syncCompanyUser(Long ddUserId,Integer companyId,String optType){ 
 | 
        Company company = companyExtMapper.selectById(companyId); 
 | 
        String accessToken = companyExtService.getDingdingToken(companyId); 
 | 
        CompanyUser companyUser = DingDingSyncUtil.getDingDingUserInfo(ddUserId.toString(),accessToken); 
 | 
        if(optType.equals("add")){ 
 | 
             CompanyUser dbCompanyUser = companyUserExtMapper.selectOne(new QueryWrapper<CompanyUser>() 
 | 
                     .and( i -> i.eq("DD_USERID", ddUserId).or() 
 | 
                             .eq("PHONE", companyUser.getPhone())) 
 | 
                     .apply(" COM_DEPART_ID in ( select d.id from department d where d.COMPANY_ID = '"+companyId+"' ) ") 
 | 
                     .last(" limit 1 ") 
 | 
             ); 
 | 
             if(Objects.isNull(dbCompanyUser)){ 
 | 
                //查询手机号是否存在用户 
 | 
                 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.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.setName(companyUser.getPosition()); 
 | 
                         companyPosition.setCompanyId(company.getId()); 
 | 
                         companyPositionExtMapper.insert(companyPosition); 
 | 
                     } 
 | 
                     companyUser.setPositionId(companyPosition.getId()); 
 | 
                 } 
 | 
                 if(Objects.isNull(companyUser.getDepartmentId())){ 
 | 
                     //查询部门信息是否存在 
 | 
                     Department queryDepartment = new Department(); 
 | 
                     queryDepartment.setDdDeptId(Long.valueOf(companyUser.getDepartmentId())); 
 | 
                     queryDepartment.setCompanyId(company.getId()); 
 | 
                     Department department = departmentExtService.findOne(queryDepartment); 
 | 
                     if(Objects.isNull(department)){ 
 | 
                           department = departmentExtService.syncDepartment(Long.valueOf(companyUser.getDepartmentId()),companyId,"add"); 
 | 
                     } 
 | 
                     companyUser.setDepartmentId(department.getId()); 
 | 
                 } 
 | 
                 companyUser.setUserId(systemUser.getId()); 
 | 
                 companyUserExtMapper.insert(companyUser); 
 | 
             } 
 | 
        }else if(optType.equals("edit")){ 
 | 
            CompanyUser dbCompanyUser = companyUserExtMapper.selectOne(new QueryWrapper<CompanyUser>() 
 | 
                    .eq("DD_USERID", ddUserId) 
 | 
                    .apply(" COM_DEPART_ID in ( select d.id from department d where d.COMPANY_ID = '"+companyId+"' ) ") 
 | 
                    .last(" limit 1 ") 
 | 
            ); 
 | 
            if(!Objects.isNull(dbCompanyUser)){ 
 | 
                companyUser.setDeleted(Constants.ZERO); 
 | 
                companyUser.setCreateTime(new Date()); 
 | 
                companyUser.setName(dbCompanyUser.getName()); 
 | 
                companyUser.setPhone(dbCompanyUser.getPhone()); 
 | 
                companyUser.setPhoneAuthStatus(Integer.toString(Constants.ZERO)); 
 | 
                if(Objects.isNull(companyUser.getDepartmentId())){ 
 | 
                    //查询部门信息是否存在 
 | 
                    Department queryDepartment = new Department(); 
 | 
                    queryDepartment.setDdDeptId(Long.valueOf(companyUser.getDepartmentId())); 
 | 
                    queryDepartment.setCompanyId(company.getId()); 
 | 
                    Department department = departmentExtService.findOne(queryDepartment); 
 | 
                    if(Objects.isNull(department)){ 
 | 
                        department = departmentExtService.syncDepartment(Long.valueOf(companyUser.getDepartmentId()),companyId,"add"); 
 | 
                    } 
 | 
                    companyUser.setDepartmentId(department.getId()); 
 | 
                } 
 | 
                companyUserExtMapper.updateById(companyUser); 
 | 
            } 
 | 
  
 | 
        }else if(optType.equals("delete")){ 
 | 
            CompanyUser dbCompanyUser = companyUserExtMapper.selectOne(new QueryWrapper<CompanyUser>() 
 | 
                    .eq("DD_USERID", ddUserId) 
 | 
                    .apply(" COM_DEPART_ID in ( select d.id from department d where d.COMPANY_ID = '"+companyId+"' ) ") 
 | 
                    .last(" limit 1 ") 
 | 
            ); 
 | 
            if(!Objects.isNull(dbCompanyUser)){ 
 | 
                dbCompanyUser.setDeleted(Constants.ONE); 
 | 
                companyUserExtMapper.updateById(companyUser); 
 | 
            } 
 | 
        } 
 | 
  
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
} 
 |