server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java
@@ -6,6 +6,7 @@ import com.doumee.core.utils.Constants; import com.doumee.dao.business.model.Company; import com.doumee.dao.business.model.CompanyPermission; import com.doumee.dao.system.model.SystemDataPermission; import com.doumee.dao.system.model.SystemPermission; import com.doumee.dao.system.model.SystemRole; import com.doumee.dao.system.model.SystemUser; @@ -140,6 +141,12 @@ permissions = systemPermissionService.findByUserId(user.getId()); } } SystemRole rt = new SystemRole(); rt.setDeleted(Boolean.FALSE); //æ°æ®é¨é¨æééå user.setDepartIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user)); LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions); // éªè¯ç¨æ· return new SimpleAuthenticationInfo(userInfo, user.getPassword(), this.getName()); server/service/src/main/java/com/doumee/core/model/LoginUserInfo.java
@@ -46,6 +46,7 @@ private List<String> permissions; private List<Integer> companyIdList; private List<Integer> departIdList; public static LoginUserInfo from(SystemUser user, List<SystemRole> roles, List<SystemPermission> permissions ) { if (user == null) { server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -122,6 +122,14 @@ } } public interface DATAPERMISSION_TYPE{ public static final int all = 0; public static final int departAndChild = 1; public static final int departAndLeaf = 2; public static final int depart = 3; public static final int custom = 4; public static final int self = -1; } /** * è·åæ¹æ¹åæ¶é´æ é¢å server/service/src/main/java/com/doumee/dao/business/CompanyDepartmentMapper.java
@@ -2,11 +2,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.doumee.dao.business.model.CompanyDepartment; import com.github.yulichang.base.MPJBaseMapper; /** * @author æ±è¹è¹ * @date 2024/10/28 19:16 */ public interface CompanyDepartmentMapper extends BaseMapper<CompanyDepartment> { public interface CompanyDepartmentMapper extends MPJBaseMapper<CompanyDepartment> { } server/service/src/main/java/com/doumee/dao/business/model/CompanyDepartment.java
@@ -1,5 +1,6 @@ package com.doumee.dao.business.model; import com.baomidou.mybatisplus.annotation.TableField; import com.doumee.core.annotation.excel.ExcelColumn; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,6 +10,7 @@ import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; import java.util.List; /** * ä¼ä¸ä¿¡æ¯è¡¨ @@ -16,7 +18,7 @@ * @date 2024/10/28 19:16 */ @Data @ApiModel("ä¼ä¸ä¿¡æ¯è¡¨") @ApiModel("ç»ç»ä¿¡æ¯è¡¨") @TableName("`company_department`") public class CompanyDepartment { @@ -67,8 +69,8 @@ @ExcelColumn(name="徿 ") private String imgurl; @ApiModelProperty(value = "ç±»å 0å³å¡å ¬å¸ 1å é¨ç»ç»", example = "1") @ExcelColumn(name="ç±»å 0å³å¡å ¬å¸ 1å é¨ç»ç»") @ApiModelProperty(value = "ç±»å 0å¹³å°ç»ç» 1ä¼ä¸ç»ç» 2åæ·ç»ç»", example = "1") @ExcelColumn(name="ç±»å 0å¹³å°ç»ç» 1ä¼ä¸ç»ç» 2åæ·ç»ç»") private Integer type; @ApiModelProperty(value = "ä¼ä¸ä»£ç ", example = "1") @@ -77,7 +79,7 @@ @ApiModelProperty(value = "ä¸çº§ç»ç»ç¼ç ï¼èªå ³èï¼") @ExcelColumn(name="ä¸çº§ç»ç»ç¼ç ï¼èªå ³èï¼") private String parentId; private Integer parentId; @ApiModelProperty(value = "è系人å§å") @ExcelColumn(name="è系人å§å") @@ -101,6 +103,26 @@ @ApiModelProperty(value = "æå±ä¼ä¸ç¼ç ") @ExcelColumn(name="æå±ä¼ä¸ç¼ç ") private String companyId; private Integer companyId; @TableField(exist = false) private List<CompanyDepartment> childList; @ApiModelProperty(value = "è´è´£äººåå") @TableField(exist = false) private String headName; @ApiModelProperty(value = "æä½äººåå") @TableField(exist = false) private String editorName; @ApiModelProperty(value = "è´è´£äººææºå·") @TableField(exist = false) private String headPhone; @ApiModelProperty(value = "ç¶çº§é¨é¨çº§å«è·¯å¾", example = "1") @TableField(exist = false) private String parentCompanyPath; @ApiModelProperty(value = "ç¶çº§é¨é¨åç§°", example = "1") @TableField(exist = false) private String parentName; @ApiModelProperty(value = "ç¶çº§é¨é¨çº§å«ç±»å 0ç¸å ³æ¹ 1å é¨ç»ç»", example = "1") @TableField(exist = false) private String parentType; } server/service/src/main/java/com/doumee/dao/system/SystemDataPermissionMapper.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.doumee.dao.system.model.SystemDataPermission; import com.doumee.dao.system.model.SystemRole; import com.doumee.dao.system.vo.SystemDataPermissionListVO; import org.apache.ibatis.annotations.Param; @@ -21,4 +22,7 @@ * @return List<SystemDataPermissionListVO> */ List<SystemDataPermissionListVO> selectManageList(@Param("dto") SystemDataPermission dto, @Param("orderByClause") String orderByClause); List<SystemDataPermissionListVO> selectUserList(@Param("dto") SystemDataPermission dto, @Param("role") SystemRole role, @Param("userId") Integer userId); } server/service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
@@ -38,7 +38,7 @@ @ApiModelProperty(value = "æéç±»åï¼0å ¨é¨ï¼1èªå®ä¹ï¼2ä» ç¨æ·æå±ï¼3ç¨æ·æå±åå ¶åæ°æ®ï¼", example = "1") @NotNull(message = "æéç±»åä¸è½ä¸ºç©º", groups = {OperaType.Create.class, OperaType.Update.class}) private Short type; private Integer type; @ApiModelProperty(value = "èªå®ä¹æ°æ®") private String customData; server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.doumee.core.constants.OperaType; import com.doumee.dao.business.model.Company; import com.doumee.dao.business.model.CompanyDepartment; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import com.baomidou.mybatisplus.annotation.IdType; @@ -67,6 +68,8 @@ @ApiModelProperty(value = "ä¼ä¸ç¼ç ") private Integer companyId; @ApiModelProperty(value = "ç»ç»ç¼ç ") private Integer departmentId; @ApiModelProperty(value = "ç±»å 0å¹³å°ç¨æ· 1ä¼ä¸ç¨æ· 2åæ·ç¨æ·") private Integer type; @@ -105,9 +108,15 @@ @ApiModelProperty(value = "æå±ä¼ä¸ä¿¡æ¯å¯¹") @TableField(exist = false) private Company company; @ApiModelProperty(value = "æå±ç»ç»å¯¹è±¡") @TableField(exist = false) private CompanyDepartment department; @ApiModelProperty(value = "æéå ä¼ä¸ç¼ç éå") @ApiModelProperty(value = "å¹³å°ç®¡çåæéå ä¼ä¸ç¼ç éå") @TableField(exist = false) private List<Integer> companyIdList; @ApiModelProperty(value = "æ°æ®æéå ç»ç»ç¼ç éå") @TableField(exist = false) private List<Integer> departIdList; } server/service/src/main/java/com/doumee/dao/system/vo/DepartmentTree.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,103 @@ package com.doumee.dao.system.vo; import com.doumee.core.utils.Constants; import com.doumee.dao.business.model.Company; import com.doumee.dao.business.model.CompanyDepartment; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/7/13 10:40 */ public class DepartmentTree { // ä¿ååä¸æå»ºæ å½¢çæææ°æ®ï¼éå¸¸æ°æ®åºæ¥è¯¢ç»æï¼ public List<CompanyDepartment> nodeList = new ArrayList<>(); public Integer origin = 0; /** * æé æ¹æ³ * @param nodeList å°æ°æ®éåèµå¼ç»nodeListï¼å³æææ°æ®ä½ä¸ºææèç¹ã */ public DepartmentTree(List<CompanyDepartment> nodeList ){ this.nodeList = nodeList; } /** * è·åéæå»ºçæææ ¹èç¹ï¼é¡¶çº§èç¹ï¼ "0" * @return æææ ¹èç¹Listéå */ public List<CompanyDepartment> getRootNode(){ // ä¿åæææ ¹èç¹ï¼æææ ¹èç¹çæ°æ®ï¼ List<CompanyDepartment> rootNodeList = new ArrayList<>(); // treeNodeï¼æ¥è¯¢åºçæ¯ä¸æ¡æ°æ®ï¼èç¹ï¼ for (CompanyDepartment treeNode : nodeList){ // 夿å½åèç¹æ¯å¦ä¸ºæ ¹èç¹ï¼æ¤å¤æ³¨æï¼è¥parentIdç±»åæ¯Stringï¼åè¦éç¨equals()æ¹æ³å¤æã if (Objects.isNull(treeNode.getParentId()) || !notExistParentId(treeNode.getParentId())) { // æ¯ï¼æ·»å rootNodeList.add(treeNode); } } return rootNodeList; } private boolean notExistParentId(Integer parentId) { for (CompanyDepartment treeNode : nodeList){ if (Constants.equalsInteger(parentId,treeNode.getId())) { // æ¯ return true; } } return false; } /** * æ ¹æ®æ¯ä¸ä¸ªé¡¶çº§èç¹ï¼æ ¹èç¹ï¼è¿è¡æå»ºæ å½¢ç»æ * @return æå»ºæ´æ£µæ */ public List<CompanyDepartment> buildTree(){ // treeNodesï¼ä¿åä¸ä¸ªé¡¶çº§èç¹ææå»ºåºæ¥ç宿´æ å½¢ List<CompanyDepartment> treeNodes = new ArrayList<CompanyDepartment>(); // getRootNode()ï¼è·åææçæ ¹èç¹ for (CompanyDepartment treeRootNode : getRootNode()) { // å°é¡¶çº§èç¹è¿è¡æå»ºåæ treeRootNode = buildChildTree(treeRootNode); // 宿ä¸ä¸ªé¡¶çº§èç¹ææå»ºçæ å½¢ï¼å¢å è¿æ¥ treeNodes.add(treeRootNode); } return treeNodes; } /** * éå½-----æå»ºåæ å½¢ç»æ * @param pNode æ ¹èç¹ï¼é¡¶çº§èç¹ï¼ * @return æ´æ£µæ */ public CompanyDepartment buildChildTree(CompanyDepartment pNode){ List<CompanyDepartment> childTree = new ArrayList<CompanyDepartment>(); // nodeListï¼ææèç¹éåï¼æææ°æ®ï¼ for (CompanyDepartment treeNode : nodeList) { // 夿å½åèç¹çç¶èç¹IDæ¯å¦çäºæ ¹èç¹çIDï¼å³å½åèç¹ä¸ºå ¶ä¸çåèç¹ if (!Objects.isNull(treeNode.getParentId())&&treeNode.getParentId().equals(pNode.getId())) { // åéå½è¿è¡å¤æå½åèç¹çæ åµï¼è°ç¨èªèº«æ¹æ³ childTree.add(buildChildTree(treeNode)); } } // for循ç¯ç»æï¼å³èç¹ä¸æ²¡æä»»ä½èç¹ï¼æ å½¢æå»ºç»æï¼è®¾ç½®æ ç»æ pNode.setChildList(childTree); return pNode; } } server/service/src/main/java/com/doumee/service/business/CompanyDepartmentService.java
@@ -19,7 +19,7 @@ * @return Integer */ Integer create(CompanyDepartment companyDepartment); List<CompanyDepartment> departTree(Integer type); /** * 主é®å é¤ * server/service/src/main/java/com/doumee/service/business/impl/CompanyDepartmentServiceImpl.java
@@ -1,20 +1,35 @@ 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.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.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 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.UUID; /** * ä¼ä¸ä¿¡æ¯è¡¨Serviceå®ç° @@ -26,22 +41,161 @@ @Autowired private CompanyDepartmentMapper companyDepartmentMapper; @Autowired private SystemUserMapper systemUserMapper; @Override public Integer create(CompanyDepartment companyDepartment) { companyDepartmentMapper.insert(companyDepartment); return companyDepartment.getId(); public List<CompanyDepartment> departTree(Integer type){ MPJLambdaWrapper<CompanyDepartment> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Company.class); queryWrapper.select("t2.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); queryWrapper.orderByAsc(true,"t.sortnum"); List<CompanyDepartment> companyList = companyDepartmentMapper.selectJoinList(CompanyDepartment.class,queryWrapper); DepartmentTree treeBuild = new DepartmentTree(companyList); companyList = treeBuild.buildTree(); return companyList; } @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)){ 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) { companyDepartmentMapper.deleteById(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) { UpdateWrapper<CompanyDepartment> deleteWrapper = new UpdateWrapper<>(companyDepartment); companyDepartmentMapper.delete(deleteWrapper); 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 @@ -49,12 +203,54 @@ if (CollectionUtils.isEmpty(ids)) { return; } companyDepartmentMapper.deleteBatchIds(ids); for(Integer id :ids){ deleteById(id); } } @Override public void updateById(CompanyDepartment companyDepartment) { companyDepartmentMapper.updateById(companyDepartment); 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("company_name_path=REPLACE(name_path,'"+ model.getNamePath()+"','"+newName+"')") .likeRight(CompanyDepartment::getIdPath,model.getIdPath())); } @Override server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -28,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Indexed; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -53,6 +54,8 @@ private boolean debugModel; @Autowired private CompanyMapper companyMapper; @Autowired private CompanyDepartmentMapper companyDepartmentMapper; @Autowired private SystemUserMapper systemUserMapper; @Autowired @@ -93,14 +96,37 @@ companyMapper.insert(company); company.setEditDate(company.getCreateDate()); company.setEditor(user.getId()); //æ°å»ºé»è®¤ç»ç» CompanyDepartment department = createDefaultDepart(company); //å¤çç»éè´¦å·ä¿¡æ¯ dealSystemUserData(company); SystemUser sysuser = dealSystemUserData(company,department.getId()); //å¤çéä»¶ä¿¡æ¯ dealFileData(company); //å¤çå ³èæ¹æ¡ dealSolutionsData(company); return company; } private CompanyDepartment createDefaultDepart(Company company) { CompanyDepartment depart = new CompanyDepartment(); depart.setCompanyId(company.getId()); depart.setCreator(company.getCreator()); depart.setCreateDate(company.getCreateDate()); depart.setType(Constants.equalsInteger(company.getType(),Constants.ZERO)?Constants.ONE:Constants.TWO); depart.setName(company.getName()); depart.setIsdeleted(Constants.ZERO); depart.setNamePath(company.getName()); depart.setStatus(Constants.ZERO); depart.setRemark("é»è®¤æ ¹ç»ç»"); companyDepartmentMapper.insert(depart); depart.setIdPath(company.getId()+"/"); companyDepartmentMapper.updateById(depart);//æ´æ°è·¯å¾ return depart; } @Override @Transactional public Company createShop(Company company) { @@ -122,14 +148,17 @@ company.setSignStatus(Constants.ZERO); company.setSignIdStatus(Constants.ZERO); companyMapper.insert(company); company.setEditDate(company.getCreateDate()); company.setEditor(user.getId()); //å¤çç»éè´¦å·ä¿¡æ¯ dealSystemUserData(company); dealSystemUserData(company,createDefaultDepart(company).getId()); //å¤çéä»¶ä¿¡æ¯ dealFileData(company); return company; } @Override @Transactional public void updateSolutions(Company company) { @@ -190,7 +219,7 @@ } } private void dealSystemUserData(Company company) { private SystemUser dealSystemUserData(Company company, Integer departId) { if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda() .eq(SystemUser::getDeleted,Boolean.TRUE) .eq(SystemUser::getUsername,company.getUsername()))>0){ @@ -216,9 +245,11 @@ user.setRealname(company.getLegalName()); user.setMobile(company.getPhone()); user.setCreateUser(company.getCreator()); user.setDepartmentId(departId); user.setCreateTime(company.getCreateDate()); user.setStatus(Constants.ZERO); systemUserMapper.insert(user); return user; } private void dealSystemUserDataForUpdate (Company company,String oldUserName) { if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda() server/service/src/main/java/com/doumee/service/business/third/EmailService.java
@@ -30,6 +30,7 @@ helper.setTo(toEmail); helper.setFrom(fromEmail); helper.setSubject(title); helper.setText(content); if(fileList!=null){ server/service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java
@@ -3,6 +3,8 @@ import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.dao.system.model.SystemDataPermission; import com.doumee.dao.system.model.SystemRole; import com.doumee.dao.system.model.SystemUser; import com.doumee.dao.system.vo.SystemDataPermissionListVO; import java.util.List; @@ -105,4 +107,6 @@ * @return long */ long count(SystemDataPermission systemDataPermission); List<Integer> selectHighRole(SystemDataPermission systemDataPermission, SystemRole rt, SystemUser user); } server/service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java
@@ -5,21 +5,29 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.dao.business.CompanyDepartmentMapper; import com.doumee.dao.business.model.Company; import com.doumee.dao.business.model.CompanyDepartment; import com.doumee.dao.system.SystemDataPermissionMapper; import com.doumee.dao.system.SystemRoleMapper; import com.doumee.dao.system.model.SystemDataPermission; import com.doumee.dao.system.model.SystemRole; import com.doumee.dao.system.model.SystemUser; import com.doumee.dao.system.vo.SystemDataPermissionListVO; import com.doumee.service.system.SystemDataPermissionService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; /** * æ°æ®æéé ç½®Serviceå®ç° @@ -31,6 +39,8 @@ @Autowired private SystemDataPermissionMapper systemDataPermissionMapper; @Autowired private CompanyDepartmentMapper companyDepartmentMapper; @Autowired private SystemRoleMapper systemRoleMapper; @@ -132,4 +142,139 @@ Wrapper<SystemDataPermission> wrapper = new QueryWrapper<>(systemDataPermission); return systemDataPermissionMapper.selectCount(wrapper); } @Override public List<Integer> selectHighRole(SystemDataPermission model, SystemRole role, SystemUser user) { List<SystemDataPermissionListVO>list = systemDataPermissionMapper.selectUserList(model,role,user.getId()) ; if(list !=null){ boolean all = false; boolean departAndChild=false; boolean depart=false; boolean departAndLeaf=false; boolean custom=false; String c = ""; for(SystemDataPermissionListVO d : list){ if(!all && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.all)){ all =true; } if(!depart && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.depart)){ depart =true; } if(!departAndChild && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.departAndChild)){ departAndChild =true; } if(!departAndLeaf && Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.departAndLeaf)){ departAndLeaf =true; } if( Constants.equalsInteger(d.getType(),Constants.DATAPERMISSION_TYPE.custom)){ custom =true; c += StringUtils.defaultString(d.getCustomData(),""); } } CompanyDepartment department = new CompanyDepartment(); department.setId(user.getDepartmentId()); department.setType(Constants.THREE); if(Constants.equalsInteger(user.getType(),Constants.UserType.COMPANY.getKey())){ department.setType(Constants.ONE); }else if(Constants.equalsInteger(user.getType(),Constants.UserType.ZHUBO.getKey())){ department.setType(Constants.TWO); }else if(Constants.equalsInteger(user.getType(),Constants.UserType.SYSTEM.getKey())){ department.setType(Constants.THREE); } if(all){ return null; }else{ List<Integer> dList = new ArrayList<>(); dList.add(-1);//èæé¨é¨ï¼ææ¥ç©ºéå if(custom) { //妿æèªå®ä¹é¨é¨ String[] idStrs = c.split(","); for(String s :idStrs){ try { Integer si = Integer.parseInt(s); if(!isExists(si,dList)){ dList.add(si); } }catch (Exception e){ } } } if(departAndLeaf){ if(department!= null){ dList.addAll(userDataPermissonList(department,true)); } }else if(departAndChild){ if(department!= null) { dList.addAll(userDataPermissonList(department, false)); } }else if(depart){ if(department!= null && !isExists(department.getId(), dList)){ dList.add(department.getId()); } } return dList; } } return new ArrayList<>(); } public List<Integer> userDataPermissonList(CompanyDepartment depart ,boolean isleaf) { List<Integer> pool = new ArrayList<>(); List<CompanyDepartment> departList = companyDepartmentMapper.selectList(new QueryWrapper<CompanyDepartment>().lambda() .eq(CompanyDepartment::getIsdeleted,Constants.ZERO ) .eq(CompanyDepartment::getType,depart.getType()) ); pool.add(depart.getId()); this.fillDepartChildren(pool, Arrays.asList(depart.getId()),isleaf,departList); return pool; } private void fillDepartChildren(List<Integer> pool, List<Integer> asList, boolean isleaf, List<CompanyDepartment> departList) { List<CompanyDepartment> departments = getDepartListByParentIds(asList,departList); List<Integer> ids = departments.stream().map(CompanyDepartment::getId).collect(Collectors.toList()); if(isleaf){ if (ids.size() > 0) { pool.addAll(ids); this.fillDepartChildren(pool, ids,isleaf,departList); } }else{ pool.addAll(ids); } } private List<CompanyDepartment> getDepartListByParentIds(List<Integer> asList, List<CompanyDepartment> departList) { List<CompanyDepartment> list = new ArrayList<>(); if(asList.size()>0){ for(Integer id : asList){ list.addAll(getDepartListByParentId(id,departList)); } } return list; } private List<CompanyDepartment> getDepartListByParentId(Integer pId, List<CompanyDepartment> departList) { List<CompanyDepartment> list = new ArrayList<>(); if(departList!= null){ for(CompanyDepartment d :departList){ if(Constants.equalsInteger(d.getParentId(),pId)){ list.add(d); } } } return list; } private boolean isExists(Integer s, List<Integer> dList) { if(dList!=null){ for(Integer t : dList){ if(Constants.equalsInteger(s,t)){ return true; } } } return false; } } server/service/src/main/resources/mappers/SystemDataPermissionMapper.xml
@@ -43,5 +43,30 @@ </where> ${orderByClause} </select> <select id="selectUserList" resultMap="SystemDataPermissionListVO"> SELECT sdp.`ID`, sdp.`BUSINESS_CODE`, sdp.`ROLE_ID`, sdp.`TYPE`, sdp.`CUSTOM_DATA`, sdp.`DISABLED`, sdp.`REMARK`, sdp.DISABLED, sdp.`CREATE_TIME`, sdp.`UPDATE_TIME`, role.`ID` AS ROLE_ID, role.`CODE` AS ROLE_CODE, role.`NAME` AS ROLE_NAME, create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME, update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME FROM SYSTEM_DATA_PERMISSION sdp INNER JOIN `SYSTEM_ROLE` role ON role.ID = sdp.ROLE_ID LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = sdp.CREATE_USER LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = sdp.UPDATE_USER <where> sdp.DELETED = 0 <if test="dto.businessCode != null and dto.businessCode != ''"> AND sdp.`BUSINESS_CODE` = #{dto.businessCode} </if> <if test="dto.roleId != null"> AND role.`ID` = #{dto.roleId} </if> <if test="dto.type != null"> AND sdp.`TYPE` = #{dto.type} </if> <if test="userId != null"> AND exists (select sr.id from system_user_role sr where sr.role_id=sdp.role_id and sr.user_id=#{userId} and sr.deleted=0) </if> </where> </select> </mapper>