组织管理

This commit is contained in:
jlzhangyx5
2025-05-14 17:04:17 +08:00
parent 807516b04b
commit 52d3e490f0
10 changed files with 922 additions and 5 deletions

View File

@ -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));
}
}

View File

@ -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> {
}

View File

@ -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>

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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("&amp;", "&");
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;
}
}

View File

@ -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;

View File

@ -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) {