4f123498a577a2a26bc21ce1bced7cdfbe1ce6c5.svn-base 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. package cn.com.goldenwater.dcproj.service.impl.system;
  2. import cn.com.goldenwater.core.service.AbstractCrudService;
  3. import cn.com.goldenwater.dcproj.dao.BisInspAllRlationPersDao;
  4. import cn.com.goldenwater.dcproj.dao.MenuDao;
  5. import cn.com.goldenwater.dcproj.dao.PrivDao;
  6. import cn.com.goldenwater.dcproj.dto.BisInspAllRelationPersPrivDto;
  7. import cn.com.goldenwater.dcproj.dto.MenuDto;
  8. import cn.com.goldenwater.dcproj.dto.PrivDto;
  9. import cn.com.goldenwater.dcproj.dto.PrivSysDto;
  10. import cn.com.goldenwater.dcproj.enums.EnumBean;
  11. import cn.com.goldenwater.dcproj.enums.PrivTypeEnum;
  12. import cn.com.goldenwater.dcproj.enums.SqlExecuteStateEnum;
  13. import cn.com.goldenwater.dcproj.enums.SystemFlagEnum;
  14. import cn.com.goldenwater.dcproj.model.BisInspAllRlationPers;
  15. import cn.com.goldenwater.dcproj.model.Menu;
  16. import cn.com.goldenwater.dcproj.model.Priv;
  17. import cn.com.goldenwater.dcproj.param.GetPrivByRoleIdParam;
  18. import cn.com.goldenwater.dcproj.param.GetPrivByUserIdParam;
  19. import cn.com.goldenwater.dcproj.param.MenuParam;
  20. import cn.com.goldenwater.dcproj.param.PrivParam;
  21. import cn.com.goldenwater.dcproj.service.PrivService;
  22. import cn.com.goldenwater.dcproj.utils.DateUtils;
  23. import cn.com.goldenwater.target.CheckException;
  24. import com.github.pagehelper.PageHelper;
  25. import com.github.pagehelper.PageInfo;
  26. import org.apache.commons.lang3.StringUtils;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.stereotype.Service;
  29. import org.springframework.transaction.annotation.Transactional;
  30. import java.util.ArrayList;
  31. import java.util.List;
  32. import java.util.Optional;
  33. /**
  34. * @author lune
  35. * @date 2018-2-13
  36. */
  37. @Service
  38. @Transactional
  39. public class PrivServiceImpl extends AbstractCrudService<Priv, PrivParam> implements PrivService {
  40. @Autowired
  41. private PrivDao privDao;
  42. @Autowired
  43. private MenuDao menuDao;
  44. @Autowired
  45. private BisInspAllRlationPersDao bisInspAllRlationPersDao;
  46. public PrivServiceImpl(PrivDao privDao) {
  47. super(privDao);
  48. this.privDao = privDao;
  49. }
  50. @Override
  51. public List<PrivDto> findPageStatic(PrivParam privParam) {
  52. PageHelper.startPage(privParam.getPageNum(), privParam.getPageSize(), false);
  53. return privDao.findPageStatic(privParam);
  54. }
  55. @Override
  56. public PageInfo<PrivDto> findPageInfoStatic(PrivParam privParam) {
  57. PageHelper.startPage(privParam.getPageNum(), privParam.getPageSize(), false);
  58. List<PrivDto> list = privDao.findPageStatic(privParam);
  59. PageInfo<PrivDto> page = new PageInfo(list);
  60. return page;
  61. }
  62. @Override
  63. public PageInfo<PrivDto> findTreeByRoleId(GetPrivByRoleIdParam p) throws Exception {
  64. String persId = p.getUserId();//默认过滤权限
  65. BisInspAllRlationPers per = bisInspAllRlationPersDao.get(p.getUserId());
  66. if (per == null) {
  67. throw new Exception("此用户不存在:" + p.getUserId());
  68. }
  69. if (per.getOwnerSystem() == null) {
  70. throw new Exception("用户所属系统不正确:" + per.getOwnerSystem());
  71. }
  72. List<String> systemList = new ArrayList<>();
  73. if (!SystemFlagEnum.DC_ALL.getValue().equals(per.getOwnerSystem())) {
  74. systemList.add(SystemFlagEnum.DC_ALL.getValue());
  75. systemList.add(per.getOwnerSystem());
  76. }
  77. PageHelper.startPage(p.getPageNum(), p.getPageSize());
  78. //如果是李海超账户或者金水管理机构账户则提取所有权限
  79. if (per.getOrgId().equals("041") || per.getGuid().equals("80df1213ad9f493e85a771d6f4b18a17")) {
  80. persId = "";
  81. }
  82. List<PrivDto> list = privDao.findTreeByRoleId(p.getRoleId(), systemList, p.getPrivName(), persId);
  83. return new PageInfo<>(list);
  84. }
  85. @Override
  86. public List<PrivDto> listByRoleId(GetPrivByRoleIdParam p) {
  87. BisInspAllRlationPers per = bisInspAllRlationPersDao.get(p.getUserId());
  88. Optional.ofNullable(per).orElseThrow(() -> new CheckException("此用户不存在:" + p.getUserId()));
  89. Optional.of(per).map(BisInspAllRlationPers::getOwnerSystem)
  90. .orElseThrow(() -> new CheckException("用户所属系统不正确:" + per.getOwnerSystem()));
  91. List<String> systemList = new ArrayList<>();
  92. if (!SystemFlagEnum.DC_ALL.getValue().equals(per.getOwnerSystem())) {
  93. systemList.add(SystemFlagEnum.DC_ALL.getValue());
  94. systemList.add(per.getOwnerSystem());
  95. }
  96. return privDao.findTreeByRoleId(p.getRoleId(), systemList, p.getPrivName(), "");
  97. }
  98. // 建立树形结构
  99. public void buildTree(List<Priv> list) {
  100. List<Priv> privList = privDao.findList(null);
  101. for (Priv priv : list) {
  102. buildChilTree(priv, privList);
  103. }
  104. }
  105. //递归,建立子树形结构
  106. private Priv buildChilTree(Priv pNode, List<Priv> privList) {
  107. List<Priv> chilMenus = new ArrayList<>();
  108. for (Priv menuNode : privList) {
  109. if (menuNode.getParentId().equals(pNode.getId())) {
  110. chilMenus.add(buildChilTree(menuNode, privList));
  111. }
  112. }
  113. pNode.setChildren(chilMenus);
  114. return pNode;
  115. }
  116. @Override
  117. public PageInfo<Priv> findTreeShapeByRoleId(GetPrivByRoleIdParam p) throws Exception {
  118. BisInspAllRlationPers per = bisInspAllRlationPersDao.get(p.getUserId());
  119. if (per == null) {
  120. throw new Exception("此用户不存在:" + p.getUserId());
  121. }
  122. if (per.getOwnerSystem() == null) {
  123. throw new Exception("用户所属系统不正确:" + per.getOwnerSystem());
  124. }
  125. List<String> systemList = new ArrayList<>();
  126. if (!SystemFlagEnum.DC_ALL.getValue().equals(per.getOwnerSystem())) {
  127. systemList.add(SystemFlagEnum.DC_ALL.getValue());
  128. systemList.add(per.getOwnerSystem());
  129. }
  130. PageHelper.startPage(p.getPageNum(), p.getPageSize());
  131. List<Priv> list = privDao.findFirstLevelTree(systemList, p.getPrivName());
  132. // 获取子节点
  133. buildTree(list);
  134. return new PageInfo<Priv>(list);
  135. }
  136. @Override
  137. public void insertPriv(Priv priv, List<Menu> list) {
  138. privDao.insert(priv);
  139. menuDao.clearMemuPriv(priv.getId());
  140. if (null != list && list.size() > 0) {
  141. menuDao.updateMemuPriv(list);
  142. }
  143. }
  144. @Override
  145. public void updatePriv(Priv priv, List<Menu> list) {
  146. privDao.update(priv);
  147. menuDao.clearMemuPriv(priv.getId());
  148. if (null != list && list.size() > 0) {
  149. menuDao.updateMemuPriv(list);
  150. }
  151. }
  152. /**
  153. * TODO 耗时太长,需要优化
  154. *
  155. * @param p
  156. * @return
  157. * @throws Exception
  158. */
  159. @Override
  160. public BisInspAllRelationPersPrivDto getPrivByUserId(GetPrivByUserIdParam p) {
  161. try {
  162. BisInspAllRlationPers pers = bisInspAllRlationPersDao.get(p.getUserId());
  163. Optional.ofNullable(pers).orElseThrow(() -> new CheckException("此人员不存在:" + p.getUserId()));
  164. String owerSystem = pers.getOwnerSystem();
  165. BisInspAllRelationPersPrivDto dto = new BisInspAllRelationPersPrivDto();
  166. dto.setGuid(pers.getGuid());
  167. dto.setAdmDuty(pers.getAdmDuty());
  168. dto.setBornDate(DateUtils.Date2Str(pers.getBornDate(), "yyyy-MM-dd"));
  169. dto.setCallnumber(pers.getCallnumber());
  170. dto.setCollTime(DateUtils.Date2Str(pers.getCollTime(), "yyyy-MM-dd hh:mm:ss"));
  171. dto.setDpnm(pers.getDpnm());
  172. dto.setDppost(pers.getDppost());
  173. dto.setEmail(pers.getEmail());
  174. dto.setFaxnumb(pers.getFaxnumb());
  175. dto.setIdnm(pers.getIdnm());
  176. dto.setImgurl(pers.getImgurl());
  177. dto.setLoginTm(DateUtils.Date2Str(pers.getLoginTm(), "yyyy-MM-dd hh:mm:ss"));
  178. dto.setMobilenumb(pers.getMobilenumb());
  179. dto.setOrgId(pers.getOrgId());
  180. dto.setOrgNm(pers.getOrgNm());
  181. dto.setPlst(pers.getPlst());
  182. dto.setTelnumb(pers.getTelnumb());
  183. dto.setSex(pers.getSex());
  184. dto.setSchool(pers.getSchool());
  185. dto.setRemark(pers.getRemark());
  186. dto.setSpecialty(pers.getSpecialty());
  187. dto.setOwnerSystem(pers.getOwnerSystem());
  188. dto.setPersName(pers.getPersName());
  189. List<MenuDto> menuList = menuDao.getListByUserId(p.getUserId(), PrivTypeEnum.MENU.getValue(), p.getOwnApp(), owerSystem);
  190. List<PrivSysDto> privList = privDao.getListByUserId(p.getUserId(), owerSystem);
  191. dto.setMenu(getMenu(menuList, "0"));
  192. dto.setPriv(getPrivTree(privList, "0"));
  193. return dto;
  194. } catch (Exception ex) {
  195. ex.printStackTrace();
  196. return null;
  197. }
  198. }
  199. @Override
  200. public void remove(String id) {
  201. MenuParam mp = new MenuParam();
  202. mp.setPrivId(id);
  203. menuDao.deleteBy(mp);
  204. privDao.delete(id);
  205. }
  206. @Override
  207. public Priv modify(Priv p) throws Exception {
  208. Priv priv = privDao.get(p.getId());
  209. if (priv == null) {
  210. throw new Exception("此权限不存在");
  211. }
  212. if (StringUtils.isNotBlank(p.getPrivName())) {
  213. Menu menu = new Menu();
  214. menu.setMenuName(p.getPrivName());
  215. menu.setPrivId(p.getId());
  216. int ret = menuDao.updateByPrivId(menu);
  217. if (ret != SqlExecuteStateEnum.SUCCESS.getValue()) {
  218. throw new Exception("更新菜单名字失败");
  219. }
  220. }
  221. int ret = privDao.update(p);
  222. if (ret != SqlExecuteStateEnum.SUCCESS.getValue()) {
  223. throw new Exception("更新权限失败");
  224. }
  225. Priv one = privDao.get(p.getId());
  226. return one;
  227. }
  228. @Override
  229. public Priv add(Priv p) throws Exception {
  230. if (PrivTypeEnum.MENU.getValue().equals(p.getPrivType())) {
  231. throw new Exception("添加菜单类型权限请前往菜单页面添加");
  232. }
  233. if (p.getSeq() == null || p.getSeq() == 0) {
  234. if (StringUtils.isBlank(p.getParentId())) {
  235. p.setParentId("0");
  236. }
  237. Long maxSeq = privDao.selectMaxSeqByParentId(p.getParentId());
  238. if (maxSeq == null) {
  239. maxSeq = 0L;
  240. }
  241. p.setSeq(maxSeq + 1);
  242. }
  243. int ret = insert(p);
  244. if (ret != SqlExecuteStateEnum.SUCCESS.getValue()) {
  245. throw new Exception("插入权限失败");
  246. }
  247. return p;
  248. }
  249. @Override
  250. public List<PrivSysDto> getPrivViewByUserId(GetPrivByUserIdParam p) throws Exception {
  251. BisInspAllRlationPers pers = bisInspAllRlationPersDao.get(p.getUserId());
  252. if (pers == null) {
  253. throw new Exception("此人员不存在:" + p.getUserId());
  254. }
  255. String owerSystem = pers.getOwnerSystem();
  256. List<PrivSysDto> privList = privDao.getPriViewListByUserId(p.getUserId(), p.getOrgId(), owerSystem, "图层");
  257. return privList;
  258. }
  259. @Override
  260. public List<EnumBean> getSysFlagByUserId(String userId) throws Exception {
  261. List<EnumBean> list = new ArrayList<>();
  262. BisInspAllRlationPers per = bisInspAllRlationPersDao.get(userId);
  263. if (per == null) {
  264. throw new Exception("此用户不存在:" + userId);
  265. }
  266. if (StringUtils.isBlank(per.getOwnerSystem())) {
  267. throw new Exception("用户所属系统不存在:" + per.getOwnerSystem());
  268. }
  269. if (SystemFlagEnum.DC_ALL.getValue().equals(per.getOwnerSystem())) {
  270. list = SystemFlagEnum.getAll();
  271. } else {
  272. EnumBean bean = new EnumBean();
  273. bean.setName(SystemFlagEnum.getName(per.getOwnerSystem()));
  274. bean.setValue(per.getOwnerSystem());
  275. list.add(bean);
  276. }
  277. return list;
  278. }
  279. private List<MenuDto> getMenu(List<MenuDto> list, String pid) {
  280. List<MenuDto> menuList = new ArrayList<>();
  281. //取出所有菜单
  282. for (int i = 0; i < list.size(); i++) {
  283. MenuDto menu = list.get(i);
  284. if (menu == null) {
  285. continue;
  286. }
  287. // 取出所有父菜单
  288. if (pid.equals(menu.getParentId())) {
  289. if (menu.getFlagLeaf() != null && !menu.getFlagLeaf()) {
  290. menu.setMenuList(getMenu(list, menu.getId()));
  291. }
  292. menuList.add(menu);
  293. }
  294. }
  295. return menuList;
  296. }
  297. private List<PrivSysDto> getPrivTree(List<PrivSysDto> list, String pid) {
  298. List<PrivSysDto> privList = new ArrayList<>();
  299. //取出所有菜单
  300. for (int i = 0; i < list.size(); i++) {
  301. PrivSysDto priv = list.get(i);
  302. if (priv == null || null == priv.getParentId() || StringUtils.isBlank(priv.getParentId())) {
  303. continue;
  304. } else {
  305. if (pid.equals(priv.getParentId())) {//取出所有父菜单
  306. priv.setPrivList(getPrivTree(list, priv.getId()));
  307. privList.add(priv);
  308. }
  309. }
  310. }
  311. return privList;
  312. }
  313. }