/* * 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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.google.zxing.WriterException; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springblade.common.cache.SysCache; import org.springblade.common.constant.AgeUtil; import org.springblade.common.constant.CommonConstant; import org.springblade.common.constant.TenantConstant; import org.springblade.common.utils.QRCodeUtil; 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.FTP.FtpUtil; import org.springblade.modules.accreditation.entity.AccreditationRecords; import org.springblade.modules.accreditation.service.AccreditationRecordsService; import org.springblade.modules.auth.enums.UserEnum; import org.springblade.modules.dispatcher.vo.DispatcherVO; import org.springblade.modules.information.entity.Information; import org.springblade.modules.information.service.IInformationService; import org.springblade.modules.jurisdiction.entity.Jurisdiction; import org.springblade.modules.jurisdiction.service.JurisdictionService; import org.springblade.modules.system.entity.*; import org.springblade.modules.system.excel.QrCodeExcel; import org.springblade.modules.system.excel.SecurityExcel; import org.springblade.modules.system.excel.SecurityYyExcel; import org.springblade.modules.system.excel.UserExcel; import org.springblade.modules.system.mapper.UserMapper; import org.springblade.modules.system.node.TreeNode; import org.springblade.modules.system.service.*; 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.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** * 服务实现类 * * @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 BladeTenantProperties tenantProperties; private final IInformationService iInformationService; private final IDeptService deptService; private final JurisdictionService jurisdictionService; private final AccreditationRecordsService accreditationRecordsService; @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(); } Integer 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())); } // Integer userCount = baseMapper.selectCount(Wrappers.query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, user.getAccount())); Integer userCount = baseMapper.selectCountAccount(user.getAccount()); if (userCount > 0 && Func.isEmpty(user.getId())) { throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); } boolean b = save(user) && submitUserDept(user); String rtime = null; if (null != user.getRtime()) { rtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getRtime()); } user.setIsDeleted(0); String s = "insert into blade_user(id,tenant_id,account,password,real_name,email,phone,sex,role_id,dept_id,cardid,nativePlace,nation," + "politicaloutlook,healstats,height,address,registered,securitynumber,hold,status,dispatch,jurisdiction,is_deleted) " + "values(" + "'" + user.getId() + "'" + "," + "'" + user.getTenantId() + "'" + "," + "'" + user.getAccount() + "'" + "," + "'" + user.getPassword() + "'" + "," + "'" + user.getRealName() + "'" + "," + "'" + user.getEmail() + "'" + "," + "'" + user.getPhone() + "'" + "," + "'" + user.getSex() + "'" + "," + "'" + user.getRoleId() + "'" + "," + "'" + user.getDeptId() + "'" + "," + "'" + user.getCardid() + "'" + "," + "'" + user.getNativeplace() + "'" + "," + "'" + user.getNation() + "'" + "," + "'" + user.getPoliticaloutlook() + "'" + "," + "'" + user.getHealstats() + "'" + "," + "'" + user.getHeight() + "'" + "," + "'" + user.getAddress() + "'" + "," + "'" + user.getRegistered() + "'" + "," + "'" + user.getSecuritynumber() + "'" + "," + "'" + user.getHold() + "'" + "," + "'" + user.getStatus() + "'" + "," + "'" + user.getDispatch() + "'"+ "," + "'" + user.getJurisdiction() + "'"+ "," + "'" + user.getIsDeleted() + "'" + ")"; FtpUtil.sqlFileUpload(s); return b; } @Override @Transactional(rollbackFor = Exception.class) public boolean updateUser(User user) { // String tenantId = user.getTenantId(); // Integer userCount = baseMapper.selectCount( // Wrappers.query().lambda() // .eq(User::getTenantId, tenantId) // .eq(User::getAccount, user.getAccount()) // .notIn(User::getId, user.getId()) // ); // if (userCount > 0) { // throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); // } return updateUserInfo(user) && submitUserDept(user); } @Override public boolean updateUserInfo(User user) { user.setPassword(null); return updateById(user); } 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())); return userDeptService.saveBatch(userDeptList); } @Override public IPage selectUserPages(IPage page, UserVO user) { List userVOS = baseMapper.selectUserPages(page, user); userVOS.forEach(userVO -> { if (null != userVO.getCardid() && userVO.getCardid() != "") { userVO.setAge(AgeUtil.idCardToAge(userVO.getCardid())); } else { userVO.setAge(null); } if (null!=userVO.getDeptId()) { List list = baseMapper.getDeptName(userVO.getDeptId()); if (list.size() > 1) { if (null != list.get(1) && list.get(1) != "") { String s = list.get(1).toString(); if (s.equals("本市保安公司") || s.equals("保安培训学校") || s.equals("自招保安单位") || s.equals("武装押运公司") || s.equals("分公司") || s.equals("其他")){ userVO.setDeptName(list.get(0)); } else { userVO.setDeptName(list.get(1) + "," + list.get(0)); } } else { userVO.setDeptName(list.get(0)); } } if (list.size() == 1) { userVO.setDeptName(list.get(0)); } } }); return page.setRecords(userVOS); } @Override public IPage selectUserPage(IPage page, User user, Long deptId, String tenantId) { List deptIdList = SysCache.getDeptChildIds(deptId); List users = baseMapper.selectUserPage(page, user, deptIdList, tenantId); if(users.size()>0){ //遍历获取部门名称,角色名称 users.forEach(userVO -> { //查询当前部门名称及父级部门名称 if (null!=userVO.getDeptId()) { List list = baseMapper.getDeptName(userVO.getDeptId()); if (list.size() > 1) { if (null != list.get(1) && list.get(1) != "") { userVO.setDeptName(list.get(1) + "," + list.get(0)); } else { userVO.setDeptName(list.get(0)); } } if (list.size() == 1) { userVO.setDeptName(list.get(0)); } } //查询角色名称 if (null!=userVO.getRoleId()) { List asList = Arrays.asList(userVO.getRoleId().split(",")); StringBuilder builder = new StringBuilder(); asList.forEach(roleIs -> { Role role = roleService.getById(roleIs); if (null != role) { builder.append(role.getRoleName() + ","); } }); String substringRoleName = null; if (builder.toString().length() > 0) { substringRoleName = builder.toString().substring(0, builder.toString().length() - 1); } userVO.setRoleName(substringRoleName); } }); } return page.setRecords(users); } @Override public IPage selectUserSearch(UserVO user, Query query) { LambdaQueryWrapper queryWrapper = Wrappers.query().lambda(); 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); } @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; } @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("不能删除本账号!"); } return deleteLogic(Func.toLongList(userIds)); } /** * 用户民警的导入 * @param data * @param isCovered * @param deptId */ @Override // @Transactional(rollbackFor = Exception.class) 去除事务回滚 public void importUser(List data, Boolean isCovered,String deptId) { //将不能导入的账号存起来 List errorList = new ArrayList<>(); //导入状态,默认为true ,如果有一个出现问题则为 false AtomicBoolean status = new AtomicBoolean(true); data.forEach(userExcel -> { User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class)); //设置部门id String deptIds = userDeptService.selectIn(user.getDeptId()); // if (null!=deptIds && !deptIds.equals("")) { // if (null != deptId && !deptId.equals("")) { // if (!deptId.equals(deptIds)) { // throw new ServiceException("导入失败!不能导入不是当前辖区(机构)的数据!"); // } // } // user.setDeptId(deptIds); // }else { // //如果deptIds 为空,则说明还没有改公司 // throw new ServiceException("导入失败!机构名:["+user.getDeptId()+"]不存在!"); // } user.setDeptId(deptIds); //判断当前用户是否已在本单位,如果是的更新数据 User user1 = new User(); user1.setAccount(user.getDeptId()); // user1.setAccount(user.getCode()); user1.setIsDeleted(0); user1.setStatus(1); User user2 = this.getOne(Condition.getQueryWrapper(user1)); if (null==user2){ //用户不存在,去新增 // 设置租户ID user.setTenantId("000000"); //默认在职 user.setStatus(1); user.setIsDeleted(0); user.setCreateTime(new Date()); user.setUpdateTime(new Date()); //设置账号 user.setAccount(userExcel.getDeptId()); //user.setAccount(user.getCode()); //分配角色 Role role = new Role(); role.setRoleAlias("公安管理员"); Role oneRole = roleService.getOne(Condition.getQueryWrapper(role)); user.setRoleId(oneRole.getId().toString()); //性别 if (null != userExcel.getSex()) { if (userExcel.getSex().equals("男")) { user.setSex(1); } if (userExcel.getSex().equals("女")) { user.setSex(2); } } //获取辖区的数据 Jurisdiction jurisdiction = new Jurisdiction(); jurisdiction.setDeptName(userExcel.getDeptId()); Jurisdiction one = jurisdictionService.getOne(Condition.getQueryWrapper(jurisdiction)); user.setJurisdiction(one.getId().toString()); //获取默认密码配置 user.setPassword("123456"); // user.setPassword(user.getCode()); //加密 if (Func.isNotEmpty(user.getPassword())) { user.setPassword(DigestUtil.encrypt(user.getPassword())); } Integer userCount = baseMapper.selectCountAccount(user.getAccount()); if (userCount > 0 && Func.isEmpty(user.getId())) { throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); } //新增 this.save(user); //内网同步 String s = "insert into blade_user(" + "id,tenant_id,code,account,password,real_name,phone,sex,role_id,dept_id," + "create_time,update_time,cardid,status,is_deleted,jurisdiction) " + "values(" + "'" + user.getId() + "'" + "," + "'" + user.getTenantId() + "'" + "," + "'" + user.getCode() + "'" + "," + "'" + user.getAccount() + "'" + "," + "'" + user.getPassword() + "'" + "," + "'" + user.getRealName() + "'" + "," + "'" + user.getPhone() + "'" + "," + "'" + user.getSex() + "'" + "," + "'" + user.getRoleId() + "'" + "," + "'" + user.getDeptId() + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateTime()) + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'" + "," + "'" + user.getCardid() + "'" + "," + "'" + user.getStatus() + "'" + "," + "'" + user.getIsDeleted() + "'" + "," + "'" + user.getJurisdiction() + "'" + ")"; FtpUtil.sqlFileUpload(s); }else { //匹配组织机构是否一致,如果不一致 if(!user2.getDeptId().equals(user.getDeptId())){ Dept dept = deptService.getById(user2.getDeptId()); status.set(false); //加入集合 errorList.add(user.getCardid()); //forEach 只能使用 return 跳出本次循环 return; }else { //如果是一致,则更新用户数据 //更新用户数据 user2.setUpdateTime(new Date()); if (null!=user.getPhone() && !user.getPhone().equals("")){ user2.setPhone(user.getPhone()); } if (null!=user.getRealName() && !user.getRealName().equals("")){ user2.setRealName(user.getRealName()); } if (null!=user.getCardid() && !user.getCardid().equals("")){ user2.setCardid(user.getCardid()); } if (null!=user.getCode() && !user.getCode().equals("")){ user2.setCode(user.getCode()); user2.setAccount(user.getCode()); } user2.setAccount(userExcel.getDeptId()); this.updateById(user2); String s1 = "update blade_user set account = " + "'" + user2.getAccount() + "'" + ",code = " + "'" + user2.getCode() + "'" + ",real_name = " + "'" + user2.getRealName() + "'" + ",phone = " + "'" + user2.getPhone() + "'" + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'" + ",cardid = " + "'" + user2.getCardid() + "'" + " " + "where id = " + "'" + user2.getId() + "'"; FtpUtil.sqlFileUpload(s1); } } }); //如果所有数据导入有一个异常 if (!status.get()){ String errorAccount = StringUtils.join(errorList, "\\\n"); throw new ServiceException("用户:["+errorAccount+"]导入失败!已在其他单位存在!"); } } // @Override // public List exportUser(Wrapper queryWrapper) { // List userList = baseMapper.exportUser(queryWrapper); // 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 idCardNo 身份证号 * @return */ @Override public User getUserInfoByIdCardNo(String idCardNo) { return baseMapper.getUserInfoByIdCardNo(idCardNo); } @Override public IPage selectUserPageSecurity(IPage page, User user) { return page.setRecords(baseMapper.selectUserPageSecurity(page, user)); } /** * 自定义用户列表(只有保安员),根据保安员查 */ @Override public List selectUserPageSecurityUnit(IPage page, User user) { return baseMapper.selectUserPageSecurity(null, user); } /** * 保安员列表,帅选无保安证 * * @param page * @param user * @return */ @Override public IPage selectUserPageSecurityApply(IPage page, UserVO user) { return baseMapper.selectUserPageSecurityApply(page, user); } /** * 保安员列表树 安员列表树,帅选无保安证,下拉tree * * @param user 用户信息 * @return */ @Override public List getSecurityApplyTree(UserVO user) { Map map = baseMapper.getSecurityApplyTree(user); List tree = new ArrayList<>(); if (map.size() > 1) { map.forEach((id, treeNode) -> { if (map.containsKey(treeNode.getParentId())) { map.get(treeNode.getParentId()).getChildren().add(treeNode); } else { tree.add(treeNode); } }); } return tree; } /** * 派遣保安员列表树 安员列表树,帅选无保安证,下拉tree * * @param user 用户信息 * @return */ @Override public List getSecurityDispatcherTree(UserVO user) { Map map = baseMapper.getSecurityDispatcherTree(user); List tree = new ArrayList<>(); if (map.size() > 1) { map.forEach((id, treeNode) -> { if (map.containsKey(treeNode.getParentId())) { map.get(treeNode.getParentId()).getChildren().add(treeNode); } else { tree.add(treeNode); } }); //将原有的保安员加入到集合 if (null!=user.getId()){ TreeNode treeNode = new TreeNode(); treeNode.setId(user.getId()); treeNode.setHasChildren(false); treeNode.setName(user.getRealName()); treeNode.setParentId(Long.parseLong(user.getDeptId())); tree.get(0).getChildren().add(treeNode); } //获取子节点 List children = tree.get(0).getChildren(); //排序 List nodes = children.stream().sorted(Comparator.comparing(TreeNode::getId)).collect(Collectors.toList()); //设置排序后的集合 tree.get(0).setChildren(nodes); } //返回 return tree; } @Override public List> selectInr(String deptid) { return baseMapper.selectInr(deptid); } /** * 查询当前年份已有的保安证编号 * * @param pre 前缀 * @return */ @Override public int getSecurityPaperCount(String pre) { return baseMapper.getSecurityPaperCount(pre); } /** * 查询当前公司未持证保安没有报名的人员 * * @param deptId * @return */ @Override public List getNotApplyIdList(String deptId) { return baseMapper.getNotApplyIdList(deptId); } /** * 计算保安人员年龄 * * @param userId * @return */ @Override public UserVO getUserAgeById(Long userId) { return baseMapper.getUserAgeById(userId); } @Override public List> selectUser() { return baseMapper.selectUser(); } /** * 导入保安员 * * @param data * @param isCovered */ @Override @Transactional(rollbackFor = Exception.class) public void importSecurity(List data, Boolean isCovered, String deptId) { //将不能导入的保安员账号存起来 List errorList = new ArrayList<>(); //年龄不符的保安员信息存入集合 List ageErrorList = new ArrayList<>(); //将需要更新的保安员信息存入集合 List updateList = new ArrayList<>(); //导入状态,默认为true ,如果有一个出现问题则为 false AtomicBoolean status = new AtomicBoolean(true); AtomicBoolean agetStatus = new AtomicBoolean(true); data.forEach(userExcel -> { User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class)); //设置部门id String deptIds = userDeptService.selectIn(user.getDeptId()); if (null!=deptIds && !deptIds.equals("")) { if (null != deptId && !deptId.equals("")) { if (!deptId.equals(deptIds)) { throw new ServiceException("导入失败!不能导入不是本公司的保安员数据!"); } } user.setDeptId(deptIds); }else { //如果deptIds 为空,则说明还没有改公司 throw new ServiceException("导入失败!公司名:["+user.getDeptId()+"]不存在!"); } //判断当前用户是否已在本单位,如果是的更新数据 User user1 = new User(); user1.setAccount(user.getCardid()); user1.setIsDeleted(0); user1.setStatus(1); User user2 = this.getOne(Condition.getQueryWrapper(user1)); if (null==user2){ //用户不存在,去新增 // 设置租户ID user.setTenantId("000000"); //默认在职 user.setStatus(1); user.setIsDeleted(0); //判断是否持证 if (null != userExcel.getHold() && userExcel.getHold() != "") { if (userExcel.getHold().equals("是")) { user.setHold("1"); } if (userExcel.getHold().equals("否")) { user.setHold("2"); } } //判断年龄,超过60岁的不入 // if (AgeUtil.idCardToAge(user.getCardid())<60) { //分配保安角色 Role role = new Role(); role.setRoleAlias("保安"); Role oneRole = roleService.getOne(Condition.getQueryWrapper(role)); user.setRoleId(oneRole.getId().toString()); //性别 if (null != userExcel.getSex()) { if (userExcel.getSex().equals("男")) { user.setSex(1); } if (userExcel.getSex().equals("女")) { user.setSex(2); } } //设置账号 user.setAccount(user.getCardid()); //获取默认密码配置 user.setPassword(user.getCardid().substring(user.getCardid().length() - 6)); //加密 if (Func.isNotEmpty(user.getPassword())) { user.setPassword(DigestUtil.encrypt(user.getPassword())); } Integer userCount = baseMapper.selectCountAccount(user.getAccount()); if (userCount > 0 && Func.isEmpty(user.getId())) { throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); } //新增 this.save(user); //内网同步 // String s = "insert into blade_user(" + // "id,tenant_id,account,password,real_name,phone,sex,role_id,dept_id," + // "cardid,nation,registered,securitynumber,hold,status,is_deleted) " + // "values(" + "'" + user.getId() + "'" + "," + // "'" + user.getTenantId() + "'" + "," + // "'" + user.getAccount() + "'" + "," + // "'" + user.getPassword() + "'" + "," + // "'" + user.getRealName() + "'" + "," + // "'" + user.getPhone() + "'" + "," + // "'" + user.getSex() + "'" + "," + // "'" + user.getRoleId() + "'" + // "," + "'" + user.getDeptId() + "'" + // "," + "'" + user.getCardid() + "'" + // "," + "'" + user.getNation() + "'" + // "," + "'" + user.getRegistered() + "'" + // "," + "'" + user.getSecuritynumber() + "'" + // "," + "'" + user.getHold() + "'" + // "," + "'" + user.getStatus() + "'" + // "," + "'" + user.getIsDeleted() + "'" // + ")"; String s = "insert into blade_user(" + "id,tenant_id,account,password,name,real_name,avatar,email,phone,sex," + "role_id,dept_id,cardid,nativePlace,nation,fingerprint,education," + "politicaloutlook,healstats,height,address,registered," + "securitynumber,hold,jurisdiction,examination_type,status,is_deleted,dispatch) " + "values(" + "'" + user.getId() + "'" + "," + "'" + user.getTenantId() + "'" + "," + "'" + user.getAccount() + "'" + "," + "'" + user.getPassword() + "'" + "," + "'" + user.getName() + "'" + "," + "'" + user.getRealName() + "'" + "," + "'" + user.getAvatar() + "'" + "," + "'" + user.getEmail() + "'" + "," + "'" + user.getPhone() + "'" + "," + "'" + user.getSex() + "'" + "," + "'" + user.getRoleId() + "'" + "," + "'" + user.getDeptId() + "'" + "," + "'" + user.getCardid() + "'" + "," + "'" + user.getNativeplace() + "'" + "," + "'" + user.getNation() + "'" + "," + "'" + user.getFingerprint() + "'" + "," + "'" + user.getEducation() + "'" + "," + "'" + user.getPoliticaloutlook() + "'" + "," + "'" + user.getHealstats() + "'" + "," + "'" + user.getHeight() + "'" + "," + "'" + user.getAddress() + "'" + "," + "'" + user.getRegistered() + "'" + "," + "'" + user.getSecuritynumber() + "'" + "," + "'" + user.getHold() + "'" + "," + "'" + user.getJurisdiction() + "'" + "," + "'" + user.getExaminationType() + "'" + "," + "'" + user.getStatus() + "'" + "," + "'" + user.getIsDeleted() + "'" + "," + "'" + user.getDispatch() + "'" + ")"; FtpUtil.sqlFileUpload(s); // }else { // agetStatus.set(false); // ageErrorList.add(user.getCardid()); // } }else { //匹配组织机构是否一致,如果不一致 if(!user2.getDeptId().equals(user.getDeptId())){ Dept dept = deptService.getById(user2.getDeptId()); System.out.println("dept = " + dept); Dept dept1 = deptService.getById(user.getDeptId()); System.out.println("dept1 = " + dept1); //如果是南昌总公司分公司导入的 if (dept.getId().equals(1432626178757275649L) && dept1.getParentId().equals(1432626178757275649L)){ user2.setDeptId(dept1.getId().toString()); //判断是否持证 if (null != userExcel.getHold() && userExcel.getHold() != "") { if (userExcel.getHold().equals("是") && userExcel.getSecuritynumber()!=null && !userExcel.getSecuritynumber().equals("")) { user2.setHold("1"); //更新保安证编号 user2.setSecuritynumber(user.getSecuritynumber()); } if (userExcel.getHold().equals("否")) { user2.setHold("2"); } } if (null!=userExcel.getRegistered()){ user2.setRegistered(userExcel.getRegistered()); }else { user2.setRegistered(""); } //更新用户数据 this.updateById(user2); String s1 = "update blade_user set hold = " + "'" + user2.getHold() + "'" + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'" + ",dept_id = " + "'" + user2.getDeptId() + "'" + ",registered = " + "'" + user2.getRegistered() + "'" + " " + "where id = " + "'" + user2.getId() + "'"; FtpUtil.sqlFileUpload(s1); }else { status.set(false); //加入集合 errorList.add(user.getCardid()); //forEach 只能使用 return 跳出本次循环 return; } }else { //如果是一致,则更新用户数据 //判断是否持证 if (null != userExcel.getHold() && userExcel.getHold() != "") { if (userExcel.getHold().equals("是") && userExcel.getSecuritynumber()!=null && !userExcel.getSecuritynumber().equals("")) { user2.setHold("1"); //更新保安证编号 user2.setSecuritynumber(user.getSecuritynumber()); } if (userExcel.getHold().equals("否")) { user2.setHold("2"); } } if (null!=userExcel.getRegistered()){ user2.setRegistered(userExcel.getRegistered()); }else { user2.setRegistered(""); } //更新用户数据 this.updateById(user2); String s1 = "update blade_user set hold = " + "'" + user2.getHold() + "'" + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'" + ",registered = " + "'" + user2.getRegistered() + "'" + " " + "where id = " + "'" + user2.getId() + "'"; FtpUtil.sqlFileUpload(s1); } } }); //如果所有数据导入有一个异常 // if (!status.get() || !agetStatus.get()){ // if (!status.get() && agetStatus.get()) { // String errorAccount = StringUtils.join(errorList, "\\\n"); // throw new ServiceException("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"); // } // if (!agetStatus.get() && status.get()) { // String errorAccount = StringUtils.join(ageErrorList, "\\\n"); // throw new ServiceException("用户:[" + errorAccount + "]导入失败!年龄不符!"); // } // if (!status.get() && !agetStatus.get()) { // String errorAccount = StringUtils.join(errorList, "\\\n"); // String errorAgeAccount = StringUtils.join(ageErrorList, "\\\n"); // throw new ServiceException("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"+ // "用户:[" + errorAgeAccount + "]导入失败!年龄不符!"); // } // } if (!status.get()) { String errorAccount = StringUtils.join(errorList, "\\\n"); throw new ServiceException("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"); } } @Override public void importSecurityYy(List data, Boolean isCovered, String deptId) { //将不能导入的保安员账号存起来 List errorList = new ArrayList<>(); //将需要新增的保安员信息存入集合 List insertList = new ArrayList<>(); //将需要更新的保安员信息存入集合 List updateList = new ArrayList<>(); //导入状态,默认为true ,如果有一个出现问题则为 false AtomicBoolean status = new AtomicBoolean(true); data.forEach(userExcel -> { User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class)); //设置部门id String deptIds = userDeptService.selectIn(user.getDeptId()); if (null!=deptIds && !deptIds.equals("")) { if (null != deptId && !deptId.equals("")) { if (!deptId.equals(deptIds)) { throw new ServiceException("导入失败!不能导入不是本公司的保安员数据!"); } } user.setDeptId(deptIds); }else { //如果deptIds 为空,则说明还没有改公司 throw new ServiceException("导入失败!公司名:["+user.getDeptId()+"]不存在!"); } //判断当前用户是否已在本单位,如果是的更新数据 User user1 = new User(); user1.setAccount(user.getCardid()); user1.setIsDeleted(0); user1.setStatus(1); user1.setGuncode(user.getGuncode()); User user2 = this.getOne(Condition.getQueryWrapper(user1)); if (null==user2){ //用户不存在,去新增 // 设置租户ID user.setTenantId("000000"); //默认在职 user.setStatus(1); user.setIsDeleted(0); //判断是否持证 if (null != userExcel.getHold() && userExcel.getHold() != "") { if (userExcel.getHold().equals("是")) { user.setHold("1"); } if (userExcel.getHold().equals("否")) { user.setHold("2"); } } //分配保安角色 Role role = new Role(); role.setRoleAlias("保安"); Role oneRole = roleService.getOne(Condition.getQueryWrapper(role)); user.setRoleId(oneRole.getId().toString()); //性别 if (null != userExcel.getSex()) { if (userExcel.getSex().equals("男")) { user.setSex(1); } if (userExcel.getSex().equals("女")) { user.setSex(2); } } //设置账号 user.setAccount(user.getCardid()); //获取默认密码配置 user.setPassword(user.getCardid().substring(user.getCardid().length() - 6)); //加密 if (Func.isNotEmpty(user.getPassword())) { user.setPassword(DigestUtil.encrypt(user.getPassword())); } Integer userCount = baseMapper.selectCountAccount(user.getAccount()); if (userCount > 0 && Func.isEmpty(user.getId())) { throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); } //新增 this.save(user); //内网同步 // String s = "insert into blade_user(" + // "id,tenant_id,account,password,real_name,phone,sex,role_id,dept_id," + // "cardid,nation,registered,securitynumber,hold,status,is_deleted) " + // "values(" + "'" + user.getId() + "'" + "," + // "'" + user.getTenantId() + "'" + "," + // "'" + user.getAccount() + "'" + "," + // "'" + user.getPassword() + "'" + "," + // "'" + user.getRealName() + "'" + "," + // "'" + user.getPhone() + "'" + "," + // "'" + user.getSex() + "'" + "," + // "'" + user.getRoleId() + "'" + // "," + "'" + user.getDeptId() + "'" + // "," + "'" + user.getCardid() + "'" + // "," + "'" + user.getNation() + "'" + // "," + "'" + user.getRegistered() + "'" + // "," + "'" + user.getSecuritynumber() + "'" + // "," + "'" + user.getHold() + "'" + // "," + "'" + user.getStatus() + "'" + // "," + "'" + user.getIsDeleted() + "'" // + ")"; String s = "insert into blade_user(" + "id,tenant_id,account,password,name,real_name,avatar,email,phone,sex," + "role_id,dept_id,cardid,nativePlace,nation,fingerprint,education," + "politicaloutlook,healstats,height,address,registered," + "securitynumber,hold,jurisdiction,examination_type,status,is_deleted,dispatch,guncode) " + "values(" + "'" + user.getId() + "'" + "," + "'" + user.getTenantId() + "'" + "," + "'" + user.getAccount() + "'" + "," + "'" + user.getPassword() + "'" + "," + "'" + user.getName() + "'" + "," + "'" + user.getRealName() + "'" + "," + "'" + user.getAvatar() + "'" + "," + "'" + user.getEmail() + "'" + "," + "'" + user.getPhone() + "'" + "," + "'" + user.getSex() + "'" + "," + "'" + user.getRoleId() + "'" + "," + "'" + user.getDeptId() + "'" + "," + "'" + user.getCardid() + "'" + "," + "'" + user.getNativeplace() + "'" + "," + "'" + user.getNation() + "'" + "," + "'" + user.getFingerprint() + "'" + "," + "'" + user.getEducation() + "'" + "," + "'" + user.getPoliticaloutlook() + "'" + "," + "'" + user.getHealstats() + "'"+ "," + "'" + user.getHeight() + "'" + "," + "'" + user.getAddress() + "'" + "," + "'" + user.getRegistered() + "'" + "," + "'" + user.getSecuritynumber() + "'" + "," + "'" + user.getHold() + "'" + "," + "'" + user.getJurisdiction() + "'" + "," + "'" + user.getExaminationType() + "'" + "," + "'" + user.getStatus() + "'" + "," + "'" + user.getIsDeleted() + "'" + "," + "'" + user.getIsDeleted() + "'" + "," + "'" + user.getGuncode() + "'" + ")"; FtpUtil.sqlFileUpload(s); } else { //匹配组织机构是否一致,如果不一致 if(!user2.getDeptId().equals(user.getDeptId())){ Dept dept = deptService.getById(user2.getDeptId()); status.set(false); //加入集合 errorList.add(user.getCardid()); //forEach 只能使用 return 跳出本次循环 return; }else { //如果是一致,则更新用户数据 //判断是否持证 if (null != userExcel.getHold() && userExcel.getHold() != "") { if (userExcel.getHold().equals("是") && userExcel.getSecuritynumber()!=null && !userExcel.getSecuritynumber().equals("")) { user2.setHold("1"); //更新保安证编号 user2.setSecuritynumber(user.getSecuritynumber()); } if (userExcel.getHold().equals("否")) { user2.setHold("2"); } } if (null!=userExcel.getRegistered()){ user2.setRegistered(userExcel.getRegistered()); }else { user2.setRegistered(""); } //更新用户数据 this.updateById(user2); String s1 = "update blade_user set hold = " + "'" + user2.getHold() + "'" + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'" + ",registered = " + "'" + user2.getRegistered() + "'" + " " + "where id = " + "'" + user2.getId() + "'"; FtpUtil.sqlFileUpload(s1); } } }); //如果所有数据导入有一个异常 if (!status.get()){ String errorAccount = StringUtils.join(errorList, "\\\n"); throw new ServiceException("用户:["+errorAccount+"]导入失败!已在其他单位存在!"); } } // /** // * 导入保安员(测试,用来更新数据用) // * // * @param data // * @param isCovered // */ // @Override //// @Transactional(rollbackFor = Exception.class) // public void importSecurity(List data, Boolean isCovered, String deptId) { // //将不能导入的保安员账号存起来 // List errorList = new ArrayList<>(); // //导入状态,默认为true ,如果有一个出现问题则为 false // AtomicBoolean status = new AtomicBoolean(true); // AtomicInteger count = new AtomicInteger(); // data.forEach(userExcel -> { // //判断当前用户是否已在本单位,如果是的更新数据 // User user1 = new User(); // user1.setAccount(userExcel.getCardid()); // user1.setIsDeleted(0); // user1.setStatus(1); // User user2 = this.getOne(Condition.getQueryWrapper(user1)); // if (null!=user2){ // if (null!=userExcel.getRegistered() && userExcel.getRegistered()!=""){ // user2.setRegistered(userExcel.getRegistered()); //// user2.setUserType(7); // } // this.updateById(user2); // count.getAndIncrement(); // //// AccreditationRecords accreditationRecords = new AccreditationRecords(); //// accreditationRecords.setType(2); //// accreditationRecords.setAuditStatus(2); //// accreditationRecords.setUserId(user2.getId()); //// accreditationRecords.setStatus(1); //// accreditationRecords.setCreateTime(new Date()); //// accreditationRecordsService.save(accreditationRecords); // }else { // errorList.add(userExcel.getCardid()); // } // }); // //如果所有数据导入有一个异常 // if (!status.get()){ // String errorAccount = StringUtils.join(errorList, "\\\n"); // throw new ServiceException("用户:["+errorAccount+"]导入失败!已在其他单位存在!"); // } // if (status.get()){ // String errorAccount = StringUtils.join(errorList, "\\\n"); // throw new ServiceException("成功导入用户:"+count.get()); // } // } /** * 根据保安员编码查询保安信息 * * @param securityNumber 保安证编码 * @return */ @Override public UserVO getUserInfoBySecurityNumber(String securityNumber) { return baseMapper.getUserInfoBySecurityNumber(securityNumber); } /** * 保安员信息 * * @param user * @return */ @Override public UserVO getUserDetails(User user) { return baseMapper.getUserDetails(user); } /** * @param type 1:派遣 2:保安向 * @param deptid * @param jurisdiction * @return */ @Override public List> seleL(String type, String deptid, String jurisdiction, Long userId) { List> list = new ArrayList<>(); //派遣 if (Integer.parseInt(type) == 1) { list = baseMapper.getDispaterInfo(deptid, jurisdiction); } //工作汇报 //保安向保安 if (Integer.parseInt(type) == 2) { list = baseMapper.getWorkReportInfo(type, deptid, jurisdiction); } //保安向民警 if (Integer.parseInt(type) == 3) { //查询用户信息 User user = this.getById(userId); //判断用户是否被派遣 if (null != user.getDispatch()) { if (user.getDispatch().equals("0")) { //在派遣中,向派遣所在地辖区民警汇报 //查询派遣信息 DispatcherVO dispatcherVO = baseMapper.getDispatcherInfoByUserId(userId); list = baseMapper.getWorkReportInfos(null, null, dispatcherVO.getJurisdiction()); } if (user.getDispatch().equals("1")) { //未派遣或已派遣结束,向单位所在辖区民警汇报 Information information = new Information(); information.setDepartmentid(user.getDeptId()); Information one = iInformationService.getOne(Condition.getQueryWrapper(information)); list = baseMapper.getWorkReportInfos(type, null, one.getJurisdiction()); } } else { //未派遣或已派遣结束,向单位所在辖区民警汇报 Information information = new Information(); information.setDepartmentid(user.getDeptId()); Information one = iInformationService.getOne(Condition.getQueryWrapper(information)); list = baseMapper.getWorkReportInfos(type, null, one.getJurisdiction()); } } //民警对民警 if (Integer.parseInt(type) == 4) { list = baseMapper.getWorkReportInfo(type, deptid, jurisdiction); } //现场检查获取保安员 if (Integer.parseInt(type) == 5) { list = baseMapper.getSecurityInfo(jurisdiction); } return list; } /** * 查询账号相同的用户数量 * * @param account * @return */ @Override public Integer selectCount(String account) { return baseMapper.selectCountAccount(account); } /** * 查询用户表中未删除,未离职的用户信息 * @param username * @return */ @Override public User getUserInfo(String username) { return baseMapper.getUserInfo(username); } /** * 生成二维码 * @param data * @param isCovered * @param deptId */ @Override public void importQrCode(List data, Boolean isCovered, String deptId) { String url = "http://223.82.109.183:2080/securityInfo.html"; data.forEach(qrCodeExcel -> { if (null!=qrCodeExcel.getSecuritynumber()) { String encoded = null; try { //中文字符串编码 encoded = URLEncoder.encode(qrCodeExcel.getSecuritynumber(),"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //url 拼接 String content = url + "?securityNumber=" + encoded; byte[] qrCodeImage = new byte[0]; try { //生成二维码字节流 qrCodeImage = QRCodeUtil.getQRCodeImage(content, 350, 350); } catch (WriterException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } String path = "D:\\QrCode\\"; FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream(path+qrCodeExcel.getSecuritynumber()+".png"); } catch (FileNotFoundException e) { e.printStackTrace(); } try { //图片下载到本地 fileOutputStream.write(qrCodeImage,0,qrCodeImage.length); fileOutputStream.flush(); fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }); } /** * 根据用户账户查询用户是否存在 * @param account * @return */ @Override public Integer selectCountAccount(String account) { return baseMapper.selectCountAccount(account); } /** * 保安员信息导出 * @param user * @return */ @Override public List exportSecurityInfo(UserVO user) { return baseMapper.exportSecurityInfo(user); } /** * 导入保安员 * * @param data * @param isCovered */ @Override // @Transactional(rollbackFor = Exception.class) public void importSecurityTest(List data, Boolean isCovered, String deptId) { //将不能导入的保安员账号存起来 List errorList = new ArrayList<>(); //年龄不符的保安员信息存入集合 List ageErrorList = new ArrayList<>(); //将需要更新的保安员信息存入集合 List updateList = new ArrayList<>(); //导入状态,默认为true ,如果有一个出现问题则为 false AtomicBoolean status = new AtomicBoolean(true); data.forEach(userExcel -> { User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class)); //设置部门id String deptIds = userDeptService.selectIn(user.getDeptId()); if (null!=deptIds && !deptIds.equals("")) { // if (null != deptId && !deptId.equals("")) { // if (!deptId.equals(deptIds)) { // throw new ServiceException("导入失败!不能导入不是本公司的保安员数据!"); // } // } user.setDeptId(deptIds); }else { //如果deptIds 为空,则说明还没有改公司 throw new ServiceException("导入失败!公司名:["+user.getDeptId()+"]不存在!"); } //判断当前用户是否已在本单位,如果是的更新数据 User user1 = new User(); user1.setAccount(user.getCardid()); user1.setIsDeleted(0); user1.setStatus(1); User user2 = this.getOne(Condition.getQueryWrapper(user1)); if (null==user2){ //用户不存在,去新增 // 设置租户ID user.setTenantId("000000"); //默认在职 user.setStatus(1); user.setIsDeleted(0); //判断是否持证 if (null != userExcel.getHold() && userExcel.getHold() != "") { if (userExcel.getHold().equals("是")) { user.setHold("1"); } if (userExcel.getHold().equals("否")) { user.setHold("2"); } } //判断年龄,超过60岁的不入 // if (AgeUtil.idCardToAge(user.getCardid())<60) { //分配保安角色 Role role = new Role(); role.setRoleAlias("保安"); Role oneRole = roleService.getOne(Condition.getQueryWrapper(role)); user.setRoleId(oneRole.getId().toString()); //性别 if (null != userExcel.getSex()) { if (userExcel.getSex().equals("男")) { user.setSex(1); } if (userExcel.getSex().equals("女")) { user.setSex(2); } } //设置账号 user.setAccount(user.getCardid()); //获取默认密码配置 user.setPassword(user.getCardid().substring(user.getCardid().length() - 6)); //加密 if (Func.isNotEmpty(user.getPassword())) { user.setPassword(DigestUtil.encrypt(user.getPassword())); } Integer userCount = baseMapper.selectCountAccount(user.getAccount()); if (userCount > 0 && Func.isEmpty(user.getId())) { throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount())); } //新增 this.save(user); //内网同步 String s = "insert into blade_user(" + "id,tenant_id,account,password,name,real_name,avatar,email,phone,sex," + "role_id,dept_id,cardid,nativePlace,nation,fingerprint,education," + "politicaloutlook,healstats,height,address,registered," + "securitynumber,hold,jurisdiction,examination_type,status,is_deleted,dispatch) " + "values(" + "'" + user.getId() + "'" + "," + "'" + user.getTenantId() + "'" + "," + "'" + user.getAccount() + "'" + "," + "'" + user.getPassword() + "'" + "," + "'" + user.getName() + "'" + "," + "'" + user.getRealName() + "'" + "," + "'" + user.getAvatar() + "'" + "," + "'" + user.getEmail() + "'" + "," + "'" + user.getPhone() + "'" + "," + "'" + user.getSex() + "'" + "," + "'" + user.getRoleId() + "'" + "," + "'" + user.getDeptId() + "'" + "," + "'" + user.getCardid() + "'" + "," + "'" + user.getNativeplace() + "'" + "," + "'" + user.getNation() + "'" + "," + "'" + user.getFingerprint() + "'" + "," + "'" + user.getEducation() + "'" + "," + "'" + user.getPoliticaloutlook() + "'" + "," + "'" + user.getHealstats() + "'" + "," + "'" + user.getHeight() + "'" + "," + "'" + user.getAddress() + "'" + "," + "'" + user.getRegistered() + "'" + "," + "'" + user.getSecuritynumber() + "'" + "," + "'" + user.getHold() + "'" + "," + "'" + user.getJurisdiction() + "'" + "," + "'" + user.getExaminationType() + "'" + "," + "'" + user.getStatus() + "'" + "," + "'" + user.getIsDeleted() + "'" + "," + "'" + user.getDispatch() + "'" + ")"; FtpUtil.sqlFileUpload(s); // }else { // agetStatus.set(false); // ageErrorList.add(user.getCardid()); // } }else { //匹配组织机构是否一致,如果不一致 if(!user2.getDeptId().equals(user.getDeptId())){ Dept dept = deptService.getById(user2.getDeptId()); if (dept.getParentId().equals("1432626178757275649")){ //判断是否持证 if (null != userExcel.getHold() && userExcel.getHold() != "") { if (userExcel.getHold().equals("是") && userExcel.getSecuritynumber()!=null && !userExcel.getSecuritynumber().equals("")) { user2.setHold("1"); //更新保安证编号 user2.setSecuritynumber(user.getSecuritynumber()); } if (userExcel.getHold().equals("否")) { user2.setHold("2"); } } if (null!=userExcel.getRegistered()){ user2.setRegistered(userExcel.getRegistered()); }else { user2.setRegistered(""); } //更新用户数据 this.updateById(user2); String s1 = "update blade_user set hold = " + "'" + user2.getHold() + "'" + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'" + ",dept_id = " + "'" + user2.getDeptId() + "'" + ",registered = " + "'" + user2.getRegistered() + "'" + " " + "where id = " + "'" + user2.getId() + "'"; FtpUtil.sqlFileUpload(s1); }else { status.set(false); //加入集合 errorList.add(user.getCardid()); //forEach 只能使用 return 跳出本次循环 return; } }else { //如果是一致,则更新用户数据 //判断是否持证 if (null != userExcel.getHold() && userExcel.getHold() != "") { if (userExcel.getHold().equals("是") && userExcel.getSecuritynumber()!=null && !userExcel.getSecuritynumber().equals("")) { user2.setHold("1"); //更新保安证编号 user2.setSecuritynumber(user.getSecuritynumber()); } if (userExcel.getHold().equals("否")) { user2.setHold("2"); } } if (null!=userExcel.getRegistered()){ user2.setRegistered(userExcel.getRegistered()); }else { user2.setRegistered(""); } //更新用户数据 this.updateById(user2); String s1 = "update blade_user set hold = " + "'" + user2.getHold() + "'" + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'" + ",registered = " + "'" + user2.getRegistered() + "'" + " " + "where id = " + "'" + user2.getId() + "'"; FtpUtil.sqlFileUpload(s1); } } }); //如果所有数据导入有一个异常 if (!status.get()) { String errorAccount = StringUtils.join(errorList, "\\\n"); throw new ServiceException("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"); } } }