|
|
@@ -0,0 +1,228 @@
|
|
|
+package com.jzg.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.jzg.commons.core.base.BaseController;
|
|
|
+import com.jzg.commons.core.page.HttpResult;
|
|
|
+import com.jzg.commons.entity.dto.SysDeptParam;
|
|
|
+import com.jzg.commons.entity.po.*;
|
|
|
+import com.jzg.commons.entity.vo.ChangeDeptVo;
|
|
|
+import com.jzg.commons.entity.vo.DeptLeaderVo;
|
|
|
+import com.jzg.commons.entity.vo.SysDeptVo;
|
|
|
+import com.jzg.commons.entity.vo.SysUserVo;
|
|
|
+import com.jzg.commons.exception.SystemException;
|
|
|
+import com.jzg.commons.util.StringUtils;
|
|
|
+import com.jzg.commons.util.idgen.IdGenerate;
|
|
|
+import com.jzg.mapper.SysDeptMapper;
|
|
|
+import com.jzg.service.*;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+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.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> implements SysDeptService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysDeptMapper sysDeptMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysSystemService sysSystemService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private BaseController baseController;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysUserService userService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysAreaBService sysAreaService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysUserJzgInfoService sysUserJzgInfoService;
|
|
|
+
|
|
|
+ private void validateDept(SysDeptVo sysDeptVo, boolean isAdd){
|
|
|
+ if(isAdd){
|
|
|
+ if(this.count(new LambdaQueryWrapper<SysDept>()
|
|
|
+ .eq(SysDept::getName, sysDeptVo.getName())) > 0){
|
|
|
+ throw new SystemException("机构名称已存在");
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(this.count(new LambdaQueryWrapper<SysDept>()
|
|
|
+ .eq(SysDept::getName, sysDeptVo.getName())
|
|
|
+ .ne(SysDept::getId, sysDeptVo.getId())) > 0){
|
|
|
+ throw new SystemException("机构名称已存在");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean addDept(SysDeptVo sysDeptVo) {
|
|
|
+ validateDept(sysDeptVo,true);
|
|
|
+
|
|
|
+ SysDept sysDept = new SysDept();
|
|
|
+ BeanUtils.copyProperties(sysDeptVo, sysDept);
|
|
|
+ sysDept.setId(IdGenerate.nextId());
|
|
|
+ //处理展业信息
|
|
|
+ sysDept.setExScope(sysDeptVo);
|
|
|
+ //获取父级id
|
|
|
+ String parentId = sysDept.getParentId();
|
|
|
+ //设置机构路径
|
|
|
+ if(!parentId.equals("0")){
|
|
|
+ SysDept parentSysDept = baseMapper.selectById(parentId);
|
|
|
+ if(!Objects.isNull(parentSysDept)){
|
|
|
+ sysDept.setRoute(parentSysDept.getRoute() + "-" + sysDept.getId());
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ sysDept.setRoute(sysDept.getId());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(sysDeptVo.getSystemCode())){
|
|
|
+ sysDept.setSystemCode(sysDeptVo.getSystemCode());
|
|
|
+ }
|
|
|
+ if (Objects.isNull(sysDept.getLeaderId()) || sysDept.getLeaderId().isEmpty()){
|
|
|
+ sysDept.setLeaderId(null);
|
|
|
+ }
|
|
|
+ return this.save(sysDept);
|
|
|
+ }
|
|
|
+
|
|
|
+ public SysDept getSysDept(SysDeptVo sysDeptVo){
|
|
|
+ SysDept sysDept = new SysDept();
|
|
|
+ sysDept.setId(sysDeptVo.getId());
|
|
|
+ sysDept.setName(sysDeptVo.getName());
|
|
|
+ sysDept.setParentId(sysDeptVo.getParentId());
|
|
|
+ sysDept.setOrderNum(sysDeptVo.getOrderNum());
|
|
|
+ sysDept.setComType(sysDeptVo.getComType());
|
|
|
+ sysDept.setRoute(sysDeptVo.getRoute());
|
|
|
+ sysDept.setAddress(sysDeptVo.getAddress());
|
|
|
+ sysDept.setLeaderId(sysDeptVo.getLeaderId());
|
|
|
+ sysDept.setProvince(sysDeptVo.getProvince());
|
|
|
+ sysDept.setCity(sysDeptVo.getCity());
|
|
|
+ sysDept.setArea(sysDeptVo.getArea());
|
|
|
+ sysDept.setExScope(sysDeptVo);
|
|
|
+ return sysDept;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public boolean updateDept(SysDeptVo sysDeptVo) {
|
|
|
+ validateDept(sysDeptVo,false);
|
|
|
+ sysDeptMapper.updateById(getSysDept(sysDeptVo));
|
|
|
+ return true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public HttpResult deleteDept(SysDeptVo sysDeptVo) {
|
|
|
+ SysDept sysDept = getById(sysDeptVo.getId());
|
|
|
+ if (sysDept == null) {
|
|
|
+ throw new SystemException("机构不存在");
|
|
|
+ }
|
|
|
+ List<SysDept> deptList = lambdaQuery().eq(SysDept::getParentId, sysDept.getId()).list();
|
|
|
+ if (!deptList.isEmpty()) {
|
|
|
+ throw new SystemException(sysDept.getName() + "机构下还有其他隶属机构请将这些子机构删除后,再进行删除");
|
|
|
+ }
|
|
|
+ SysUserVo vo = new SysUserVo();
|
|
|
+ vo.setDeptId(sysDept.getId());
|
|
|
+ List<SysUserVo> userInfo = userService.getUserInfo(vo);
|
|
|
+ if (userInfo.stream().count() > 0) {
|
|
|
+ throw new SystemException(sysDept.getName() + "机构下还有其他用户请将这些用户删除后,再进行删除");
|
|
|
+ }
|
|
|
+ sysDeptMapper.deleteById(sysDeptVo.getId());
|
|
|
+ return HttpResult.ok("删除机构成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public HttpResult batchDeleteDept(SysDeptVo sysDeptVo) {
|
|
|
+ sysDeptVo.getDeptIds().forEach(id->{
|
|
|
+ SysDeptVo vo = new SysDeptVo();
|
|
|
+ vo.setId(id);
|
|
|
+ this.deleteDept(vo);
|
|
|
+ });
|
|
|
+ return HttpResult.ok("批量删除机构成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SysDeptVo> getDeptTree(String deptId, SysDeptParam param) {
|
|
|
+ if(Objects.isNull(deptId)){
|
|
|
+ deptId = "";
|
|
|
+ }
|
|
|
+ String sysCode = param.getSysCode();
|
|
|
+ String userSystemCode = null;
|
|
|
+ if (StringUtils.isEmpty(sysCode)){
|
|
|
+ userSystemCode = baseController.getUserSystemCode();
|
|
|
+ }else{
|
|
|
+ userSystemCode = sysCode;
|
|
|
+ }
|
|
|
+ SysSystem bySysCode = sysSystemService.getBySystemCode(userSystemCode);
|
|
|
+ List<SysDeptVo> sysDepts = new ArrayList<>();
|
|
|
+ SysDept sysDept = getById(deptId);
|
|
|
+ SysDeptVo sysDeptVo = new SysDeptVo(sysDept);
|
|
|
+ LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
|
|
|
+ if(!deptId.equals("")) {
|
|
|
+ lqw.likeRight(SysDept::getRoute, deptId);
|
|
|
+ }
|
|
|
+ lqw.eq(StringUtils.isNotEmpty(sysCode),SysDept::getSystemCode, sysCode);
|
|
|
+ List<SysDept> sysDeptList = list(lqw);
|
|
|
+
|
|
|
+ List<SysDeptVo> voDept = new ArrayList<>();
|
|
|
+ sysDeptList.forEach(item->{
|
|
|
+ SysDeptVo sysDeptv = new SysDeptVo(item);
|
|
|
+ voDept.add(sysDeptv);
|
|
|
+ });
|
|
|
+
|
|
|
+ voDept.forEach(item->{
|
|
|
+ List<String> areas = new ArrayList<>();
|
|
|
+ areas.add(item.getProvince());
|
|
|
+ areas.add(item.getCity());
|
|
|
+ areas.add(item.getArea());
|
|
|
+ List<SysArea> sysAreaVos = sysAreaService.queryAllByAreaCode(areas);
|
|
|
+ String areaString = "";
|
|
|
+ for(int i=0;i<sysAreaVos.size();i++){
|
|
|
+ areaString = areaString + sysAreaVos.get(i).getAreaCname() + "-";
|
|
|
+ }
|
|
|
+ if(areaString.length()>0) {
|
|
|
+ item.setDivision(areaString.substring(0, areaString.length() - 1));
|
|
|
+ }
|
|
|
+ if(!Objects.isNull(item.getLeaderId())){
|
|
|
+ SysUserJzgInfo userByUserId = sysUserJzgInfoService.getUserByUserId(item.getLeaderId());
|
|
|
+ if(!Objects.isNull(userByUserId)){
|
|
|
+ item.setLeaderName(userByUserId.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ Map<String, List<SysDeptVo>> map = voDept.stream().collect(Collectors.groupingBy(SysDeptVo::getParentId));
|
|
|
+ voDept.forEach(i -> i.setChildren(map.getOrDefault(i.getId(), new ArrayList<>())));
|
|
|
+ if(!Objects.isNull(sysDept)) {
|
|
|
+ sysDepts = map.get(sysDeptVo.getParentId());
|
|
|
+ }else{
|
|
|
+ sysDepts = map.get("0");
|
|
|
+ }
|
|
|
+ List<SysDeptVo> newResultDept = new ArrayList<>();
|
|
|
+ SysDeptVo baseDept = new SysDeptVo(sysDept);
|
|
|
+ baseDept.setId("0");
|
|
|
+ baseDept.setName(bySysCode.getSysName());
|
|
|
+ baseDept.setChildren(sysDepts);
|
|
|
+ newResultDept.add(baseDept);
|
|
|
+ return newResultDept;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public SysDeptVo queryById(String id) {
|
|
|
+ SysDept sysDept = getById(id);
|
|
|
+ SysDeptVo sysDeptVo = new SysDeptVo(sysDept);
|
|
|
+ return sysDeptVo;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|