From 8b7258c9427882bb1798f1502eaa35184c6e374e Mon Sep 17 00:00:00 2001
From: linwe <872216996@qq.com>
Date: Fri, 09 Aug 2024 14:29:18 +0800
Subject: [PATCH] 短信指定楼栋发送

---
 src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java |  336 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 331 insertions(+), 5 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..a0e13c5 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,21 +17,41 @@
 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.apache.logging.log4j.util.Strings;
 import org.springblade.common.cache.SysCache;
+import org.springblade.common.utils.AuthUtils;
+import org.springblade.common.utils.NodeTreeUtil;
+import org.springblade.common.utils.SpringUtils;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.SpringUtil;
 import org.springblade.core.tool.utils.StringPool;
+import org.springblade.modules.community.entity.CommunityEntity;
+import org.springblade.modules.community.service.ICommunityService;
+import org.springblade.modules.grid.entity.GridEntity;
+import org.springblade.modules.grid.service.IGridService;
+import org.springblade.modules.police.entity.PoliceAffairsGridEntity;
+import org.springblade.modules.police.service.IPoliceAffairsGridService;
+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.Region;
 import org.springblade.modules.system.mapper.DeptMapper;
+import org.springblade.modules.system.node.DeptUserTreeNode;
 import org.springblade.modules.system.service.IDeptService;
+import org.springblade.modules.system.service.IRegionService;
 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 +66,12 @@
 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;
+
+	@Autowired
+	private IRegionService regionService;
 
 	@Override
 	public List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param) {
@@ -62,12 +88,15 @@
 			parentId = 0L;
 		}
 		// 判断数据权限控制,非超管角色只可看到本级及以下数据
-		if (Func.toLong(parentId) == 0L && !AuthUtil.isAdministrator()) {
+		if (Func.toLong(parentId) == 0L && !AuthUtils.isAdministratorOrAdmin(AuthUtil.getUserRole())) {
 			Long deptId = Func.firstLong(AuthUtil.getDeptId());
 			Dept dept = SysCache.getDept(deptId);
-			if (dept.getParentId() != 0) {
+			if (dept != null && dept.getParentId() != 0) {
 				parentId = dept.getParentId();
 			}
+			List<DeptVO> deptVOS = baseMapper.lazyList(tenantId, parentId, param);
+			deptVOS = deptVOS.stream().filter(item -> AuthUtil.getDeptId().contains(item.getId().toString())).collect(Collectors.toList());
+			return deptVOS;
 		}
 		// 判断点击搜索带有查询条件的情况
 		if (Func.isEmpty(param.get(PARENT_ID)) && param.size() > 1 && Func.toLong(parentId) == 0L) {
@@ -78,13 +107,49 @@
 
 	@Override
 	public List<DeptVO> tree(String tenantId) {
-		return ForestNodeMerger.merge(baseMapper.tree(tenantId));
+		Long id = null;
+		// 判断数据权限控制,非超管角色只可看到本级及以下数据
+		if (!AuthUtil.isAdmin()) {
+			id = Func.firstLong(AuthUtil.getDeptId());
+		}
+		List<DeptVO> tree = baseMapper.tree(tenantId, id);
+		return ForestNodeMerger.merge(tree);
+	}
+
+	/**
+	 * 机构id
+	 * @param deptId
+	 * @return
+	 */
+	@Override
+	public List<DeptVO> tree(Long deptId) {
+		List<DeptVO> tree = baseMapper.tree("000000", deptId);
+		return ForestNodeMerger.merge(tree);
 	}
 
 	@Override
 	public List<DeptVO> lazyTree(String tenantId, Long parentId) {
 		if (AuthUtil.isAdministrator()) {
 			tenantId = StringPool.EMPTY;
+		}
+		// 判断数据权限控制,非超管角色只可看到本级及以下数据
+//		if (Func.toLong(parentId) == 0L && !AuthUtil.isAdministrator()) {
+//			Long deptId = Func.firstLong(AuthUtil.getDeptId());
+//			Dept dept = SysCache.getDept(deptId);
+//			if (dept.getParentId() != 0) {
+//				parentId = dept.getParentId();
+//			}
+//		}
+		if (Func.toLong(parentId) == 0L && !AuthUtil.isAdmin()) {
+			Long deptId = Func.firstLong(AuthUtil.getDeptId());
+			Dept dept = SysCache.getDept(deptId);
+			if (dept != null && dept.getParentId() != 0) {
+				parentId = dept.getParentId();
+			}
+			List<DeptVO> merge = ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId));
+			List<DeptVO> copy = BeanUtil.copy(merge, DeptVO.class);
+			copy = copy.stream().filter(item -> AuthUtil.getDeptId().contains(item.getId().toString())).collect(Collectors.toList());
+			return copy;
 		}
 		return ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId));
 	}
@@ -123,16 +188,39 @@
 	}
 
 	@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 (!Strings.isBlank(dept.getParentName()) && 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 +236,75 @@
 			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 != null && 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 {
+				if (dept.getId() != null && dept.getId() > 0) {
+					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());
+		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
@@ -168,4 +324,174 @@
 		return DeptWrapper.build().listNodeVO(deptList);
 	}
 
+	/**
+	 * 数据处理(社区绑定)
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Object dataHandle() {
+		// 查询所有的社区
+		QueryWrapper<Region> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("district_code", "361102").eq("region_level", 5);
+		List<Region> list = regionService.list(queryWrapper);
+		// 遍历
+		for (Region region : list) {
+			// 查询是否已创建
+			QueryWrapper<Dept> wrapper = new QueryWrapper<>();
+			wrapper.eq("is_deleted", 0).eq("dept_name", region.getName());
+			Dept one = getOne(wrapper);
+			if (null == one) {
+				// 新增
+				Dept dept = new Dept();
+				dept.setFullName(region.getName());
+				dept.setDeptName(region.getName());
+				dept.setDeptCategory(1);
+				dept.setTenantId("000000");
+				// 查询上级id
+				QueryWrapper<Dept> deptQueryWrapper = new QueryWrapper<>();
+				deptQueryWrapper.eq("is_deleted", 0).eq("dept_name", region.getTownName());
+				Dept parentDept = getOne(deptQueryWrapper);
+				if (null != parentDept) {
+					dept.setParentId(parentDept.getId());
+					dept.setAncestors(parentDept.getAncestors() + "," + parentDept.getId());
+				}
+				dept.setRegionCode(region.getCode());
+				// 新增
+				saveOrUpdate(dept);
+				// 插入社区表数据
+			}
+		}
+		return null;
+	}
+
+
+	/**
+	 * 数据处理(社区绑定)--处理机构
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Object dataHandleCommunity() {
+		// 查询所有的社区
+		QueryWrapper<Region> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("district_code", "361102").eq("region_level", 5);
+		List<Region> list = regionService.list(queryWrapper);
+		// 遍历
+		for (Region region : list) {
+			// 查询是否已创建
+			QueryWrapper<CommunityEntity> wrapper = new QueryWrapper<>();
+			wrapper.eq("is_deleted", 0).eq("name", region.getName());
+			CommunityEntity one = SpringUtil.getBean(ICommunityService.class).getOne(wrapper);
+			if (null == one) {
+				// 新增
+				CommunityEntity communityEntity = new CommunityEntity();
+				communityEntity.setStreetCode(region.getTownCode());
+				communityEntity.setName(region.getName());
+				communityEntity.setCode(region.getCode());
+				// 新增
+				SpringUtil.getBean(ICommunityService.class).save(communityEntity);
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 数据处理(区域网格编号绑定)
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Object dataRegionGridCodeBindHandle() {
+		// 查询网格对应的机构信息(包含父级机构名称)
+		List<DeptVO> deptVOS = baseMapper.getGridDeptAndParentList();
+		//遍历处理
+		for (DeptVO deptVO : deptVOS) {
+			GridEntity gridEntity = SpringUtils.getBean(IGridService.class).getGridByNames(deptVO.getDeptName(), deptVO.getParentName());
+			if (null != gridEntity) {
+				deptVO.setRegionCode(gridEntity.getGridCode());
+				// 更新
+				updateById(deptVO);
+			}
+		}
+		return null;
+	}
+
+	@Override
+	public List<DeptUserTreeNode> getDeptAndUserTree(DeptUserTreeNode treeNode) {
+		// 查询数据
+//		Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMap(treeNode);
+
+		Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMapAndChildren(treeNode);
+		Map<String, DeptUserTreeNode> userMap = baseMapper.getUserMap(treeNode);
+		deptMap.putAll(userMap);
+		List<DeptUserTreeNode> deptAndUserNodeTree = NodeTreeUtil.getDeptAndUserNodeTree(deptMap);
+		return deptAndUserNodeTree;
+	}
+
+	@Override
+	public Object getDeptAndUserTreeLazyTree(DeptUserTreeNode treeNode) {
+
+		//传一个部门id,查询出该部门的下一级部门
+		Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMapAndChild(treeNode);
+
+		String deptIds = "";
+		int count = 0;
+		for (String key : deptMap.keySet()) {
+			count++;
+			deptIds += key;
+			if (count < deptMap.size()) {
+				deptIds += ",";
+			}
+		}
+
+		Map<String, DeptUserTreeNode> userMap = baseMapper.getUserMapByDeptIds(deptIds);
+		deptMap.putAll(userMap);
+		List<DeptUserTreeNode> deptAndUserNodeTree = NodeTreeUtil.getDeptAndUserNodeTree(deptMap);
+		return deptAndUserNodeTree;
+	}
+
+	/**
+	 * 数据处理(社区绑定)-- 处理社区(派出所下)
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Object dataHandleCommunityByPolice() {
+		// 查询所有的派出所
+		QueryWrapper<Dept> wrapper = new QueryWrapper<>();
+		wrapper.eq("is_deleted", 0).like("dept_name", "派出所");
+		List<Dept> list = list(wrapper);
+		// 遍历
+		for (Dept dept : list) {
+			// 通过派出所名称查询对应的警务网格信息
+			QueryWrapper<PoliceAffairsGridEntity> queryWrapper = new QueryWrapper<>();
+			queryWrapper.eq("is_deleted", 0).eq("pcs_name", dept.getDeptName());
+			List<PoliceAffairsGridEntity> policeAffairsGridEntityList
+				= SpringUtil.getBean(IPoliceAffairsGridService.class).list(queryWrapper);
+			// 遍历
+			for (PoliceAffairsGridEntity policeAffairsGridEntity : policeAffairsGridEntityList) {
+				Dept deptInfo = new Dept();
+				deptInfo.setTenantId("000000");
+				deptInfo.setDeptName(policeAffairsGridEntity.getCommunityName());
+				deptInfo.setFullName(policeAffairsGridEntity.getCommunityName());
+				deptInfo.setDeptCategory(1);
+				deptInfo.setDeptNature(1);
+				deptInfo.setParentId(dept.getId());
+				deptInfo.setAncestors(dept.getAncestors() + "," + dept.getId());
+				deptInfo.setRegionCode(policeAffairsGridEntity.getJwGridCode());
+				// 保存
+				save(deptInfo);
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 查询对应的派出所
+	 *
+	 * @param deptId
+	 * @return
+	 */
+	@Override
+	public Dept getDeptByDeptIds(String deptId) {
+		return baseMapper.getDeptByDeptIds(deptId);
+	}
+
 }

--
Gitblit v1.9.3