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 findPage(PageWrap 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 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 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 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 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 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() .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() .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() .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() .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() .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); } } } }