package com.doumee.service.business.impl;
|
|
import com.doumee.core.constants.ResponseStatus;
|
import com.doumee.core.exception.BusinessException;
|
import com.doumee.core.model.LoginUserInfo;
|
import com.doumee.core.model.PageData;
|
import com.doumee.core.model.PageWrap;
|
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.system.SystemUserMapper;
|
import com.doumee.dao.system.model.SystemUser;
|
import com.doumee.dao.system.vo.DepartmentTree;
|
import com.doumee.service.business.CompanyDepartmentService;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.shiro.SecurityUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Objects;
|
|
/**
|
* 企业信息表Service实现
|
* @author 江蹄蹄
|
* @date 2024/10/28 19:16
|
*/
|
@Service
|
public class CompanyDepartmentServiceImpl implements CompanyDepartmentService {
|
|
@Autowired
|
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(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.select("t1.name_path",CompanyDepartment::getParentCompanyPath);
|
queryWrapper.select("t1.type",CompanyDepartment::getParentType);
|
queryWrapper.leftJoin(CompanyDepartment.class,CompanyDepartment::getId,CompanyDepartment::getParentId);
|
queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,CompanyDepartment::getHeadId);
|
queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,CompanyDepartment::getEditor);
|
queryWrapper.eq(CompanyDepartment::getIsdeleted,Constants.ZERO);
|
queryWrapper.eq(type!=null,CompanyDepartment::getType,type);
|
//如果是企业/商户 只查询自身组织下的数据
|
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) {
|
|
LoginUserInfo user = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
|
if(StringUtils.isBlank(company.getName())){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
if(company.getType()==null || !(company.getType() ==0 || company.getType() ==1 || company.getType() ==2)){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,组织类型不正确,请按要求填写~");
|
}
|
int type = Constants.ZERO;//默认平台组织
|
if(Constants.equalsInteger(user.getType(),Constants.UserType.COMPANY.getKey())){
|
//如果企业用户
|
type = Constants.ONE;
|
}else if(Constants.equalsInteger(user.getType(),Constants.UserType.ZHUBO.getKey())){
|
//如果是商户
|
type = Constants.TWO;
|
}
|
//查询名称不能重复
|
if(companyDepartmentMapper.selectCount(new QueryWrapper<CompanyDepartment>().lambda()
|
.eq(CompanyDepartment::getName,company.getName())
|
.eq(CompanyDepartment::getType,type)
|
.eq(CompanyDepartment::getIsdeleted, Constants.ZERO)) >0){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,组织名称不能重复~");
|
}
|
company.setCompanyId(user.getCompanyId());//所属企业编码
|
company.setIdPath(company.getId()+"/");//名称路径
|
company.setNamePath(company.getName());//名称路径
|
String idPath = "";
|
if(company.getParentId() !=null){
|
CompanyDepartment parent = findById(company.getParentId());
|
if(parent == null || Constants.equalsInteger(parent.getIsdeleted(),Constants.ONE)
|
|| !Constants.equalsInteger(parent.getType(),type)){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,父级组织信息不存在~");
|
}
|
idPath = parent.getIdPath();
|
company.setIdPath(parent.getIdPath()+company.getId()+"/");
|
company.setNamePath(parent.getNamePath()+"/"+company.getName());
|
}
|
company.setCreateDate(new Date());
|
company.setCreator(user.getId());
|
company.setIsdeleted(Constants.ZERO);
|
company.setStatus(Constants.ZERO);
|
company.setSortnum(0);//默认最上面
|
company.setEditDate(company.getCreateDate());
|
company.setEditor(company.getCreator());
|
companyDepartmentMapper.insert(company);
|
//下发海康安防平台
|
|
CompanyDepartment com = new CompanyDepartment();
|
com.setId(company.getId());
|
com.setIdPath(idPath+company.getId()+"/");
|
companyDepartmentMapper.updateById(com);
|
return company.getId();
|
}
|
|
@Override
|
public void deleteById(Integer id) {
|
LoginUserInfo user = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
|
|
int type = Constants.ZERO;//默认平台组织
|
if(Constants.equalsInteger(user.getType(),Constants.UserType.COMPANY.getKey())){
|
//如果企业用户
|
type = Constants.ONE;
|
}else if(Constants.equalsInteger(user.getType(),Constants.UserType.ZHUBO.getKey())){
|
//如果是商户
|
type = Constants.TWO;
|
}
|
CompanyDepartment model = findById(id);
|
if(model == null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)
|
|| !Constants.equalsInteger(model.getType(),type)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "对不起,该组织信息不存在!");
|
}
|
|
if(companyDepartmentMapper.selectCount(new QueryWrapper<CompanyDepartment>().lambda()
|
.eq(CompanyDepartment::getParentId,id)
|
.eq(CompanyDepartment::getType,type)
|
.eq(CompanyDepartment::getIsdeleted, Constants.ZERO)) >0){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,该组织存在下级组织,无法进行该操作!");
|
}
|
if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda()
|
.eq(SystemUser::getDepartmentId,id)
|
.eq(SystemUser::getType,type)
|
.eq(SystemUser::getDeleted, Boolean.FALSE)) >0){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,该组织下存在用户信息,无法进行该操作!");
|
}
|
|
companyDepartmentMapper.update(null, new UpdateWrapper<CompanyDepartment>().lambda()
|
.eq(CompanyDepartment::getId,id)
|
.set(CompanyDepartment::getIsdeleted,Constants.ONE)
|
.set(CompanyDepartment::getEditor,user.getId())
|
.set(CompanyDepartment::getEditDate,new Date())
|
);
|
}
|
|
@Override
|
public void delete(CompanyDepartment companyDepartment) {
|
LoginUserInfo user = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
|
|
int type = Constants.ZERO;//默认平台组织
|
if(Constants.equalsInteger(user.getType(),Constants.UserType.COMPANY.getKey())){
|
//如果企业用户
|
type = Constants.ONE;
|
}else if(Constants.equalsInteger(user.getType(),Constants.UserType.ZHUBO.getKey())){
|
//如果是商户
|
type = Constants.TWO;
|
}
|
CompanyDepartment model = findById(companyDepartment.getId());
|
if(model == null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)
|
|| !Constants.equalsInteger(model.getType(),type)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "对不起,该组织信息不存在!");
|
}
|
|
if(companyDepartmentMapper.selectCount(new QueryWrapper<CompanyDepartment>().lambda()
|
.eq(CompanyDepartment::getParentId,companyDepartment.getId())
|
.eq(CompanyDepartment::getType,type)
|
.eq(CompanyDepartment::getIsdeleted, Constants.ZERO)) >0){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,该组织存在下级组织,无法进行该操作!");
|
}
|
if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda()
|
.eq(SystemUser::getDepartmentId,companyDepartment.getId())
|
.eq(SystemUser::getType,type)
|
.eq(SystemUser::getDeleted, Boolean.FALSE)) >0){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,该组织下存在用户信息,无法进行该操作!");
|
}
|
|
companyDepartmentMapper.update(null, new UpdateWrapper<CompanyDepartment>().lambda()
|
.eq(CompanyDepartment::getId,companyDepartment.getId())
|
.set(CompanyDepartment::getIsdeleted,Constants.ONE)
|
.set(CompanyDepartment::getEditor,user.getId())
|
.set(CompanyDepartment::getEditDate,new Date())
|
);
|
}
|
|
@Override
|
public void deleteByIdInBatch(List<Integer> ids) {
|
if (CollectionUtils.isEmpty(ids)) {
|
return;
|
}
|
for(Integer id :ids){
|
deleteById(id);
|
}
|
}
|
|
@Override
|
public void updateById(CompanyDepartment company) {
|
|
if(company.getId() == null|| StringUtils.isBlank(company.getName())){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST);
|
}
|
if(company.getType()!=null && !(company.getType() ==0 || company.getType() ==1)){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,组织类型不正确,请按要求填写~");
|
}
|
LoginUserInfo user = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
|
|
int type = Constants.ZERO;//默认平台组织
|
if(Constants.equalsInteger(user.getType(),Constants.UserType.COMPANY.getKey())){
|
//如果企业用户
|
type = Constants.ONE;
|
}else if(Constants.equalsInteger(user.getType(),Constants.UserType.ZHUBO.getKey())){
|
//如果是商户
|
type = Constants.TWO;
|
}
|
CompanyDepartment model = findById(company.getId());
|
if(model == null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)
|
|| !Constants.equalsInteger(model.getType(),type)){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "对不起,该组织信息不存在!");
|
}
|
//查询名称不能重复
|
if(companyDepartmentMapper.selectCount(new QueryWrapper<CompanyDepartment>().lambda()
|
.eq(CompanyDepartment::getName,company.getName())
|
.eq(CompanyDepartment::getType,type)
|
.ne(CompanyDepartment::getId,company.getId())
|
.eq(CompanyDepartment::getIsdeleted,Constants.ZERO)) >0){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,组织名称不能重复~");
|
}
|
company.setEditDate(new Date());
|
company.setEditor(user.getId());
|
company.setParentId(null);//不支持修改父级
|
companyDepartmentMapper.updateById(company);
|
//更新的companyPath
|
String newName = model.getNamePath().replace(model.getName(),company.getName());
|
companyDepartmentMapper.update(null,new UpdateWrapper<CompanyDepartment>().lambda()
|
.setSql("name_path = REPLACE(name_path,'"+ model.getNamePath()+"','"+newName+"')")
|
.likeRight(CompanyDepartment::getIdPath,model.getIdPath()));
|
|
}
|
|
@Override
|
public void updateByIdInBatch(List<CompanyDepartment> companyDepartments) {
|
if (CollectionUtils.isEmpty(companyDepartments)) {
|
return;
|
}
|
for (CompanyDepartment companyDepartment: companyDepartments) {
|
this.updateById(companyDepartment);
|
}
|
}
|
|
@Override
|
public CompanyDepartment findById(Integer id) {
|
return companyDepartmentMapper.selectById(id);
|
}
|
|
@Override
|
public CompanyDepartment findOne(CompanyDepartment companyDepartment) {
|
QueryWrapper<CompanyDepartment> wrapper = new QueryWrapper<>(companyDepartment);
|
return companyDepartmentMapper.selectOne(wrapper);
|
}
|
|
@Override
|
public List<CompanyDepartment> findList(CompanyDepartment companyDepartment) {
|
QueryWrapper<CompanyDepartment> wrapper = new QueryWrapper<>(companyDepartment);
|
return companyDepartmentMapper.selectList(wrapper);
|
}
|
|
@Override
|
public PageData<CompanyDepartment> findPage(PageWrap<CompanyDepartment> pageWrap) {
|
IPage<CompanyDepartment> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
|
QueryWrapper<CompanyDepartment> queryWrapper = new QueryWrapper<>();
|
Utils.MP.blankToNull(pageWrap.getModel());
|
if (pageWrap.getModel().getId() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getId, pageWrap.getModel().getId());
|
}
|
if (pageWrap.getModel().getCreator() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getCreator, pageWrap.getModel().getCreator());
|
}
|
if (pageWrap.getModel().getCreateDate() != null) {
|
queryWrapper.lambda().ge(CompanyDepartment::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
|
queryWrapper.lambda().le(CompanyDepartment::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
|
}
|
if (pageWrap.getModel().getEditor() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getEditor, pageWrap.getModel().getEditor());
|
}
|
if (pageWrap.getModel().getEditDate() != null) {
|
queryWrapper.lambda().ge(CompanyDepartment::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
|
queryWrapper.lambda().le(CompanyDepartment::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
|
}
|
if (pageWrap.getModel().getIsdeleted() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getIsdeleted, pageWrap.getModel().getIsdeleted());
|
}
|
if (pageWrap.getModel().getName() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getName, pageWrap.getModel().getName());
|
}
|
if (pageWrap.getModel().getRemark() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getRemark, pageWrap.getModel().getRemark());
|
}
|
if (pageWrap.getModel().getStatus() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getStatus, pageWrap.getModel().getStatus());
|
}
|
if (pageWrap.getModel().getSortnum() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getSortnum, pageWrap.getModel().getSortnum());
|
}
|
if (pageWrap.getModel().getImgurl() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getImgurl, pageWrap.getModel().getImgurl());
|
}
|
if (pageWrap.getModel().getType() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getType, pageWrap.getModel().getType());
|
}
|
if (pageWrap.getModel().getCode() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getCode, pageWrap.getModel().getCode());
|
}
|
if (pageWrap.getModel().getParentId() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getParentId, pageWrap.getModel().getParentId());
|
}
|
if (pageWrap.getModel().getLinkName() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getLinkName, pageWrap.getModel().getLinkName());
|
}
|
if (pageWrap.getModel().getLinkPhone() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getLinkPhone, pageWrap.getModel().getLinkPhone());
|
}
|
if (pageWrap.getModel().getHeadId() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getHeadId, pageWrap.getModel().getHeadId());
|
}
|
if (pageWrap.getModel().getIdPath() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getIdPath, pageWrap.getModel().getIdPath());
|
}
|
if (pageWrap.getModel().getNamePath() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getNamePath, pageWrap.getModel().getNamePath());
|
}
|
if (pageWrap.getModel().getCompanyId() != null) {
|
queryWrapper.lambda().eq(CompanyDepartment::getCompanyId, pageWrap.getModel().getCompanyId());
|
}
|
for(PageWrap.SortData sortData: pageWrap.getSorts()) {
|
if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
|
queryWrapper.orderByDesc(sortData.getProperty());
|
} else {
|
queryWrapper.orderByAsc(sortData.getProperty());
|
}
|
}
|
return PageData.from(companyDepartmentMapper.selectPage(page, queryWrapper));
|
}
|
|
@Override
|
public long count(CompanyDepartment companyDepartment) {
|
QueryWrapper<CompanyDepartment> wrapper = new QueryWrapper<>(companyDepartment);
|
return companyDepartmentMapper.selectCount(wrapper);
|
}
|
|
|
}
|