| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- package cn.com.goldenwater.dcproj.service.impl.system;
- import cn.com.goldenwater.core.service.AbstractCrudService;
- import cn.com.goldenwater.dcproj.dao.BisInspAllRlationPersDao;
- import cn.com.goldenwater.dcproj.dao.MenuDao;
- import cn.com.goldenwater.dcproj.dao.PrivDao;
- import cn.com.goldenwater.dcproj.dto.BisInspAllRelationPersPrivDto;
- import cn.com.goldenwater.dcproj.dto.MenuDto;
- import cn.com.goldenwater.dcproj.dto.PrivDto;
- import cn.com.goldenwater.dcproj.dto.PrivSysDto;
- import cn.com.goldenwater.dcproj.enums.EnumBean;
- import cn.com.goldenwater.dcproj.enums.PrivTypeEnum;
- import cn.com.goldenwater.dcproj.enums.SqlExecuteStateEnum;
- import cn.com.goldenwater.dcproj.enums.SystemFlagEnum;
- import cn.com.goldenwater.dcproj.model.BisInspAllRlationPers;
- import cn.com.goldenwater.dcproj.model.Menu;
- import cn.com.goldenwater.dcproj.model.Priv;
- import cn.com.goldenwater.dcproj.param.GetPrivByRoleIdParam;
- import cn.com.goldenwater.dcproj.param.GetPrivByUserIdParam;
- import cn.com.goldenwater.dcproj.param.MenuParam;
- import cn.com.goldenwater.dcproj.param.PrivParam;
- import cn.com.goldenwater.dcproj.service.PrivService;
- import cn.com.goldenwater.dcproj.utils.DateUtils;
- import cn.com.goldenwater.target.CheckException;
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Optional;
- /**
- * @author lune
- * @date 2018-2-13
- */
- @Service
- @Transactional
- public class PrivServiceImpl extends AbstractCrudService<Priv, PrivParam> implements PrivService {
- @Autowired
- private PrivDao privDao;
- @Autowired
- private MenuDao menuDao;
- @Autowired
- private BisInspAllRlationPersDao bisInspAllRlationPersDao;
- public PrivServiceImpl(PrivDao privDao) {
- super(privDao);
- this.privDao = privDao;
- }
- @Override
- public List<PrivDto> findPageStatic(PrivParam privParam) {
- PageHelper.startPage(privParam.getPageNum(), privParam.getPageSize(), false);
- return privDao.findPageStatic(privParam);
- }
- @Override
- public PageInfo<PrivDto> findPageInfoStatic(PrivParam privParam) {
- PageHelper.startPage(privParam.getPageNum(), privParam.getPageSize(), false);
- List<PrivDto> list = privDao.findPageStatic(privParam);
- PageInfo<PrivDto> page = new PageInfo(list);
- return page;
- }
- @Override
- public PageInfo<PrivDto> findTreeByRoleId(GetPrivByRoleIdParam p) throws Exception {
- String persId = p.getUserId();//默认过滤权限
- BisInspAllRlationPers per = bisInspAllRlationPersDao.get(p.getUserId());
- if (per == null) {
- throw new Exception("此用户不存在:" + p.getUserId());
- }
- if (per.getOwnerSystem() == null) {
- throw new Exception("用户所属系统不正确:" + per.getOwnerSystem());
- }
- List<String> systemList = new ArrayList<>();
- if (!SystemFlagEnum.DC_ALL.getValue().equals(per.getOwnerSystem())) {
- systemList.add(SystemFlagEnum.DC_ALL.getValue());
- systemList.add(per.getOwnerSystem());
- }
- PageHelper.startPage(p.getPageNum(), p.getPageSize());
- //如果是李海超账户或者金水管理机构账户则提取所有权限
- if (per.getOrgId().equals("041") || per.getGuid().equals("80df1213ad9f493e85a771d6f4b18a17")) {
- persId = "";
- }
- List<PrivDto> list = privDao.findTreeByRoleId(p.getRoleId(), systemList, p.getPrivName(), persId);
- return new PageInfo<>(list);
- }
- @Override
- public List<PrivDto> listByRoleId(GetPrivByRoleIdParam p) {
- BisInspAllRlationPers per = bisInspAllRlationPersDao.get(p.getUserId());
- Optional.ofNullable(per).orElseThrow(() -> new CheckException("此用户不存在:" + p.getUserId()));
- Optional.of(per).map(BisInspAllRlationPers::getOwnerSystem)
- .orElseThrow(() -> new CheckException("用户所属系统不正确:" + per.getOwnerSystem()));
- List<String> systemList = new ArrayList<>();
- if (!SystemFlagEnum.DC_ALL.getValue().equals(per.getOwnerSystem())) {
- systemList.add(SystemFlagEnum.DC_ALL.getValue());
- systemList.add(per.getOwnerSystem());
- }
- return privDao.findTreeByRoleId(p.getRoleId(), systemList, p.getPrivName(), "");
- }
- // 建立树形结构
- public void buildTree(List<Priv> list) {
- List<Priv> privList = privDao.findList(null);
- for (Priv priv : list) {
- buildChilTree(priv, privList);
- }
- }
- //递归,建立子树形结构
- private Priv buildChilTree(Priv pNode, List<Priv> privList) {
- List<Priv> chilMenus = new ArrayList<>();
- for (Priv menuNode : privList) {
- if (menuNode.getParentId().equals(pNode.getId())) {
- chilMenus.add(buildChilTree(menuNode, privList));
- }
- }
- pNode.setChildren(chilMenus);
- return pNode;
- }
- @Override
- public PageInfo<Priv> findTreeShapeByRoleId(GetPrivByRoleIdParam p) throws Exception {
- BisInspAllRlationPers per = bisInspAllRlationPersDao.get(p.getUserId());
- if (per == null) {
- throw new Exception("此用户不存在:" + p.getUserId());
- }
- if (per.getOwnerSystem() == null) {
- throw new Exception("用户所属系统不正确:" + per.getOwnerSystem());
- }
- List<String> systemList = new ArrayList<>();
- if (!SystemFlagEnum.DC_ALL.getValue().equals(per.getOwnerSystem())) {
- systemList.add(SystemFlagEnum.DC_ALL.getValue());
- systemList.add(per.getOwnerSystem());
- }
- PageHelper.startPage(p.getPageNum(), p.getPageSize());
- List<Priv> list = privDao.findFirstLevelTree(systemList, p.getPrivName());
- // 获取子节点
- buildTree(list);
- return new PageInfo<Priv>(list);
- }
- @Override
- public void insertPriv(Priv priv, List<Menu> list) {
- privDao.insert(priv);
- menuDao.clearMemuPriv(priv.getId());
- if (null != list && list.size() > 0) {
- menuDao.updateMemuPriv(list);
- }
- }
- @Override
- public void updatePriv(Priv priv, List<Menu> list) {
- privDao.update(priv);
- menuDao.clearMemuPriv(priv.getId());
- if (null != list && list.size() > 0) {
- menuDao.updateMemuPriv(list);
- }
- }
- /**
- * TODO 耗时太长,需要优化
- *
- * @param p
- * @return
- * @throws Exception
- */
- @Override
- public BisInspAllRelationPersPrivDto getPrivByUserId(GetPrivByUserIdParam p) {
- try {
- BisInspAllRlationPers pers = bisInspAllRlationPersDao.get(p.getUserId());
- Optional.ofNullable(pers).orElseThrow(() -> new CheckException("此人员不存在:" + p.getUserId()));
- String owerSystem = pers.getOwnerSystem();
- BisInspAllRelationPersPrivDto dto = new BisInspAllRelationPersPrivDto();
- dto.setGuid(pers.getGuid());
- dto.setAdmDuty(pers.getAdmDuty());
- dto.setBornDate(DateUtils.Date2Str(pers.getBornDate(), "yyyy-MM-dd"));
- dto.setCallnumber(pers.getCallnumber());
- dto.setCollTime(DateUtils.Date2Str(pers.getCollTime(), "yyyy-MM-dd hh:mm:ss"));
- dto.setDpnm(pers.getDpnm());
- dto.setDppost(pers.getDppost());
- dto.setEmail(pers.getEmail());
- dto.setFaxnumb(pers.getFaxnumb());
- dto.setIdnm(pers.getIdnm());
- dto.setImgurl(pers.getImgurl());
- dto.setLoginTm(DateUtils.Date2Str(pers.getLoginTm(), "yyyy-MM-dd hh:mm:ss"));
- dto.setMobilenumb(pers.getMobilenumb());
- dto.setOrgId(pers.getOrgId());
- dto.setOrgNm(pers.getOrgNm());
- dto.setPlst(pers.getPlst());
- dto.setTelnumb(pers.getTelnumb());
- dto.setSex(pers.getSex());
- dto.setSchool(pers.getSchool());
- dto.setRemark(pers.getRemark());
- dto.setSpecialty(pers.getSpecialty());
- dto.setOwnerSystem(pers.getOwnerSystem());
- dto.setPersName(pers.getPersName());
- List<MenuDto> menuList = menuDao.getListByUserId(p.getUserId(), PrivTypeEnum.MENU.getValue(), p.getOwnApp(), owerSystem);
- List<PrivSysDto> privList = privDao.getListByUserId(p.getUserId(), owerSystem);
- dto.setMenu(getMenu(menuList, "0"));
- dto.setPriv(getPrivTree(privList, "0"));
- return dto;
- } catch (Exception ex) {
- ex.printStackTrace();
- return null;
- }
- }
- @Override
- public void remove(String id) {
- MenuParam mp = new MenuParam();
- mp.setPrivId(id);
- menuDao.deleteBy(mp);
- privDao.delete(id);
- }
- @Override
- public Priv modify(Priv p) throws Exception {
- Priv priv = privDao.get(p.getId());
- if (priv == null) {
- throw new Exception("此权限不存在");
- }
- if (StringUtils.isNotBlank(p.getPrivName())) {
- Menu menu = new Menu();
- menu.setMenuName(p.getPrivName());
- menu.setPrivId(p.getId());
- int ret = menuDao.updateByPrivId(menu);
- if (ret != SqlExecuteStateEnum.SUCCESS.getValue()) {
- throw new Exception("更新菜单名字失败");
- }
- }
- int ret = privDao.update(p);
- if (ret != SqlExecuteStateEnum.SUCCESS.getValue()) {
- throw new Exception("更新权限失败");
- }
- Priv one = privDao.get(p.getId());
- return one;
- }
- @Override
- public Priv add(Priv p) throws Exception {
- if (PrivTypeEnum.MENU.getValue().equals(p.getPrivType())) {
- throw new Exception("添加菜单类型权限请前往菜单页面添加");
- }
- if (p.getSeq() == null || p.getSeq() == 0) {
- if (StringUtils.isBlank(p.getParentId())) {
- p.setParentId("0");
- }
- Long maxSeq = privDao.selectMaxSeqByParentId(p.getParentId());
- if (maxSeq == null) {
- maxSeq = 0L;
- }
- p.setSeq(maxSeq + 1);
- }
- int ret = insert(p);
- if (ret != SqlExecuteStateEnum.SUCCESS.getValue()) {
- throw new Exception("插入权限失败");
- }
- return p;
- }
- @Override
- public List<PrivSysDto> getPrivViewByUserId(GetPrivByUserIdParam p) throws Exception {
- BisInspAllRlationPers pers = bisInspAllRlationPersDao.get(p.getUserId());
- if (pers == null) {
- throw new Exception("此人员不存在:" + p.getUserId());
- }
- String owerSystem = pers.getOwnerSystem();
- List<PrivSysDto> privList = privDao.getPriViewListByUserId(p.getUserId(), p.getOrgId(), owerSystem, "图层");
- return privList;
- }
- @Override
- public List<EnumBean> getSysFlagByUserId(String userId) throws Exception {
- List<EnumBean> list = new ArrayList<>();
- BisInspAllRlationPers per = bisInspAllRlationPersDao.get(userId);
- if (per == null) {
- throw new Exception("此用户不存在:" + userId);
- }
- if (StringUtils.isBlank(per.getOwnerSystem())) {
- throw new Exception("用户所属系统不存在:" + per.getOwnerSystem());
- }
- if (SystemFlagEnum.DC_ALL.getValue().equals(per.getOwnerSystem())) {
- list = SystemFlagEnum.getAll();
- } else {
- EnumBean bean = new EnumBean();
- bean.setName(SystemFlagEnum.getName(per.getOwnerSystem()));
- bean.setValue(per.getOwnerSystem());
- list.add(bean);
- }
- return list;
- }
- private List<MenuDto> getMenu(List<MenuDto> list, String pid) {
- List<MenuDto> menuList = new ArrayList<>();
- //取出所有菜单
- for (int i = 0; i < list.size(); i++) {
- MenuDto menu = list.get(i);
- if (menu == null) {
- continue;
- }
- // 取出所有父菜单
- if (pid.equals(menu.getParentId())) {
- if (menu.getFlagLeaf() != null && !menu.getFlagLeaf()) {
- menu.setMenuList(getMenu(list, menu.getId()));
- }
- menuList.add(menu);
- }
- }
- return menuList;
- }
- private List<PrivSysDto> getPrivTree(List<PrivSysDto> list, String pid) {
- List<PrivSysDto> privList = new ArrayList<>();
- //取出所有菜单
- for (int i = 0; i < list.size(); i++) {
- PrivSysDto priv = list.get(i);
- if (priv == null || null == priv.getParentId() || StringUtils.isBlank(priv.getParentId())) {
- continue;
- } else {
- if (pid.equals(priv.getParentId())) {//取出所有父菜单
- priv.setPrivList(getPrivTree(list, priv.getId()));
- privList.add(priv);
- }
- }
- }
- return privList;
- }
- }
|