package com.kidgrow.usercenter.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kidgrow.common.model.PageResult; import com.kidgrow.common.model.ResultBody; import com.kidgrow.common.model.SysOrganization; import com.kidgrow.common.service.impl.SuperServiceImpl; import com.kidgrow.redis.util.RedisConstant; import com.kidgrow.redis.util.RedisUtils; import com.kidgrow.usercenter.mapper.SysOrganizationMapper; import com.kidgrow.usercenter.mapper.SysUserOrgMapper; import com.kidgrow.usercenter.service.ISysOrganizationService; import com.kidgrow.usercenter.vo.SysOrganizationVo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cglib.beans.BeanCopier; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
* * @version 1.0 * @Description: 组织架构表
* @Project: 用户中心
* @CreateDate: Created in 2020-03-31 11:01:35
* @Author: liuke */ @Slf4j @Service public class SysOrganizationServiceImpl extends SuperServiceImpl implements ISysOrganizationService { @Autowired RedisUtils redisUtils; @Autowired SysUserOrgMapper sysUserOrgMapper; /** * 列表 * * @param params * @return */ @Override public PageResult findList(Map params) { Page page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit")); List list = baseMapper.findList(page, params); return PageResult.builder().data(list).code(0).count(page.getTotal()).build(); } /** * 根据SysOrganization对象当做查询条件进行查询 * * @param sysOrganization * @return SysOrganization */ @Override public SysOrganization findByObject(SysOrganization sysOrganization) { return baseMapper.findByObject(sysOrganization); } /** * 根据用户 获取组织 * * @param userId * @return */ @Override public List findListByUserId(Long userId) { return baseMapper.findListByUserId(userId); } /** * 根据map 查询, 将参数中的 access_token 去掉 * * @param params * @return */ @Override public ResultBody getListByMap(Map params) { //将access_token 参数去掉 params.remove("access_token"); List sysOrganizations = baseMapper.selectByMap(params); List sysOrganizationVos = new ArrayList<>(); sysOrganizations.forEach(e -> { if (e.getOrgParentId() != null) { SysOrganizationVo sysOrganizationVo = new SysOrganizationVo(); BeanCopier beanCopier = BeanCopier.create(SysOrganization.class, SysOrganizationVo.class, false); beanCopier.copy(e, sysOrganizationVo, null); SysOrganization sysOrganization = baseMapper.selectById(e.getOrgParentId()); if (sysOrganization != null) { sysOrganizationVo.setOrgParentName(sysOrganization.getOrgName()); } sysOrganizationVos.add(sysOrganizationVo); } }); return ResultBody.ok().data(sysOrganizationVos); } /** * 更新状态 * * @param params * @return */ @Override public ResultBody updateEnabled(Map params) { Long id = MapUtils.getLong(params, "id"); if (id == null) { return ResultBody.failed("请选取一条数据"); } SysOrganization sysOrganization = baseMapper.selectById(id); if (sysOrganization != null) { sysOrganization.setEnabled(MapUtils.getBoolean(params, "enabled")); int i = baseMapper.updateById(sysOrganization); redisUtils.hdel(RedisConstant.ORGANIZATION, sysOrganization.getId().toString()); redisUtils.hset(RedisConstant.ORGANIZATION, sysOrganization.getId().toString(), sysOrganization); if (i > 0) { return ResultBody.ok(); } else { return ResultBody.failed("更新失败"); } } else { return ResultBody.failed("更新失败"); } } /** * 获取树状图 * * @param params * @return */ @Override public ResultBody getTree(Map params) { List sysOrganizations = baseMapper.selectByMap(params); List> treeData = getTreeData(Long.valueOf("-1"), sysOrganizations); return ResultBody.ok().data(treeData); } @Override public int deleteByUserId(Long userId) { Map params = new HashMap<>(); params.put("userId", userId); return sysUserOrgMapper.deleteByMap(params); } /** * 将数据 封装成 tree (递归方式) * * @param MyId * @param sysOrganizations * @return */ public List> getTreeData(Long MyId, List sysOrganizations) { List> listMap = new ArrayList<>(); Map collect = sysOrganizations.stream().collect(Collectors.toMap(SysOrganization::getId, SysOrganization -> SysOrganization)); List idList = sysOrganizations.stream().filter(e -> e.getOrgParentId() == MyId).map(e -> e.getId()).collect(Collectors.toList()); for (Long id : idList ) { Map map = new HashMap<>(); map.put("id", "" + id); map.put("name", collect.get(id).getOrgName()); map.put("level", collect.get(id).getOrgLevel()); map.put("parentId", collect.get(id).getOrgParentId()); List childs = sysOrganizations.stream().filter(e -> e.getOrgParentId() == id).map(e -> e.getId()).collect(Collectors.toList()); if (childs.size() > 0) { List> treeData = getTreeData(id, sysOrganizations); map.put("children", treeData); } listMap.add(map); } return listMap; } /** * 保存或者更新 * * @param sysOrganization * @return */ @Override @Transactional public boolean saveOrUpdateSer(SysOrganization sysOrganization) { //获取code if (sysOrganization.getId() == null) { //保存 String code = this.getCode(sysOrganization); sysOrganization.setOrgCode(code); baseMapper.insert(sysOrganization); } else { //更新 SysOrganization sysOrg = baseMapper.selectById(sysOrganization.getId()); if (sysOrg.getOrgParentId() != sysOrganization.getOrgParentId()) { String code = this.getCode(sysOrganization); sysOrganization.setOrgCode(code); } int i = baseMapper.updateById(sysOrganization); } redisUtils.hdel(RedisConstant.ORGANIZATION, sysOrganization.getId().toString()); redisUtils.hset(RedisConstant.ORGANIZATION, sysOrganization.getId().toString(), sysOrganization); return true; } /** * 获取自己组织的code * * @param sysOrganization * @return */ public String getCode(SysOrganization sysOrganization) { //获取父级 Long orgParentId = sysOrganization.getOrgParentId(); if (orgParentId == null) { return null; } SysOrganization sysOrg = baseMapper.selectById(orgParentId); if (sysOrg != null) { String orgCode = sysOrg.getOrgCode(); //查询 QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("org_parent_id", sysOrg.getId()); queryWrapper.orderByAsc("id"); List list = baseMapper.selectList(queryWrapper); if (list.size() > 0) { SysOrganization sysOrganizationLast = list.get(list.size() - 1); String orgCodeLast = sysOrganizationLast.getOrgCode(); String orgCodeLastQianZhui = orgCodeLast.substring(0, orgCodeLast.length() - 4); Integer codenum = Integer.valueOf(orgCodeLast.substring(orgCodeLast.length() - 4)); String str = "0000"; str += (codenum + 1); String substring = str.substring(str.length() - 4); return orgCodeLastQianZhui + substring; } else { String fucode = sysOrg.getOrgCode(); String str = "0001"; return fucode + str; } } return null; } }