From 69a1b191f02e49b7c8545c3b42744217f0dc6b8e Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Sat, 25 Nov 2023 14:47:23 +0800
Subject: [PATCH] 物业公司组织机构关联处理,相关权限限制去除

---
 src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java |   98 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 96 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java
index 92e3850..c59e71d 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java
@@ -17,6 +17,7 @@
 package org.springblade.modules.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springblade.common.cache.SysCache;
@@ -26,12 +27,17 @@
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
+import org.springblade.modules.property.entity.PropertyCompanyEntity;
+import org.springblade.modules.property.service.IPropertyCompanyService;
 import org.springblade.modules.system.entity.Dept;
+import org.springblade.modules.system.entity.UserDept;
 import org.springblade.modules.system.mapper.DeptMapper;
 import org.springblade.modules.system.service.IDeptService;
 import org.springblade.modules.system.vo.DeptVO;
 import org.springblade.modules.system.wrapper.DeptWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
@@ -46,6 +52,9 @@
 public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements IDeptService {
 	private static final String TENANT_ID = "tenantId";
 	private static final String PARENT_ID = "parentId";
+
+	@Autowired
+	private IPropertyCompanyService propertyCompanyService;
 
 	@Override
 	public List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param) {
@@ -123,16 +132,38 @@
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public boolean removeDept(String ids) {
 		Long cnt = baseMapper.selectCount(Wrappers.<Dept>query().lambda().in(Dept::getParentId, Func.toLongList(ids)));
 		if (cnt > 0L) {
 			throw new ServiceException("请先删除子节点!");
 		}
-		return removeByIds(Func.toLongList(ids));
+		List<Long> longs = Func.toLongList(ids);
+		// 遍历
+		for (Long id : longs) {
+			// 查询当前机构信息
+			DeptVO dept = baseMapper.getDeptById(id);
+			// 如果父机构为物业公司
+			if (dept.getParentName().equals("物业公司")){
+				// 删除
+				propertyCompanyService.remove(Wrappers.<PropertyCompanyEntity>update().lambda().eq(PropertyCompanyEntity::getDeptId, id));
+			}
+		}
+		return removeByIds(longs);
 	}
 
 	@Override
 	public boolean submit(Dept dept) {
+		deptHandle(dept);
+		// 保存并返回
+		return saveOrUpdate(dept);
+	}
+
+	/**
+	 * 机构信息处理
+	 * @param dept
+	 */
+	private void deptHandle(Dept dept) {
 		if (Func.isEmpty(dept.getParentId())) {
 			dept.setTenantId(AuthUtil.getTenantId());
 			dept.setParentId(BladeConstant.TOP_PARENT_ID);
@@ -148,7 +179,70 @@
 			dept.setAncestors(ancestors);
 		}
 		dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		return saveOrUpdate(dept);
+	}
+
+	/**
+	 * 自定义新增或修改
+	 * @param dept
+	 * @return
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean saveOrUpdateDeptInfo(Dept dept) {
+		boolean flag = false;
+		deptHandle(dept);
+		// 判断类型,如果为物业公司(上级机构名称为物业公司),名称不能重复
+		QueryWrapper<Dept> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("is_deleted",0).eq("id", dept.getParentId());
+		Dept parentDept = getOne(queryWrapper);
+		// 如果父机构为物业公司
+		if (parentDept.getDeptName().equals("物业公司")){
+			// 查询当前
+			QueryWrapper<Dept> wrapper = new QueryWrapper<>();
+			wrapper.eq("is_deleted",0)
+				.eq("dept_name",dept.getDeptName());
+			Dept one = getOne(wrapper);
+			if (null!=one){
+				dept.setId(one.getId());
+				flag = updateById(dept);
+			}else {
+				flag = save(dept);
+			}
+			//保存物业公司信息
+			savePropertyCompany(dept);
+		}else {
+			flag = saveOrUpdate(dept);
+		}
+		// 保存并返回
+		return flag;
+	}
+
+	/**
+	 * 保存物业公司信息
+	 * @param dept
+	 */
+	@Transactional(rollbackFor = Exception.class)
+	public void savePropertyCompany(Dept dept) {
+		// 查询物业公司是否存在
+		QueryWrapper<PropertyCompanyEntity> wrapper = new QueryWrapper<>();
+		wrapper.eq("is_deleted",0)
+			.eq("dept_id",dept.getId())
+			.eq("name",dept.getDeptName());
+		PropertyCompanyEntity propertyCompanyEntity = propertyCompanyService.getOne(wrapper);
+		if (null!=propertyCompanyEntity){
+			// 修改
+			propertyCompanyEntity.setDeptId(dept.getId());
+			propertyCompanyEntity.setName(dept.getDeptName());
+			// 往物业公司表中插入一条数据
+			propertyCompanyService.updateById(propertyCompanyEntity);
+		}else {
+			// 新增
+			PropertyCompanyEntity companyEntity = new PropertyCompanyEntity();
+			companyEntity.setDeptId(dept.getId());
+			companyEntity.setName(dept.getDeptName());
+			// 往物业公司表中插入一条数据
+			propertyCompanyService.save(companyEntity);
+		}
 	}
 
 	@Override

--
Gitblit v1.9.3