diff --git a/src/main/java/com/coscoshipping/ebtp/project/org/controller/SysOrgController.java b/src/main/java/com/coscoshipping/ebtp/project/org/controller/SysOrgController.java new file mode 100644 index 0000000..d202f32 --- /dev/null +++ b/src/main/java/com/coscoshipping/ebtp/project/org/controller/SysOrgController.java @@ -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 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 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 get(@ApiParam(value = "主键id", required = true) @PathVariable String id){ + + SysOrg sysOrg = iSysOrgService.getById(id); + + return BaseResponse.success(sysOrg); + } + + /** + * 删除数据 + * @param id 主键id + * @return BaseResponse + * @author dino + * @date 2020/10/21 14:56 + */ + @ApiOperation(value = "delete",notes = "删除数据") + @GetMapping("/del/{id}") + public BaseResponse 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(@ApiParam(value = "查询对象数据", required = false) SysOrg param) { + //查询 + LambdaQueryWrapper query = Wrappers.lambdaQuery(param); + List 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> getPage(@ApiParam(value = "对象数据", required = true) @RequestBody SysOrgVO sysOrgVO){ + + return BaseResponse.success(iSysOrgService.getPage(sysOrgVO)); + } + @ApiOperation("查询所有数据(树形结构)") + @GetMapping("/queryAll") + public BaseResponse> queryAll(SysOrg sysOrg){ + return BaseResponse.success(iSysOrgService.getTreeByNode(sysOrg)); + } +} diff --git a/src/main/java/com/coscoshipping/ebtp/project/org/dao/SysOrgMapper.java b/src/main/java/com/coscoshipping/ebtp/project/org/dao/SysOrgMapper.java new file mode 100644 index 0000000..6bd55bb --- /dev/null +++ b/src/main/java/com/coscoshipping/ebtp/project/org/dao/SysOrgMapper.java @@ -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 { +} diff --git a/src/main/java/com/coscoshipping/ebtp/project/org/dao/mapper/SysOrgMapper.xml b/src/main/java/com/coscoshipping/ebtp/project/org/dao/mapper/SysOrgMapper.xml new file mode 100644 index 0000000..78e98ff --- /dev/null +++ b/src/main/java/com/coscoshipping/ebtp/project/org/dao/mapper/SysOrgMapper.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update sys_org + set + delete_flag="1" + where ID=#{id } + + \ No newline at end of file diff --git a/src/main/java/com/coscoshipping/ebtp/project/org/entity/SysOrg.java b/src/main/java/com/coscoshipping/ebtp/project/org/entity/SysOrg.java new file mode 100644 index 0000000..83c6a02 --- /dev/null +++ b/src/main/java/com/coscoshipping/ebtp/project/org/entity/SysOrg.java @@ -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; + + + +} diff --git a/src/main/java/com/coscoshipping/ebtp/project/org/entity/vo/SysOrgVO.java b/src/main/java/com/coscoshipping/ebtp/project/org/entity/vo/SysOrgVO.java new file mode 100644 index 0000000..5583925 --- /dev/null +++ b/src/main/java/com/coscoshipping/ebtp/project/org/entity/vo/SysOrgVO.java @@ -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 children; + + @ApiModelProperty(value = "树形结构所有部门ID") + private String allDepartmentId; +} diff --git a/src/main/java/com/coscoshipping/ebtp/project/org/service/SysOrgService.java b/src/main/java/com/coscoshipping/ebtp/project/org/service/SysOrgService.java new file mode 100644 index 0000000..60faf83 --- /dev/null +++ b/src/main/java/com/coscoshipping/ebtp/project/org/service/SysOrgService.java @@ -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{ + + IPage getPage(SysOrgVO vo); + + + /** + * 查询结构节点树形展示 + * + * @param vo + * @return + */ + List getTreeByNode(SysOrg vo); + + + Boolean insertByVo(SysOrgVO bo); + + + Boolean updateByVo(SysOrgVO bo); + + /** + * + * @param orgId + * @return + */ + Boolean deleteById(String orgId); +} diff --git a/src/main/java/com/coscoshipping/ebtp/project/org/service/impl/SysOrgServiceImpl.java b/src/main/java/com/coscoshipping/ebtp/project/org/service/impl/SysOrgServiceImpl.java new file mode 100644 index 0000000..76ee3b0 --- /dev/null +++ b/src/main/java/com/coscoshipping/ebtp/project/org/service/impl/SysOrgServiceImpl.java @@ -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 implements SysOrgService { + + @Override + public IPage getPage(SysOrgVO SysOrgVO) { + LambdaQueryWrapper query = buildQueryWrapper(SysOrgVO); + + if(null == SysOrgVO.getBasePageRequest()){ + SysOrgVO.setBasePageRequest(new BasePageRequest()); + } + //查询 + IPage result = new Page<>(SysOrgVO.getBasePageRequest().getPageNo(), SysOrgVO.getBasePageRequest().getPageSize()); + result = this.page(result, query); + return result; + } + + @Override + public List getTreeByNode(SysOrg org) { + SysOrgVO sysOrgVO = new SysOrgVO(); + List sysOrgList = new ArrayList<>(); + if (!StringUtils.isEmpty(org.getOrgName()) || !StringUtils.isEmpty(org.getOrgNum())){ + SysOrgVO vo = BeanUtil.toBean(org, SysOrgVO.class); + IPage 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 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 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().eq(SysRoleMenu::getRoleId, vo.getRoleId())); + return baseMapper.updateById(vo) > 0; + } + + + @Override + public Boolean deleteById(String orgId) { + //当没有下级组织才可删除 + List orgList = this.list(new LambdaQueryWrapper().eq(SysOrg::getUpOrgId, orgId)); + CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("存在下级组织,不可删除", !orgList.isEmpty()); + // 删除机构与人员关联 +// roleMenuService.remove(new LambdaQueryWrapper().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 idPath = new ArrayList<>(); + List 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 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 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 sysOrgVOList, SysOrgVO sysOrg, String allDepartmentId) { + + List 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 buildQueryWrapper(SysOrgVO vo) { + LambdaQueryWrapper 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; + } +} diff --git a/src/main/java/com/coscoshipping/ebtp/project/org/util/CommonUtil.java b/src/main/java/com/coscoshipping/ebtp/project/org/util/CommonUtil.java new file mode 100644 index 0000000..854a53e --- /dev/null +++ b/src/main/java/com/coscoshipping/ebtp/project/org/util/CommonUtil.java @@ -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 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 map, String value) { + for (Map.Entry entry : map.entrySet()) { + if (entry.getValue().equals(value)) { + return entry.getKey(); + } + } + return null; + } +} diff --git a/src/main/java/com/coscoshipping/ebtp/project/role/controller/SysRoleController.java b/src/main/java/com/coscoshipping/ebtp/project/role/controller/SysRoleController.java index 6368c9e..67fdb43 100644 --- a/src/main/java/com/coscoshipping/ebtp/project/role/controller/SysRoleController.java +++ b/src/main/java/com/coscoshipping/ebtp/project/role/controller/SysRoleController.java @@ -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; diff --git a/src/main/java/com/coscoshipping/ebtp/project/role/service/impl/SysRoleServiceImpl.java b/src/main/java/com/coscoshipping/ebtp/project/role/service/impl/SysRoleServiceImpl.java index 6d785b9..9f49c89 100644 --- a/src/main/java/com/coscoshipping/ebtp/project/role/service/impl/SysRoleServiceImpl.java +++ b/src/main/java/com/coscoshipping/ebtp/project/role/service/impl/SysRoleServiceImpl.java @@ -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 } @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().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 lqw.ne(StringUtils.isNotBlank(entity.getRoleId()), SysRole::getRoleId, entity.getRoleId()); } List 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 buildQueryWrapper(SysRoleVO vo) {