|  |  | 
 |  |  | package com.doumee.service.business.impl; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | 
 |  |  | import com.doumee.core.constants.ResponseStatus; | 
 |  |  | import com.doumee.core.exception.BusinessException; | 
 |  |  | import com.doumee.core.model.LoginUserInfo; | 
 |  |  | 
 |  |  | import com.doumee.core.utils.Constants; | 
 |  |  | import com.doumee.core.utils.Utils; | 
 |  |  | import com.doumee.dao.business.CompanyDepartmentMapper; | 
 |  |  | import com.doumee.dao.business.dto.UpdateSortDTO; | 
 |  |  | import com.doumee.dao.business.model.Company; | 
 |  |  | import com.doumee.dao.business.model.CompanyDepartment; | 
 |  |  | import com.doumee.dao.business.model.Member; | 
 |  |  | import com.doumee.dao.system.SystemUserMapper; | 
 |  |  | import com.doumee.dao.system.model.SystemUser; | 
 |  |  | import com.doumee.dao.system.vo.DepartmentTree; | 
 |  |  | 
 |  |  |  | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.UUID; | 
 |  |  | import java.util.Objects; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 企业信息表Service实现 | 
 |  |  | 
 |  |  |     private CompanyDepartmentMapper companyDepartmentMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private SystemUserMapper systemUserMapper; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public  List<CompanyDepartment> departTree(Integer type){ | 
 |  |  |         LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
 |  |  |         MPJLambdaWrapper<CompanyDepartment> queryWrapper = new MPJLambdaWrapper<>(); | 
 |  |  |         queryWrapper.selectAll(Company.class); | 
 |  |  |         queryWrapper.select("t2.realname",CompanyDepartment::getEditorName); | 
 |  |  |         queryWrapper.selectAll(CompanyDepartment.class); | 
 |  |  |         queryWrapper.select("t3.realname",CompanyDepartment::getEditorName); | 
 |  |  |         queryWrapper.select("t2.realname",CompanyDepartment::getHeadName); | 
 |  |  |         queryWrapper.select("t2.mobile",CompanyDepartment::getHeadPhone); | 
 |  |  |         queryWrapper.select("t1.name",CompanyDepartment::getParentName); | 
 |  |  | 
 |  |  |         queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,CompanyDepartment::getEditor); | 
 |  |  |         queryWrapper.eq(CompanyDepartment::getIsdeleted,Constants.ZERO); | 
 |  |  |         queryWrapper.eq(type!=null,CompanyDepartment::getType,type); | 
 |  |  |         queryWrapper.orderByAsc(true,"t.sortnum"); | 
 |  |  |         //如果是企业/商户 只查询自身组织下的数据 | 
 |  |  |         if( !Constants.equalsInteger(type,Constants.ZERO)){ | 
 |  |  |             queryWrapper.eq(CompanyDepartment::getCompanyId,loginUserInfo.getCompanyId()); | 
 |  |  |         }else{ | 
 |  |  |             queryWrapper.eq(CompanyDepartment::getType,type); | 
 |  |  |         } | 
 |  |  |         queryWrapper.last(" order by  t.sortnum asc  "); | 
 |  |  |         List<CompanyDepartment> companyList = companyDepartmentMapper.selectJoinList(CompanyDepartment.class,queryWrapper); | 
 |  |  |         DepartmentTree treeBuild = new DepartmentTree(companyList); | 
 |  |  |         companyList = treeBuild.buildTree(); | 
 |  |  |         return companyList; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public void updateSort(UpdateSortDTO dto) { | 
 |  |  |         CompanyDepartment companyDepartment = companyDepartmentMapper.selectById(dto.getId()); | 
 |  |  |         if(Objects.isNull(companyDepartment)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         List<CompanyDepartment> companyDepartmentPool; | 
 |  |  |         if (companyDepartment.getParentId() == null) { | 
 |  |  |             companyDepartmentPool = companyDepartmentMapper.selectList(new QueryWrapper<CompanyDepartment>().lambda() | 
 |  |  |                     .eq(CompanyDepartment::getIsdeleted,Constants.ZERO) | 
 |  |  |                     .isNull(CompanyDepartment::getParentId) | 
 |  |  |                     .orderByAsc(CompanyDepartment::getSortnum) | 
 |  |  |             ); | 
 |  |  |         } else { | 
 |  |  |             companyDepartmentPool = companyDepartmentMapper.selectList(new QueryWrapper<CompanyDepartment>().lambda() | 
 |  |  |                     .eq(CompanyDepartment::getIsdeleted,Constants.ZERO) | 
 |  |  |                     .eq(CompanyDepartment::getParentId,companyDepartment.getParentId()) | 
 |  |  |                     .orderByAsc(CompanyDepartment::getSortnum) | 
 |  |  |             ); | 
 |  |  |         } | 
 |  |  |         int currentMenuIndex = 0; | 
 |  |  |         for (int i = 0; i < companyDepartmentPool.size(); i++) { | 
 |  |  |             if (companyDepartmentPool.get(i).getId().equals(dto.getId())) { | 
 |  |  |                 currentMenuIndex = i; | 
 |  |  |                 break; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         // 上移 | 
 |  |  |         if ("top".equals(dto.getDirection())) { | 
 |  |  |             if (currentMenuIndex - 1 < 0) { | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |             CompanyDepartment preMenu = companyDepartmentPool.get(currentMenuIndex - 1); | 
 |  |  |             companyDepartmentPool.remove(currentMenuIndex - 1); | 
 |  |  |             companyDepartmentPool.add(currentMenuIndex, preMenu); | 
 |  |  |         } | 
 |  |  |         // 下移 | 
 |  |  |         else { | 
 |  |  |             if (currentMenuIndex + 1 > companyDepartmentPool.size() - 1) { | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |             CompanyDepartment nextMenu = companyDepartmentPool.remove(currentMenuIndex + 1); | 
 |  |  |             companyDepartmentPool.add(currentMenuIndex, nextMenu); | 
 |  |  |         } | 
 |  |  |         for (int i = 0; i < companyDepartmentPool.size(); i++) { | 
 |  |  |             companyDepartmentPool.get(i).setSortnum(i); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         for (CompanyDepartment updCompanyDepartment:companyDepartmentPool) { | 
 |  |  |             companyDepartmentMapper.updateById(updCompanyDepartment); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public Integer create(CompanyDepartment company) { | 
 |  |  |  | 
 |  |  | 
 |  |  |         if(StringUtils.isBlank(company.getName())){ | 
 |  |  |             throw  new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         if(company.getType()==null || !(company.getType() ==0 || company.getType() ==1)){ | 
 |  |  |         if(company.getType()==null || !(company.getType() ==0 || company.getType() ==1 || company.getType() ==2)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,组织类型不正确,请按要求填写~"); | 
 |  |  |         } | 
 |  |  |         int type = Constants.ZERO;//默认平台组织 | 
 |  |  | 
 |  |  |         //更新的companyPath | 
 |  |  |         String newName = model.getNamePath().replace(model.getName(),company.getName()); | 
 |  |  |         companyDepartmentMapper.update(null,new UpdateWrapper<CompanyDepartment>().lambda() | 
 |  |  |                 .setSql("company_name_path=REPLACE(name_path,'"+ model.getNamePath()+"','"+newName+"')") | 
 |  |  |                 .setSql("name_path = REPLACE(name_path,'"+ model.getNamePath()+"','"+newName+"')") | 
 |  |  |                 .likeRight(CompanyDepartment::getIdPath,model.getIdPath())); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         QueryWrapper<CompanyDepartment> wrapper = new QueryWrapper<>(companyDepartment); | 
 |  |  |         return companyDepartmentMapper.selectCount(wrapper); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | } |