/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.system.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.apache.logging.log4j.util.Strings; import org.flowable.idm.engine.impl.persistence.entity.UserEntity; import org.springblade.common.cache.DictCache; import org.springblade.common.cache.ParamCache; import org.springblade.common.cache.SysCache; import org.springblade.common.cache.UserCache; import org.springblade.common.constant.CommonConstant; import org.springblade.common.constant.TenantConstant; import org.springblade.common.enums.DictEnum; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tenant.BladeTenantProperties; import org.springblade.core.tool.constant.BladeConstant; import org.springblade.core.tool.jackson.JsonUtil; import org.springblade.core.tool.support.Kv; import org.springblade.core.tool.utils.*; import org.springblade.modules.auth.enums.UserEnum; import org.springblade.modules.community.entity.CommunityEntity; import org.springblade.modules.community.service.ICommunityService; import org.springblade.modules.grid.service.IGridmanService; import org.springblade.modules.house.entity.HouseholdEntity; import org.springblade.modules.house.service.IHouseholdService; import org.springblade.modules.house.vo.HouseholdVO; 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.IPropertyCompanyDistrictService; import org.springblade.modules.property.service.IPropertyCompanyService; import org.springblade.modules.system.entity.*; import org.springblade.modules.system.excel.PoliceUserExcel; import org.springblade.modules.system.excel.UserExcel; import org.springblade.modules.system.mapper.UserMapper; import org.springblade.modules.system.service.*; import org.springblade.modules.system.vo.UserDetailVO; import org.springblade.modules.system.vo.UserVO; import org.springblade.modules.system.wrapper.UserWrapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import static org.springblade.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD; /** * 服务实现类 * * @author Chill */ @Service @AllArgsConstructor public class UserServiceImpl extends BaseServiceImpl implements IUserService { private static final String GUEST_NAME = "guest"; private final IUserDeptService userDeptService; private final IUserOauthService userOauthService; private final IRoleService roleService; private final IDeptService deptService; private final BladeTenantProperties tenantProperties; private final IPoliceAffairsGridService policeAffairsGridService; @Override @Transactional(rollbackFor = Exception.class) public boolean submit(User user) { if (StringUtil.isBlank(user.getTenantId())) { user.setTenantId(BladeConstant.ADMIN_TENANT_ID); } String tenantId = user.getTenantId(); Tenant tenant = SysCache.getTenant(tenantId); if (Func.isNotEmpty(tenant)) { Integer accountNumber = tenant.getAccountNumber(); if (tenantProperties.getLicense()) { String licenseKey = tenant.getLicenseKey(); String decrypt = DesUtil.decryptFormHex(licenseKey, TenantConstant.DES_KEY); accountNumber = JsonUtil.parse(decrypt, Tenant.class).getAccountNumber(); } Long tenantCount = baseMapper.selectCount(Wrappers.query().lambda().eq(User::getTenantId, tenantId)); if (accountNumber != null && accountNumber > 0 && accountNumber <= tenantCount) { throw new ServiceException("当前租户已到最大账号额度!"); } } if (Func.isNotEmpty(user.getPassword())) { user.setPassword(DigestUtil.encrypt(user.getPassword())); } Long userCount = baseMapper.selectCount(Wrappers.query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, user.getAccount())); if (userCount > 0L && Func.isEmpty(user.getId())) { throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); } boolean save = save(user); // 返回 return save && submitUserDept(user); } @Override @Transactional(rollbackFor = Exception.class) public boolean updateUser(User user) { String tenantId = user.getTenantId(); Long userCount = baseMapper.selectCount( Wrappers.query().lambda() .eq(User::getTenantId, tenantId) .eq(User::getAccount, user.getAccount()) .notIn(User::getId, user.getId()) ); if (userCount > 0L) { throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); } return updateUserInfo(user) && submitUserDept(user); } @Override public boolean updateUserInfo(User user) { user.setPassword(null); boolean b = updateById(user); // 更新警格或网格的绑定 // updateGridBind(user); return b; } /** * 更新警格或网格的绑定 * * @param user */ public void updateGridBind(User user) { // 先删除原有区域的绑定 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("is_deleted", 0).like("police_user_id", user.getId()); // 删除掉之前已绑定的 List list = SpringUtil.getBean(IPoliceAffairsGridService.class).list(queryWrapper); // 遍历 for (PoliceAffairsGridEntity policeAffairsGridEntity : list) { List arrayList = new ArrayList<>(Arrays.asList(policeAffairsGridEntity.getPoliceUserId().split(","))); arrayList.remove(user.getId().toString()); // 更新 policeAffairsGridEntity.setPoliceUserId(String.join(",", arrayList)); // 解决更新报错 policeAffairsGridEntity.setGeom(null); SpringUtil.getBean(IPoliceAffairsGridService.class).updateById(policeAffairsGridEntity); } // 判断机构类型 List deptIds = new ArrayList<>(Arrays.asList(user.getDeptId().split(","))); for (String deptId : deptIds) { // 查询对应的机构 Dept dept = SpringUtil.getBean(IDeptService.class).getById(deptId); if (null != dept.getDeptNature() && !Strings.isBlank(dept.getRegionCode()) && dept.getDeptNature() == 1 ) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("is_deleted", 0).eq("jw_grid_code", dept.getRegionCode()); PoliceAffairsGridEntity policeAffairsGridEntity = policeAffairsGridService.getOne(wrapper); // 更新 if (null != policeAffairsGridEntity) { if (!Strings.isBlank(policeAffairsGridEntity.getPoliceUserId())) { if (!policeAffairsGridEntity.getPoliceUserId().contains(user.getId().toString())) { policeAffairsGridEntity.setPoliceUserId(policeAffairsGridEntity.getPoliceUserId() + "," + user.getId()); // 解决更新报错 policeAffairsGridEntity.setGeom(null); // 更新 SpringUtil.getBean(IPoliceAffairsGridService.class).updateById(policeAffairsGridEntity); } } else { policeAffairsGridEntity.setPoliceUserId(user.getId().toString()); // 解决更新报错 policeAffairsGridEntity.setGeom(null); // 更新 SpringUtil.getBean(IPoliceAffairsGridService.class).updateById(policeAffairsGridEntity); } } } } } private boolean submitUserDept(User user) { List deptIdList = Func.toLongList(user.getDeptId()); List userDeptList = new ArrayList<>(); deptIdList.forEach(deptId -> { UserDept userDept = new UserDept(); userDept.setUserId(user.getId()); userDept.setDeptId(deptId); userDeptList.add(userDept); }); userDeptService.remove(Wrappers.update().lambda().eq(UserDept::getUserId, user.getId())); boolean b = userDeptService.saveBatch(userDeptList); return b; } @Override public IPage selectUserPage(IPage page, User user, String deptId, String tenantId) { if (Strings.isBlank(deptId) && !AuthUtil.isAdministrator() && !AuthUtil.isAdmin()) { deptId = AuthUtil.getDeptId(); } List deptIdList = SysCache.getDeptChildIds(deptId); return page.setRecords(baseMapper.selectUserPage(page, user, deptIdList, tenantId)); } @Override public IPage selectUserSearch(UserVO user, Query query) { LambdaQueryWrapper queryWrapper = Wrappers.query().lambda(); String tenantId = AuthUtil.getTenantId(); if (StringUtil.isNotBlank(tenantId)) { queryWrapper.eq(User::getTenantId, tenantId); } if (StringUtil.isNotBlank(user.getName())) { queryWrapper.like(User::getName, user.getName()); } if (StringUtil.isNotBlank(user.getDeptName())) { String deptIds = SysCache.getDeptIdsByFuzzy(AuthUtil.getTenantId(), user.getDeptName()); if (StringUtil.isNotBlank(deptIds)) { queryWrapper.and(wrapper -> { List ids = Func.toStrList(deptIds); ids.forEach(id -> wrapper.like(User::getDeptId, id).or()); }); } } if (StringUtil.isNotBlank(user.getPostName())) { String postIds = SysCache.getPostIdsByFuzzy(AuthUtil.getTenantId(), user.getPostName()); if (StringUtil.isNotBlank(postIds)) { queryWrapper.and(wrapper -> { List ids = Func.toStrList(postIds); ids.forEach(id -> wrapper.like(User::getPostId, id).or()); }); } } IPage pages = this.page(Condition.getPage(query), queryWrapper); return UserWrapper.build().pageVO(pages); } @Override public User userByAccount(String tenantId, String account) { return baseMapper.selectOne(Wrappers.query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, account).eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED)); } @Override public UserInfo userInfo(Long userId) { User user = baseMapper.selectById(userId); return buildUserInfo(user); } @Override public UserInfo userInfo(String tenantId, String account, String password) { User user = baseMapper.getUser(tenantId, account, password); return buildUserInfo(user); } /** * 用户信息 * * @param tenantId * @param account * @param password * @param type 登录类型 2:pc 3:app * @return */ @Override public UserInfo userInfo(String tenantId, String account, String password, Integer type) { User user = baseMapper.getUser(tenantId, account, password); return buildUserInfo(user, type); } /** * 用户信息 * * @param tenantId * @param account * @param password * @param userEnum * @return */ @Override public UserInfo userInfo(String tenantId, String account, String password, UserEnum userEnum) { User user = baseMapper.getUser(tenantId, account, password); return buildUserInfo(user, userEnum); } private UserInfo buildUserInfo(User user) { return buildUserInfo(user, UserEnum.WEB); } private UserInfo buildUserInfo(User user, UserEnum userEnum) { if (ObjectUtil.isEmpty(user)) { return null; } UserInfo userInfo = new UserInfo(); userInfo.setUser(user); if (Func.isNotEmpty(user)) { List roleAlias = roleService.getRoleAliases(user.getRoleId()); userInfo.setRoles(roleAlias); } // 根据每个用户平台,建立对应的detail表,通过查询将结果集写入到detail字段 Kv detail = Kv.create().set("type", userEnum.getName()); if (userEnum == UserEnum.WEB) { UserWeb userWeb = new UserWeb(); UserWeb query = userWeb.selectOne(Wrappers.lambdaQuery().eq(UserWeb::getUserId, user.getId())); if (ObjectUtil.isNotEmpty(query)) { detail.set("ext", query.getUserExt()); } } else if (userEnum == UserEnum.APP) { UserApp userApp = new UserApp(); UserApp query = userApp.selectOne(Wrappers.lambdaQuery().eq(UserApp::getUserId, user.getId())); if (ObjectUtil.isNotEmpty(query)) { detail.set("ext", query.getUserExt()); } } else { UserOther userOther = new UserOther(); UserOther query = userOther.selectOne(Wrappers.lambdaQuery().eq(UserOther::getUserId, user.getId())); if (ObjectUtil.isNotEmpty(query)) { detail.set("ext", query.getUserExt()); } } userInfo.setDetail(detail); return userInfo; } /** * * @param user * @param type 登录类型 2:pc 3:app * @return */ private UserInfo buildUserInfo(User user, Integer type) { if (ObjectUtil.isEmpty(user)) { return null; } UserInfo userInfo = new UserInfo(); userInfo.setUser(user); if (Func.isNotEmpty(user)) { // 判断登录类型设置对应的角色id user.setRoleId(Strings.join(roleService.getRoleIdStrByRoleIdAndType(user.getRoleId(),type), ',')); // 设置角色别名 List roleAlias = roleService.getRoleAliases(user.getRoleId()); userInfo.setRoles(roleAlias); } // 根据每个用户平台,建立对应的detail表,通过查询将结果集写入到detail字段 Kv detail = Kv.create().set("type", null); UserOther userOther = new UserOther(); UserOther query = userOther.selectOne(Wrappers.lambdaQuery().eq(UserOther::getUserId, user.getId())); if (ObjectUtil.isNotEmpty(query)) { detail.set("ext", query.getUserExt()); } userInfo.setDetail(detail); return userInfo; } @Override @Transactional(rollbackFor = Exception.class) public UserInfo userInfo(UserOauth userOauth) { UserOauth uo = userOauthService.getOne(Wrappers.query().lambda().eq(UserOauth::getUuid, userOauth.getUuid()).eq(UserOauth::getSource, userOauth.getSource())); UserInfo userInfo; if (Func.isNotEmpty(uo) && Func.isNotEmpty(uo.getUserId())) { userInfo = this.userInfo(uo.getUserId()); userInfo.setOauthId(Func.toStr(uo.getId())); } else { userInfo = new UserInfo(); if (Func.isEmpty(uo)) { userOauthService.save(userOauth); userInfo.setOauthId(Func.toStr(userOauth.getId())); } else { userInfo.setOauthId(Func.toStr(uo.getId())); } User user = new User(); user.setAccount(userOauth.getUsername()); user.setTenantId(userOauth.getTenantId()); userInfo.setUser(user); userInfo.setRoles(Collections.singletonList(GUEST_NAME)); } return userInfo; } @Override public boolean grant(String userIds, String roleIds) { User user = new User(); user.setRoleId(roleIds); return this.update(user, Wrappers.update().lambda().in(User::getId, Func.toLongList(userIds))); } @Override public boolean resetPassword(String userIds) { User user = new User(); user.setPassword(DigestUtil.encrypt(CommonConstant.DEFAULT_PASSWORD)); user.setUpdateTime(DateUtil.now()); return this.update(user, Wrappers.update().lambda().in(User::getId, Func.toLongList(userIds))); } @Override public boolean updatePassword(Long userId, String oldPassword, String newPassword, String newPassword1) { User user = getById(userId); if (!newPassword.equals(newPassword1)) { throw new ServiceException("请输入正确的确认密码!"); } if (!user.getPassword().equals(DigestUtil.hex(oldPassword))) { throw new ServiceException("原密码不正确!"); } return this.update(Wrappers.update().lambda().set(User::getPassword, DigestUtil.hex(newPassword)).eq(User::getId, userId)); } @Override public boolean removeUser(String userIds) { if (Func.contains(Func.toLongArray(userIds), AuthUtil.getUserId())) { throw new ServiceException("不能删除本账号!"); } boolean deleteLogic = deleteLogic(Func.toLongList(userIds)); if (deleteLogic) { // 删除警格绑定 removePoliceGridBind(userIds); } return deleteLogic; } /** * 删除警格绑定 * * @param userIds */ public void removePoliceGridBind(String userIds) { List userIdList = new ArrayList<>(Arrays.asList(userIds.split(","))); for (String userId : userIdList) { // 先删除原有区域的绑定 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("is_deleted", 0).like("police_user_id", userId); // 删除掉之前已绑定的 List list = SpringUtil.getBean(IPoliceAffairsGridService.class).list(queryWrapper); if (list.size() > 0) { // 遍历 for (PoliceAffairsGridEntity policeAffairsGridEntity : list) { List arrayList = new ArrayList<>(Arrays.asList(policeAffairsGridEntity.getPoliceUserId().split(","))); arrayList.remove(userId); // 更新 policeAffairsGridEntity.setPoliceUserId(String.join(",", arrayList)); // 解决更新报错 policeAffairsGridEntity.setGeom(null); SpringUtil.getBean(IPoliceAffairsGridService.class).updateById(policeAffairsGridEntity); } } } } @Override @Transactional(rollbackFor = Exception.class) public void importUser(List data, Boolean isCovered) { data.forEach(userExcel -> { User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class)); // 设置用户平台 user.setUserType(Func.toInt(DictCache.getKey(DictEnum.USER_TYPE, userExcel.getUserTypeName()), 1)); // 设置部门ID user.setDeptId(Func.toStrWithEmpty(SysCache.getDeptIds(userExcel.getTenantId(), userExcel.getDeptName()), StringPool.EMPTY)); // 设置岗位ID user.setPostId(Func.toStrWithEmpty(SysCache.getPostIds(userExcel.getTenantId(), userExcel.getPostName()), StringPool.EMPTY)); // 设置角色ID user.setRoleId(Func.toStrWithEmpty(SysCache.getRoleIds(userExcel.getTenantId(), userExcel.getRoleName()), StringPool.EMPTY)); // 设置租户ID if (!AuthUtil.isAdministrator() || StringUtil.isBlank(user.getTenantId())) { user.setTenantId(AuthUtil.getTenantId()); } // 覆盖数据 if (isCovered) { // 查询用户是否存在 User oldUser = UserCache.getUser(userExcel.getTenantId(), userExcel.getAccount()); if (oldUser != null && oldUser.getId() != null) { user.setId(oldUser.getId()); this.updateUser(user); return; } } // 获取默认密码配置 String initPassword = ParamCache.getValue(DEFAULT_PARAM_PASSWORD); user.setPassword(initPassword); this.submit(user); }); } @Override public List exportUser(Wrapper queryWrapper, String deptId) { if (Strings.isBlank(deptId) && !AuthUtil.isAdministrator() && !AuthUtil.isAdmin()) { deptId = AuthUtil.getDeptId(); } List deptIdList = SysCache.getDeptChildIds(deptId); List userList = baseMapper.exportUser(queryWrapper, deptIdList); userList.forEach(user -> { user.setUserTypeName(DictCache.getValue(DictEnum.USER_TYPE, user.getUserType())); user.setRoleName(StringUtil.join(SysCache.getRoleNames(user.getRoleId()))); user.setDeptName(StringUtil.join(SysCache.getDeptNames(user.getDeptId()))); user.setPostName(StringUtil.join(SysCache.getPostNames(user.getPostId()))); }); return userList; } @Override @Transactional(rollbackFor = Exception.class) public boolean registerGuest(User user, Long oauthId) { Tenant tenant = SysCache.getTenant(user.getTenantId()); if (tenant == null || tenant.getId() == null) { throw new ServiceException("租户信息错误!"); } UserOauth userOauth = userOauthService.getById(oauthId); if (userOauth == null || userOauth.getId() == null) { throw new ServiceException("第三方登陆信息错误!"); } user.setRealName(user.getName()); user.setAvatar(userOauth.getAvatar()); user.setRoleId(StringPool.MINUS_ONE); user.setDeptId(StringPool.MINUS_ONE); user.setPostId(StringPool.MINUS_ONE); boolean userTemp = this.submit(user); userOauth.setUserId(user.getId()); userOauth.setTenantId(user.getTenantId()); boolean oauthTemp = userOauthService.updateById(userOauth); return (userTemp && oauthTemp); } @Override public boolean updatePlatform(Long userId, Integer userType, String userExt) { if (userType.equals(UserEnum.WEB.getCategory())) { UserWeb userWeb = new UserWeb(); UserWeb query = userWeb.selectOne(Wrappers.lambdaQuery().eq(UserWeb::getUserId, userId)); if (ObjectUtil.isNotEmpty(query)) { userWeb.setId(query.getId()); } userWeb.setUserId(userId); userWeb.setUserExt(userExt); return userWeb.insertOrUpdate(); } else if (userType.equals(UserEnum.APP.getCategory())) { UserApp userApp = new UserApp(); UserApp query = userApp.selectOne(Wrappers.lambdaQuery().eq(UserApp::getUserId, userId)); if (ObjectUtil.isNotEmpty(query)) { userApp.setId(query.getId()); } userApp.setUserId(userId); userApp.setUserExt(userExt); return userApp.insertOrUpdate(); } else { UserOther userOther = new UserOther(); UserOther query = userOther.selectOne(Wrappers.lambdaQuery().eq(UserOther::getUserId, userId)); if (ObjectUtil.isNotEmpty(query)) { userOther.setId(query.getId()); } userOther.setUserId(userId); userOther.setUserExt(userExt); return userOther.insertOrUpdate(); } } @Override public UserVO platformDetail(User user) { User detail = baseMapper.selectOne(Condition.getQueryWrapper(user)); UserVO userVO = UserWrapper.build().entityVO(detail); if (userVO.getUserType().equals(UserEnum.WEB.getCategory())) { UserWeb userWeb = new UserWeb(); UserWeb query = userWeb.selectOne(Wrappers.lambdaQuery().eq(UserWeb::getUserId, user.getId())); if (ObjectUtil.isNotEmpty(query)) { userVO.setUserExt(query.getUserExt()); } } else if (userVO.getUserType().equals(UserEnum.APP.getCategory())) { UserApp userApp = new UserApp(); UserApp query = userApp.selectOne(Wrappers.lambdaQuery().eq(UserApp::getUserId, user.getId())); if (ObjectUtil.isNotEmpty(query)) { userVO.setUserExt(query.getUserExt()); } } else { UserOther userOther = new UserOther(); UserOther query = userOther.selectOne(Wrappers.lambdaQuery().eq(UserOther::getUserId, user.getId())); if (ObjectUtil.isNotEmpty(query)) { userVO.setUserExt(query.getUserExt()); } } return userVO; } /** * 按条件查询用户信息 * * @param user * @return */ @Override public List getUserListByParam(UserVO user) { if (!Strings.isBlank(user.getRoleName())) { // 查询对应的角色id String roleIds = roleService.getRoleIds("000000", user.getRoleName()); user.setRoleId(roleIds); } return baseMapper.getUserListByParam(user); } /** * 通过小区Id搜索用户 * * @param districtId * @return */ @Override public List searchUserByDistrictId(String districtId) { return baseMapper.searchUserByDistrictId(districtId); } /** * 根据手机号查询对应账号和手机号的用户信息 * * @param phoneNumber * @return */ @Override public List getUserListByPhoneOrAccount(String phoneNumber) { return baseMapper.getUserListByPhoneOrAccount(phoneNumber); } /** * 获取用户信息 * * @return */ @Override public UserDetailVO getUserInfo(Long userId) { // 根据用户id 获取用户详情信息 UserDetailVO userVO = baseMapper.getUserInfo(userId); if (null != userVO) { // 设置机构 userVO.setPassword(null); } // 返回 return userVO; } @Override public UserVO getuserById(Long id) { return baseMapper.searchUserById(id); } @Override public List getUserInfoByCode(String houseCode, String type) { if (type.equals("0")) { IGridmanService bean = SpringUtil.getBean(IGridmanService.class); return bean.getGridManByCode(houseCode); } else { IPropertyCompanyDistrictService bean1 = SpringUtil.getBean(IPropertyCompanyDistrictService.class); return bean1.getDistictUserByCode(houseCode); // 通过huosecode 查询物业工作人员 // String deptId = AuthUtil.getDeptId(); // List deptIdList = SysCache.getDeptChildIds(deptId); // return baseMapper.selectUserByDept(deptIdList); } } /** * 通过小区id查询物业人员 * * @param districtId * @param building * @return */ @Override public List getUserInfoByDistrictId(String districtId, String building) { return baseMapper.getUserInfoByDistrictId(districtId, building); } /** * 处理漏绑定的user_dept */ @Override public Object handleUserDept() { // 查询没有匹配的数据 List list = baseMapper.getNotBindUserDept(); // 遍历处理 for (User user : list) { UserDept userDept = new UserDept(); userDept.setUserId(user.getId()); userDept.setDeptId(Long.parseLong(user.getDeptId())); // 保存 userDeptService.save(userDept); } return null; } @Override public List getUserInfoByPropertyId(String propertyCompanyId, String roleId) { // 查询物业公司,获取物业公司的机构 if (StringUtils.isBlank(propertyCompanyId)) { return new ArrayList<>(); } IPropertyCompanyService bean = SpringUtil.getBean(IPropertyCompanyService.class); PropertyCompanyEntity one = bean.getOne(Wrappers.lambdaQuery().eq(PropertyCompanyEntity::getId, propertyCompanyId)); return baseMapper.getUserInfoByPropertyId(one.getDeptId().toString(), roleId); } @Override public Object handleUser() { List list = list(Wrappers.lambdaQuery() .eq(User::getDeptId, "1727979636479037441") .eq(User::getRoleId, "1717429059648606209")); IHouseholdService bean = SpringUtil.getBean(IHouseholdService.class); int a = 0; for (User user : list) { System.out.println("查詢處理啊的人:" + user.getId()); HouseholdEntity one = bean.getOne(Wrappers.lambdaQuery() .eq(HouseholdEntity::getAssociatedUserId, user.getId()) .eq(HouseholdEntity::getIsDeleted, 0)); if (one != null) { a++; } System.out.println("查詢處理啊的人:" + a); } return null; } /** * 导入民警信息 * * @param data */ @Override @Transactional(rollbackFor = Exception.class) public void importPoliceUser(List data) { for (PoliceUserExcel userExcel : data) { // 查询用户 List list = getUserListByPhoneOrAccount(userExcel.getPhone()); if (list.size() > 0) { User userInfo = list.get(0); // 判断角色 if (!userInfo.getRoleId().contains("1727864411451359233")) { userInfo.setRoleId(userInfo.getRoleId() + ",1727864411451359233"); } // 设置性别 setSex(userInfo,userExcel); // 更新机构 setDeptId(userInfo, userExcel); // 更新 updateById(userInfo); // 更新用户机构绑定 submitUserDept(userInfo); } else { // 插入用户角色 User user = new User(); user.setTenantId("000000"); user.setUserType(1); user.setRoleId("1727864411451359233"); user.setName(userExcel.getRealName()); user.setRealName(userExcel.getRealName()); user.setPhone(userExcel.getPhone()); user.setAccount(userExcel.getPhone()); // 设置性别 setSex(user,userExcel); // 更新机构 setDeptId(user, userExcel); // 设置初始密码 user.setPassword("123456"); // 保存 submit(user); // 更新用户机构绑定 submitUserDept(user); } } } /** * 设置性别 * @param user * @param userExcel */ private void setSex(User user, PoliceUserExcel userExcel) { if (userExcel.getSex().contains("男")){ user.setSex(1); } if (userExcel.getSex().contains("女")){ user.setSex(2); } } /** * 设置机构 */ public void setDeptId(User user, PoliceUserExcel userExcel) { // 查询机构 String deptIds = deptService.getDeptIds("000000", userExcel.getDeptName()); user.setDeptId(deptIds); } /** * 机构不为空时处理 * * @param user * @param dept */ public void DeptNotHandle(User user, Dept dept) { // 更新设置机构 if (!Strings.isBlank(user.getDeptId())) { // 查询对应的派出所(去掉) Dept deptPcs = SpringUtil.getBean(IDeptService.class).getDeptByDeptIds(user.getDeptId()); if (null != deptPcs) { // 如果存在需要去掉派出所的机构id List list = new ArrayList<>(Arrays.asList(user.getDeptId().split(","))); // 先删除派出所对应的机构ID if (list.contains(deptPcs.getId().toString())) { list.remove(deptPcs.getId().toString()); user.setDeptId(String.join(",", list)); } // 删完后可能就没了 if (!Strings.isBlank(user.getDeptId())) { if (!user.getDeptId().contains(dept.getId().toString())) { user.setDeptId(user.getDeptId() + "," + dept.getId()); } } else { // 删完后的 user.setDeptId(dept.getId().toString()); } } else { if (!user.getDeptId().contains(dept.getId().toString())) { user.setDeptId(user.getDeptId() + "," + dept.getId()); } } } } @Override public List getUserListByIds(String receiveUser) { return baseMapper.selectBatchIds(Arrays.asList(receiveUser.split(","))); } @Override public List getUserListByDeptIds(String receiveDept) { return baseMapper.getUserListByDeptIds(receiveDept); } /** * 通过经纬度查询最近的民警人员 * * @param longitude * @param latitude * @return */ @Override public List getPoliceUser(String longitude, String latitude, String houseCode) { List policeUser = baseMapper.getPoliceUser(longitude, latitude); // 自动生成警单 // if (StringUtils.isNotBlank(houseCode)) { // IPoliceAlarmRecordsService policeAlarmRecordsService = SpringUtil.getBean(IPoliceAlarmRecordsService.class); // PoliceAlarmRecordsEntity policeAlarmRecordsEntity = new PoliceAlarmRecordsEntity(); // policeAlarmRecordsEntity.setHouseCode(houseCode); // if (policeUser != null && policeUser.size() == 1) { // policeAlarmRecordsEntity.setPoliceId(policeUser.get(0).getId()); // } // policeAlarmRecordsService.save(policeAlarmRecordsEntity); // } return policeUser; } }