| 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); | 
|             } | 
|         } | 
|   | 
|   | 
|     } | 
|   | 
|   | 
|   | 
|   | 
| } |