组织管理
This commit is contained in:
@ -0,0 +1,128 @@
|
||||
package com.coscoshipping.ebtp.project.org.controller;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
|
||||
import com.coscoshipping.ebtp.project.org.entity.vo.SysOrgVO;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
import com.coscoshipping.ebtp.project.org.entity.SysOrg;
|
||||
import com.coscoshipping.ebtp.project.org.service.SysOrgService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
|
||||
@RestController
|
||||
@Api(value = "机构表")
|
||||
@RequestMapping("/v1/sysorg")
|
||||
public class SysOrgController{
|
||||
|
||||
@Resource
|
||||
private SysOrgService iSysOrgService;
|
||||
|
||||
/**
|
||||
* 插入新数据
|
||||
*
|
||||
* @param sysOrg
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation("插入新数据")
|
||||
@PostMapping("/insert")
|
||||
public BaseResponse<Boolean> insert(@ApiParam(value = "对象数据", required = true) @RequestBody @Valid SysOrgVO sysOrg){
|
||||
|
||||
Boolean i = iSysOrgService.insertByVo(sysOrg);
|
||||
|
||||
return BaseResponse.success(i);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改数据
|
||||
*
|
||||
* @param sysOrg
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation("修改数据")
|
||||
@PostMapping("/update")
|
||||
public BaseResponse<Boolean> update(@ApiParam(value = "对象数据", required = true) @RequestBody SysOrgVO sysOrg){
|
||||
|
||||
Boolean i = iSysOrgService.updateByVo(sysOrg);
|
||||
|
||||
return BaseResponse.success(i);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询数据
|
||||
*
|
||||
* @param id
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation("根据id查询数据")
|
||||
@GetMapping("/{id}")
|
||||
public BaseResponse<SysOrg> get(@ApiParam(value = "主键id", required = true) @PathVariable String id){
|
||||
|
||||
SysOrg sysOrg = iSysOrgService.getById(id);
|
||||
|
||||
return BaseResponse.success(sysOrg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除数据
|
||||
* @param id 主键id
|
||||
* @return BaseResponse<Boolean>
|
||||
* @author dino
|
||||
* @date 2020/10/21 14:56
|
||||
*/
|
||||
@ApiOperation(value = "delete",notes = "删除数据")
|
||||
@GetMapping("/del/{id}")
|
||||
public BaseResponse<Boolean> delete(@ApiParam(value = "主键id", required = true) @PathVariable String id) {
|
||||
Boolean i = iSysOrgService.deleteById(id);
|
||||
return BaseResponse.success(i);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询数据
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation("查询列表数据")
|
||||
@GetMapping("/list")
|
||||
public BaseResponse<List<SysOrg>> list(@ApiParam(value = "查询对象数据", required = false) SysOrg param) {
|
||||
//查询
|
||||
LambdaQueryWrapper<SysOrg> query = Wrappers.lambdaQuery(param);
|
||||
List<SysOrg> list = iSysOrgService.list(query);
|
||||
//异常处理
|
||||
//RespsExceptionEnum.FRAME_EXCEPTION_DEMO_NOT_FIND.customValid(list.isEmpty());
|
||||
return BaseResponse.success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询分页数据
|
||||
*
|
||||
* @param sysOrgVO 分页信息
|
||||
*
|
||||
* @return 返回结果
|
||||
*/
|
||||
@ApiOperation("查询分页数据")
|
||||
@PostMapping("/getPage")
|
||||
public BaseResponse<IPage<SysOrg>> getPage(@ApiParam(value = "对象数据", required = true) @RequestBody SysOrgVO sysOrgVO){
|
||||
|
||||
return BaseResponse.success(iSysOrgService.getPage(sysOrgVO));
|
||||
}
|
||||
@ApiOperation("查询所有数据(树形结构)")
|
||||
@GetMapping("/queryAll")
|
||||
public BaseResponse<List<SysOrgVO>> queryAll(SysOrg sysOrg){
|
||||
return BaseResponse.success(iSysOrgService.getTreeByNode(sysOrg));
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package com.coscoshipping.ebtp.project.org.dao;
|
||||
|
||||
|
||||
import com.chinaunicom.mall.ebtp.common.base.dao.IBaseMapper;
|
||||
import java.util.List;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import com.coscoshipping.ebtp.project.org.entity.SysOrg;
|
||||
|
||||
@Repository
|
||||
public interface SysOrgMapper extends IBaseMapper<SysOrg> {
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="com.coscoshipping.ebtp.project.org.dao.SysOrgMapper">
|
||||
<resultMap id="orgResultMap" type="com.coscoshipping.ebtp.project.org.entity.SysOrg">
|
||||
<result column="org_id" jdbcType="VARCHAR" property="orgId" />
|
||||
<result column="org_name" jdbcType="VARCHAR" property="orgName" />
|
||||
<result column="org_num" jdbcType="VARCHAR" property="orgNum" />
|
||||
<result column="org_full_id" jdbcType="VARCHAR" property="orgFullId" />
|
||||
<result column="org_full_name" jdbcType="VARCHAR" property="orgFullName" />
|
||||
<result column="up_org_id" jdbcType="VARCHAR" property="upOrgId" />
|
||||
<result column="org_category" jdbcType="VARCHAR" property="orgCategory" />
|
||||
<result column="leader_name" jdbcType="VARCHAR" property="leaderName" />
|
||||
<result column="leader_oa_code" jdbcType="VARCHAR" property="leaderOaCode" />
|
||||
<result column="leader_user_id" jdbcType="VARCHAR" property="leaderUserId" />
|
||||
<result column="top_leader_name" jdbcType="VARCHAR" property="topLeaderName" />
|
||||
<result column="top_leader_oa_code" jdbcType="VARCHAR" property="topLeaderOaCode" />
|
||||
<result column="top_leader_user_id" jdbcType="VARCHAR" property="topLeaderUserId" />
|
||||
<result column="sort" jdbcType="VARCHAR" property="sort" />
|
||||
<result column="status" jdbcType="VARCHAR" property="status" />
|
||||
<result column="branch" jdbcType="INTEGER" property="branch" />
|
||||
<result column="site" jdbcType="VARCHAR" property="site" />
|
||||
<result column="cu_company_number" jdbcType="VARCHAR" property="cuCompanyNumber" />
|
||||
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
|
||||
<result column="create_date" jdbcType="VARCHAR" property="createDate" />
|
||||
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId" />
|
||||
<result column="tenant_name" jdbcType="VARCHAR" property="tenantName" />
|
||||
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
|
||||
<result column="update_date" jdbcType="VARCHAR" property="updateDate" />
|
||||
<result column="delete_flag" jdbcType="VARCHAR" property="deleteFlag" />
|
||||
<result column="last_update_time" jdbcType="VARCHAR" property="lastUpdateTime" />
|
||||
</resultMap>
|
||||
|
||||
<!--逻辑删除方法 此方法为代码生成器生成 不允许修改 如有特殊需求 请自行新建SQL语句-->
|
||||
<update id="deleteOff" >
|
||||
update sys_org
|
||||
set
|
||||
delete_flag="1"
|
||||
where ID=#{id }
|
||||
</update>
|
||||
</mapper>
|
@ -0,0 +1,92 @@
|
||||
package com.coscoshipping.ebtp.project.org.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.chinaunicom.mall.ebtp.common.base.entity.BaseEntity;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 实体类 SysOrg-机构表
|
||||
*
|
||||
* @author yss
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@TableName(value = "sys_org", autoResultMap = true)
|
||||
@ApiModel(value = "SysOrg对象", description = "机构表")
|
||||
public class SysOrg extends BaseEntity implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "部门ID")
|
||||
@TableId(value = "org_id", type = IdType.INPUT)
|
||||
private String orgId;
|
||||
|
||||
@ApiModelProperty(value = "部门名称")
|
||||
private String orgName;
|
||||
|
||||
@ApiModelProperty(value = "部门编码")
|
||||
private String orgNum;
|
||||
|
||||
@ApiModelProperty(value = "部门链式ID")
|
||||
private String orgFullId;
|
||||
|
||||
@ApiModelProperty(value = "部门链式全称")
|
||||
private String orgFullName;
|
||||
|
||||
@ApiModelProperty(value = "上级部门id")
|
||||
private String upOrgId;
|
||||
|
||||
@ApiModelProperty(value = "组织类型(Org:表示公司;Dept:表示部门)")
|
||||
private String orgCategory;
|
||||
|
||||
@ApiModelProperty(value = "部门或者团队领导名称")
|
||||
private String leaderName;
|
||||
|
||||
@ApiModelProperty(value = "部门或者团队领导oaCode")
|
||||
private String leaderOaCode;
|
||||
|
||||
@ApiModelProperty(value = "部门或者团队领导userid")
|
||||
private String leaderUserId;
|
||||
|
||||
@ApiModelProperty(value = "分管部门领导名称")
|
||||
private String topLeaderName;
|
||||
|
||||
@ApiModelProperty(value = "分管部门领导oaCode")
|
||||
private String topLeaderOaCode;
|
||||
|
||||
@ApiModelProperty(value = "分管部门领导userid")
|
||||
private String topLeaderUserId;
|
||||
|
||||
@ApiModelProperty(value = "显示顺序")
|
||||
private String sort;
|
||||
|
||||
@ApiModelProperty(value = "状态")
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty(value = "分支机构标识 1是 0不是")
|
||||
private Integer branch;
|
||||
|
||||
@ApiModelProperty(value = "省份简称")
|
||||
private String site;
|
||||
|
||||
@ApiModelProperty(value = "所属分公司编码")
|
||||
private String cuCompanyNumber;
|
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value = "租户ID")
|
||||
private String tenantId;
|
||||
|
||||
@ApiModelProperty(value = "租户名称")
|
||||
private String tenantName;
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package com.coscoshipping.ebtp.project.org.entity.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest;
|
||||
import com.coscoshipping.ebtp.project.org.entity.SysOrg;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户角色信息VO类 SysRoleVO
|
||||
*
|
||||
* @author zyx
|
||||
* @date 2025/5/8
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@ApiModel("用户角色信息VO类")
|
||||
@TableName(autoResultMap = true)
|
||||
public class SysOrgVO extends SysOrg implements Serializable {
|
||||
|
||||
/**
|
||||
* 分页数据
|
||||
*/
|
||||
@ApiModelProperty(value = "分页对象信息")
|
||||
private BasePageRequest basePageRequest;
|
||||
private String id;
|
||||
private String title;
|
||||
private String value;
|
||||
private String key;
|
||||
|
||||
@ApiModelProperty(value = "树级结构展示节点")
|
||||
private List<SysOrgVO> children;
|
||||
|
||||
@ApiModelProperty(value = "树形结构所有部门ID")
|
||||
private String allDepartmentId;
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package com.coscoshipping.ebtp.project.org.service;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.chinaunicom.mall.ebtp.common.base.service.IBaseService;
|
||||
import com.coscoshipping.ebtp.project.org.entity.SysOrg;
|
||||
import com.coscoshipping.ebtp.project.org.entity.vo.SysOrgVO;
|
||||
import com.coscoshipping.ebtp.project.role.entity.vo.SysRoleVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 对数据表 sys_org 操作的 service
|
||||
* @author yss
|
||||
*
|
||||
*/
|
||||
public interface SysOrgService extends IBaseService<SysOrg>{
|
||||
|
||||
IPage<SysOrg> getPage(SysOrgVO vo);
|
||||
|
||||
|
||||
/**
|
||||
* 查询结构节点树形展示
|
||||
*
|
||||
* @param vo
|
||||
* @return
|
||||
*/
|
||||
List<SysOrgVO> getTreeByNode(SysOrg vo);
|
||||
|
||||
|
||||
Boolean insertByVo(SysOrgVO bo);
|
||||
|
||||
|
||||
Boolean updateByVo(SysOrgVO bo);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param orgId
|
||||
* @return
|
||||
*/
|
||||
Boolean deleteById(String orgId);
|
||||
}
|
@ -0,0 +1,221 @@
|
||||
package com.coscoshipping.ebtp.project.org.service.impl;
|
||||
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest;
|
||||
import com.chinaunicom.mall.ebtp.common.exception.common.CommonExceptionEnum;
|
||||
import com.chinaunicom.mall.ebtp.common.util.JsonUtils;
|
||||
import com.chinaunicom.mall.ebtp.common.util.PropertyUtils;
|
||||
import com.coscoshipping.ebtp.project.org.entity.vo.SysOrgVO;
|
||||
import com.coscoshipping.ebtp.project.org.util.CommonUtil;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl;
|
||||
import com.coscoshipping.ebtp.project.org.dao.SysOrgMapper;
|
||||
import com.coscoshipping.ebtp.project.org.entity.SysOrg;
|
||||
import com.coscoshipping.ebtp.project.org.service.SysOrgService;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 对数据表 sys_org 操作的 serviceImpl
|
||||
* @author yss
|
||||
*
|
||||
*/
|
||||
@Service
|
||||
public class SysOrgServiceImpl extends BaseServiceImpl<SysOrgMapper,SysOrg> implements SysOrgService {
|
||||
|
||||
@Override
|
||||
public IPage<SysOrg> getPage(SysOrgVO SysOrgVO) {
|
||||
LambdaQueryWrapper<SysOrg> query = buildQueryWrapper(SysOrgVO);
|
||||
|
||||
if(null == SysOrgVO.getBasePageRequest()){
|
||||
SysOrgVO.setBasePageRequest(new BasePageRequest());
|
||||
}
|
||||
//查询
|
||||
IPage<SysOrg> result = new Page<>(SysOrgVO.getBasePageRequest().getPageNo(), SysOrgVO.getBasePageRequest().getPageSize());
|
||||
result = this.page(result, query);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysOrgVO> getTreeByNode(SysOrg org) {
|
||||
SysOrgVO sysOrgVO = new SysOrgVO();
|
||||
List<SysOrg> sysOrgList = new ArrayList<>();
|
||||
if (!StringUtils.isEmpty(org.getOrgName()) || !StringUtils.isEmpty(org.getOrgNum())){
|
||||
SysOrgVO vo = BeanUtil.toBean(org, SysOrgVO.class);
|
||||
IPage<SysOrg> page = this.getPage(vo);
|
||||
sysOrgList = page.getRecords();
|
||||
return sysOrgList.stream().map(entity -> BeanUtil.toBean(entity, SysOrgVO.class)).collect(Collectors.toList());
|
||||
} else {
|
||||
sysOrgList = this.list();
|
||||
|
||||
//存储所有的部门ID
|
||||
String allDepartmentId = "";
|
||||
|
||||
if (!CollectionUtils.isEmpty(sysOrgList)) {
|
||||
//获取要查询的节点ID 如果为空则查询所有节点进行树形展示
|
||||
String rootNode = StringUtils.isNotBlank(org.getOrgId()) ? org.getOrgId() : CommonUtil.ROOT_NODE;
|
||||
|
||||
allDepartmentId += rootNode;
|
||||
|
||||
List<SysOrgVO> sysOrgVOList = JsonUtils.jsonToList(sysOrgList, SysOrgVO.class);
|
||||
//获取要查询的节点
|
||||
sysOrgVO = sysOrgVOList.stream()
|
||||
.filter(n -> StringUtils.equals(n.getUpOrgId(), rootNode))
|
||||
.map(this::setInfoForTree)
|
||||
.collect(Collectors.toList())
|
||||
.get(0);
|
||||
//递归查询节点信息
|
||||
getChildrenNode(sysOrgVOList, sysOrgVO, allDepartmentId);
|
||||
}
|
||||
sysOrgVO.setAllDepartmentId(allDepartmentId);
|
||||
List<SysOrgVO> voList = new ArrayList<>();
|
||||
voList.add(sysOrgVO);
|
||||
return voList;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean insertByVo(SysOrgVO vo) {
|
||||
vo.setOrgId(PropertyUtils.getSnowflakeId()).setCreateDate(LocalDateTime.now());
|
||||
SysOrg full = this.buildOrgFullPath(vo);
|
||||
vo.setOrgFullId(full.getOrgFullId()).setOrgFullName(full.getOrgFullName());
|
||||
validEntityBeforeSave(vo,false);
|
||||
return baseMapper.insert(vo) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateByVo(SysOrgVO vo) {
|
||||
validEntityBeforeSave(vo,true);
|
||||
SysOrg full = this.buildOrgFullPath(vo);
|
||||
vo.setOrgFullId(full.getOrgFullId()).setOrgFullName(full.getOrgFullName());
|
||||
// 删除机构与人员关联
|
||||
// roleMenuService.remove(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, vo.getRoleId()));
|
||||
return baseMapper.updateById(vo) > 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Boolean deleteById(String orgId) {
|
||||
//当没有下级组织才可删除
|
||||
List<SysOrg> orgList = this.list(new LambdaQueryWrapper<SysOrg>().eq(SysOrg::getUpOrgId, orgId));
|
||||
CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("存在下级组织,不可删除", !orgList.isEmpty());
|
||||
// 删除机构与人员关联
|
||||
// roleMenuService.remove(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, roleId));
|
||||
return this.removeById(orgId);
|
||||
}
|
||||
|
||||
|
||||
// @Override
|
||||
public SysOrg buildOrgFullPath(SysOrg nowOrg) {
|
||||
String upOrgId = StringUtils.isBlank(nowOrg.getUpOrgId()) ? CommonUtil.ROOT_NODE : nowOrg.getUpOrgId();
|
||||
List<String> idPath = new ArrayList<>();
|
||||
List<String> namePath = new ArrayList<>();
|
||||
idPath.add(0, nowOrg.getOrgId());
|
||||
namePath.add(0, nowOrg.getOrgName());
|
||||
SysOrg currentOrg = baseMapper.selectById(upOrgId);
|
||||
while (currentOrg != null) {
|
||||
idPath.add(0, currentOrg.getOrgId());
|
||||
namePath.add(0, currentOrg.getOrgName());
|
||||
|
||||
if (StringUtils.isBlank(currentOrg.getUpOrgId()) || currentOrg.getUpOrgId().equals(CommonUtil.ROOT_NODE)) {
|
||||
break;
|
||||
}
|
||||
|
||||
currentOrg = baseMapper.selectById(currentOrg.getUpOrgId());
|
||||
}
|
||||
|
||||
String orgFullId = String.join(",", idPath);
|
||||
String orgFullName = String.join("--", namePath);
|
||||
|
||||
return new SysOrg().setOrgId(idPath.get(idPath.size() - 1))
|
||||
.setOrgFullId(orgFullId)
|
||||
.setOrgFullName(orgFullName);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(SysOrg entity, boolean isUpdate){
|
||||
//校验角色编码是否重复
|
||||
LambdaQueryWrapper<SysOrg> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(StringUtils.isNotBlank(entity.getOrgNum()), SysOrg::getOrgNum, entity.getOrgNum());
|
||||
if (isUpdate){
|
||||
lqw.ne(StringUtils.isNotBlank(entity.getOrgId()), SysOrg::getOrgId, entity.getOrgId());
|
||||
}
|
||||
List<SysOrg> orgList =baseMapper.selectList(lqw);
|
||||
CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("组织编码已存在",orgList.size()>1);
|
||||
}
|
||||
|
||||
private SysOrgVO setInfoForTree(SysOrgVO orgVO) {
|
||||
return orgVO.setId(orgVO.getOrgId())
|
||||
.setTitle(orgVO.getOrgName())
|
||||
.setKey(orgVO.getOrgId())
|
||||
.setValue(orgVO.getOrgId());
|
||||
}
|
||||
/**
|
||||
* 递归查询部门信息树形展示
|
||||
*
|
||||
* @param sysOrgVOList 所有部门信息
|
||||
* @param sysOrg 当前查询节点
|
||||
*/
|
||||
private void getChildrenNode(List<SysOrgVO> sysOrgVOList, SysOrgVO sysOrg, String allDepartmentId) {
|
||||
|
||||
List<SysOrgVO> childrenNodeList = new ArrayList<>();
|
||||
|
||||
for (SysOrgVO sysOrgVO : sysOrgVOList) {
|
||||
//判断机构部门上级ID和当前节点ID是否相等
|
||||
if (StringUtils.equals(sysOrg.getOrgId(), sysOrgVO.getUpOrgId())) {
|
||||
childrenNodeList.add(sysOrgVO);
|
||||
allDepartmentId += sysOrgVO.getOrgId();
|
||||
getChildrenNode(sysOrgVOList, sysOrgVO, allDepartmentId);
|
||||
}
|
||||
}
|
||||
//判断是否有下级节点
|
||||
if (!CollectionUtils.isEmpty(childrenNodeList)) {
|
||||
//根据sort排序
|
||||
childrenNodeList = childrenNodeList
|
||||
.stream()
|
||||
.map(this::setInfoForTree)
|
||||
.sorted(Comparator.comparing(SysOrgVO::getSort, Comparator.nullsLast(String::compareTo)))
|
||||
.collect(Collectors.toList());
|
||||
sysOrg.setChildren(childrenNodeList);
|
||||
} else {
|
||||
sysOrg.setChildren(ListUtil.empty());
|
||||
}
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<SysOrg> buildQueryWrapper(SysOrgVO vo) {
|
||||
LambdaQueryWrapper<SysOrg> lqw = Wrappers.lambdaQuery();
|
||||
lqw.like(StringUtils.isNotBlank(vo.getOrgName()), SysOrg::getOrgName , vo.getOrgName());
|
||||
lqw.eq(StringUtils.isNotBlank(vo.getOrgNum()), SysOrg::getOrgNum, vo.getOrgNum());
|
||||
lqw.like(StringUtils.isNotBlank(vo.getOrgFullId()), SysOrg::getOrgFullId, vo.getOrgFullId());
|
||||
lqw.like(StringUtils.isNotBlank(vo.getOrgFullName()), SysOrg::getOrgFullName, vo.getOrgFullName());
|
||||
lqw.eq(StringUtils.isNotBlank(vo.getUpOrgId()), SysOrg::getUpOrgId, vo.getUpOrgId());
|
||||
lqw.eq(StringUtils.isNotBlank(vo.getOrgCategory()), SysOrg::getOrgCategory, vo.getOrgCategory());
|
||||
lqw.eq(StringUtils.isNotBlank(vo.getLeaderName()), SysOrg::getLeaderName, vo.getLeaderName());
|
||||
lqw.eq(StringUtils.isNotBlank(vo.getLeaderOaCode()), SysOrg::getLeaderOaCode, vo.getLeaderOaCode());
|
||||
lqw.eq(StringUtils.isNotBlank(vo.getLeaderUserId()), SysOrg::getLeaderUserId, vo.getLeaderUserId());
|
||||
lqw.eq(StringUtils.isNotBlank(vo.getTopLeaderName()), SysOrg::getTopLeaderName, vo.getTopLeaderName());
|
||||
lqw.eq(StringUtils.isNotBlank(vo.getTopLeaderOaCode()), SysOrg::getTopLeaderOaCode, vo.getTopLeaderOaCode());
|
||||
lqw.eq(StringUtils.isNotBlank(vo.getTopLeaderUserId()), SysOrg::getTopLeaderUserId, vo.getTopLeaderUserId());
|
||||
lqw.eq(StringUtils.isNotBlank(vo.getCuCompanyNumber()), SysOrg::getCuCompanyNumber, vo.getCuCompanyNumber());
|
||||
lqw.eq(StringUtils.isNotBlank(vo.getStatus()), SysOrg::getStatus, vo.getStatus());
|
||||
lqw.eq(vo.getCreateBy() != null, SysOrg::getCreateBy, vo.getCreateBy());
|
||||
lqw.eq(vo.getUpdateBy() != null, SysOrg::getUpdateBy, vo.getUpdateBy());
|
||||
lqw.orderByDesc(SysOrg::getCreateDate);
|
||||
return lqw;
|
||||
}
|
||||
}
|
@ -0,0 +1,334 @@
|
||||
package com.coscoshipping.ebtp.project.org.util;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import com.chinaunicom.mall.ebtp.common.exception.common.CommonExceptionEnum;
|
||||
import com.google.common.base.Splitter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigDecimal;
|
||||
import java.net.URLEncoder;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 公共辅助静态参数类
|
||||
*
|
||||
* @author daixc
|
||||
* @date 2022/03/22
|
||||
*/
|
||||
public class CommonUtil {
|
||||
|
||||
/**
|
||||
* 组织结构书根节点
|
||||
*/
|
||||
public static final String ROOT_NODE = "0";
|
||||
|
||||
/**
|
||||
* 系统编码
|
||||
*/
|
||||
public static final String ENCODE = "UTF-8";
|
||||
|
||||
/**
|
||||
* 日期格式化 带有毫秒
|
||||
*/
|
||||
public static final String DATE_MILLISECOND_PATTERN = "yyyyMMddHHmmssS";
|
||||
|
||||
/**
|
||||
* 标准时间格式化
|
||||
*/
|
||||
public static final String DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
|
||||
|
||||
/**
|
||||
* 标准时间格式化
|
||||
*/
|
||||
public static final String DATE_PATTERN_DATE = "yyyy-MM-dd";
|
||||
|
||||
/**
|
||||
* 日期格式化 文件时间格式化
|
||||
*/
|
||||
public static final String FILE_DATE_MILLISECOND_PATTERN = "yyyyMMdd";
|
||||
|
||||
/**
|
||||
* 导出附件追加时间戳
|
||||
*/
|
||||
public static final String PATTERN_DATE = "yyyyMMddHHmmss";
|
||||
|
||||
/**
|
||||
* 标准时间格式化
|
||||
*/
|
||||
public static final String DATE_MONTH_PATTERN_DATE = "yyyy-MM";
|
||||
/**
|
||||
* 标准时间格式化-年
|
||||
*/
|
||||
public static final String DATE_YEAR_PATTERN_DATE = "yyyy";
|
||||
|
||||
/**
|
||||
* 谷歌浏览器
|
||||
*/
|
||||
public static final String MSIE = "MSIE";
|
||||
|
||||
/**
|
||||
* QQ浏览器
|
||||
*/
|
||||
public static final String TRIDENT = "Trident";
|
||||
|
||||
/**
|
||||
* 火狐浏览器
|
||||
*/
|
||||
public static final String FIREFOX = "Firefox";
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final String SAFARI = "Safari";
|
||||
|
||||
public static final String USER_AGENT = "User-Agent";
|
||||
|
||||
/**
|
||||
* 公共是否 1 是
|
||||
*/
|
||||
public static final String YES = "1";
|
||||
|
||||
/**
|
||||
* 公共是否 0 否
|
||||
*/
|
||||
public static final String NO = "0";
|
||||
|
||||
/**
|
||||
* 公共是否 1 是
|
||||
*/
|
||||
public static final String YES_NAME = "是";
|
||||
|
||||
/**
|
||||
* 公共是否 0 否
|
||||
*/
|
||||
public static final String NO_NAME = "否";
|
||||
|
||||
/**
|
||||
* 公共启用 0 启用
|
||||
*/
|
||||
public static final String COMMON_ENABLE = "0";
|
||||
|
||||
/**
|
||||
* 公共是否 1 禁用
|
||||
*/
|
||||
public static final String COMMON_DISABLED = "1";
|
||||
|
||||
/**
|
||||
* 时间单位
|
||||
*/
|
||||
public static final String YEAR = "year";
|
||||
public static final String MONTH = "month";
|
||||
public static final String DAY = "day";
|
||||
public static final String HOUR = "hour";
|
||||
public static final String MINUTE = "minute";
|
||||
public static final String SECOND = "second";
|
||||
public static final String QUARTER = "quarter";
|
||||
public static final String WEEK = "week";
|
||||
|
||||
/**
|
||||
* 附件再在头处理公共方法
|
||||
*
|
||||
* @param agent 浏览器类型
|
||||
* @param fileName 文件名
|
||||
* @return 返回头部处理信息
|
||||
*/
|
||||
public static String encodeFileName(String agent, String fileName) {
|
||||
try {
|
||||
if (StringUtils.isNotBlank(agent)) {
|
||||
if (agent.contains(MSIE) || agent.contains(TRIDENT)) {
|
||||
return URLEncoder.encode(fileName, ENCODE).replace("+", " ");
|
||||
} else if (agent.contains(FIREFOX) || agent.contains(SAFARI)) {
|
||||
return new String(fileName.getBytes(ENCODE), "ISO8859-1");
|
||||
}
|
||||
}
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.throwException();
|
||||
}
|
||||
return fileName;
|
||||
}
|
||||
|
||||
/**
|
||||
* BigDecimal处理方法 向上取整 保留Number位小数
|
||||
*
|
||||
* @param bigDecimal 金额
|
||||
* @param number 保留位数
|
||||
* @return 返回结果
|
||||
*/
|
||||
public static BigDecimal bigDecimalFormat(BigDecimal bigDecimal, int number) {
|
||||
return amountFormat(bigDecimal, number);
|
||||
}
|
||||
|
||||
/**
|
||||
* 金额处理方法 向上取整 保留两位小数
|
||||
*
|
||||
* @param amount 金额
|
||||
* @param number 保留位数
|
||||
* @return 返回结果
|
||||
*/
|
||||
public static BigDecimal amountFormat(BigDecimal amount, int number) {
|
||||
if (null != amount) {
|
||||
amount = amount.setScale(number, BigDecimal.ROUND_HALF_UP);
|
||||
}
|
||||
return amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化金额
|
||||
* “,##0.00”
|
||||
*
|
||||
* @param money 金额
|
||||
* @return
|
||||
*/
|
||||
public static String formatMoney(String money) {
|
||||
return Objects.isNull(money) ? "" : NumberUtil.decimalFormatMoney(Double.parseDouble(money));
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化金额
|
||||
* “,##0.00”
|
||||
*
|
||||
* @param money 金额
|
||||
* @return
|
||||
*/
|
||||
public static String formatMoney(BigDecimal money) {
|
||||
return Objects.isNull(money) ? "" : NumberUtil.decimalFormatMoney(money.doubleValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取流水号
|
||||
*
|
||||
* @param number 流水编号
|
||||
* @param type 类型
|
||||
* @param org 机构编码
|
||||
* @return 返回结果
|
||||
*/
|
||||
public static String flowNumber(Integer number, String type, String org) {
|
||||
int year = DateUtil.year(new Date());
|
||||
StringBuilder flowNumber = new StringBuilder();
|
||||
flowNumber.append(type).append(org).append(year).append(String.format("%05d", number));
|
||||
return flowNumber.toString();
|
||||
}
|
||||
|
||||
public static String getFlowId() {
|
||||
String flowId = DateUtil.format(new Date(), CommonUtil.DATE_MILLISECOND_PATTERN);
|
||||
return flowId.substring(0, 14) + String.format("%03d", Integer.valueOf(flowId.substring(14)));
|
||||
}
|
||||
|
||||
public static String formatDateToStr(String strDate) throws ParseException {
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat(CommonUtil.DATE_PATTERN_DATE);
|
||||
return DateUtil.format(dateFormat.parse(strDate), "yyyy-MM");
|
||||
}
|
||||
|
||||
public static LocalDateTime getLocalDateTimeByDate(Date date) {
|
||||
DateTimeFormatter df = DateTimeFormatter.ofPattern(DATE_PATTERN);
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_PATTERN);
|
||||
return LocalDateTime.parse(simpleDateFormat.format(date), df);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取某年第一天日期
|
||||
*
|
||||
* @param year 年份
|
||||
* @return Date
|
||||
*/
|
||||
public static Date getFirstOfYear(int year) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.clear();
|
||||
calendar.set(Calendar.YEAR, year);
|
||||
return calendar.getTime();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取某年最后一天日期
|
||||
*
|
||||
* @param year 年份
|
||||
* @return Date
|
||||
*/
|
||||
public static Date getLastOfYear(int year) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.clear();
|
||||
calendar.set(Calendar.YEAR, year);
|
||||
calendar.roll(Calendar.DAY_OF_YEAR, -1);
|
||||
return calendar.getTime();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 文件路径过滤
|
||||
*
|
||||
* @param url 路径
|
||||
* @param findField 过滤字段
|
||||
* @return 返回结果
|
||||
*/
|
||||
public static String findUrlField(String url, String findField) {
|
||||
|
||||
String result = "";
|
||||
if (StringUtils.isNotBlank(url)) {
|
||||
if (url.contains(findField)) {
|
||||
String[] urls = url.split("&");
|
||||
for (int i = 0; i < urls.length; i++) {
|
||||
if (urls[i].contains(findField)) {
|
||||
result = urls[i].split("=")[1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static String getParam(String url, String name) {
|
||||
url = url.replaceAll("&", "&");
|
||||
String params = url.substring(url.indexOf("?") + 1, url.length());
|
||||
Map<String, String> split = Splitter.on("&").withKeyValueSeparator("=").split(params);
|
||||
return split.get(name);
|
||||
}
|
||||
|
||||
public static String updateFileName(String fileName) {
|
||||
String specialChars = "/\\:*?\"<>|";
|
||||
for (char c : specialChars.toCharArray()) {
|
||||
String replaceStr = String.valueOf(c);
|
||||
if (fileName.contains(replaceStr)) {
|
||||
if(isMetaChar(String.valueOf(c))){
|
||||
replaceStr= "[" + replaceStr+"]";
|
||||
}
|
||||
fileName = fileName.replaceAll(replaceStr,"_");
|
||||
}
|
||||
}
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public static boolean isMetaChar(String metaChar) {
|
||||
|
||||
Boolean flag = Boolean.FALSE;
|
||||
String metaChars = "*?+|";
|
||||
|
||||
for(char m : metaChars.toCharArray()){
|
||||
if(metaChar.contains(String.valueOf(m))){
|
||||
flag = Boolean.TRUE;
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
|
||||
public static String findKeyByValue(Map<String, String> map, String value) {
|
||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||
if (entry.getValue().equals(value)) {
|
||||
return entry.getKey();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -3,7 +3,6 @@ package com.coscoshipping.ebtp.project.role.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
|
||||
import com.chinaunicom.mall.ebtp.common.util.PropertyUtils;
|
||||
import com.coscoshipping.ebtp.project.role.entity.vo.SysRoleVO;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
@ -15,7 +14,6 @@ import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import com.coscoshipping.ebtp.project.role.entity.SysRole;
|
||||
import com.coscoshipping.ebtp.project.role.service.SysRoleService;
|
||||
|
@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest;
|
||||
import com.chinaunicom.mall.ebtp.common.exception.common.CommonExceptionEnum;
|
||||
import com.chinaunicom.mall.ebtp.common.exception.entity.BusinessException;
|
||||
import com.coscoshipping.ebtp.project.role.dao.SysRoleMenuMapper;
|
||||
import com.coscoshipping.ebtp.project.role.entity.SysRoleMenu;
|
||||
import com.coscoshipping.ebtp.project.role.entity.vo.SysRoleVO;
|
||||
@ -21,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import com.coscoshipping.ebtp.project.role.dao.SysRoleMapper;
|
||||
import com.coscoshipping.ebtp.project.role.entity.SysRole;
|
||||
import com.coscoshipping.ebtp.project.role.service.SysRoleService;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
@ -68,25 +70,29 @@ public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper,SysRole>
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Boolean insertByVo(SysRoleVO vo) {
|
||||
vo.setRoleId(PropertyUtils.getSnowflakeId()).setCreateDate(LocalDateTime.now());
|
||||
// SysRole add = BeanUtil.toBean(VO, SysRole.class);
|
||||
validEntityBeforeSave(vo,false);
|
||||
boolean flag = baseMapper.insert(vo) > 0;
|
||||
if (flag) {
|
||||
System.out.println("vo.getMenuIds() == null: " + (vo.getMenuIds() == null));
|
||||
System.out.println("vo.getMenuIds().isEmpty(): " + (vo.getMenuIds() != null && vo.getMenuIds().isEmpty()));
|
||||
if (flag && vo.getMenuIds() != null && !vo.getMenuIds().isEmpty()) {
|
||||
insertRoleMenu(vo);
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Boolean updateByVo(SysRoleVO vo) {
|
||||
// SysRole update = BeanUtil.toBean(vo, SysRole.class);
|
||||
validEntityBeforeSave(vo,true);
|
||||
// 删除角色与菜单关联
|
||||
roleMenuService.remove(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, vo.getRoleId()));
|
||||
boolean flag = baseMapper.updateById(vo) > 0;
|
||||
if (flag) {
|
||||
if (flag && vo.getMenuIds() != null && !vo.getMenuIds().isEmpty()) {
|
||||
insertRoleMenu(vo);
|
||||
}
|
||||
return flag;
|
||||
@ -132,7 +138,10 @@ public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper,SysRole>
|
||||
lqw.ne(StringUtils.isNotBlank(entity.getRoleId()), SysRole::getRoleId, entity.getRoleId());
|
||||
}
|
||||
List<SysRole> roleList =baseMapper.selectList(lqw);
|
||||
CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("角色编码已存在",roleList.size()>1);
|
||||
if (roleList.size()>1) {
|
||||
throw new BusinessException(CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR, "角色编码已存在");
|
||||
}
|
||||
// CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("角色编码已存在",roleList.size()>1);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<SysRole> buildQueryWrapper(SysRoleVO vo) {
|
||||
|
Reference in New Issue
Block a user