/* * 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.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.DesensitizedUtil; import org.springblade.common.utils.IdCardNoUtil; import org.springblade.common.utils.ImageUtils; 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.api.R; 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.FTP.Monitor; import org.springblade.modules.FTP.Result; import org.springblade.modules.auth.enums.UserEnum; import org.springblade.modules.dispatcher.entity.Dispatcher; import org.springblade.modules.dispatcher.vo.DispatcherVO; import org.springblade.modules.exam.util.SecurityPaperUtil; import org.springblade.modules.experience.entity.Experience; import org.springblade.modules.experience.service.IExperienceService; 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.securitypaper.entity.SecurityPaper; import org.springblade.modules.securitypaper.service.SecurityPaperService; 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.data.redis.core.RedisTemplate; 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.DecimalFormat; 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 IExperienceService experienceService; private final MyAsyncService myAsyncService; private final SecurityPaperService securityPaperService; private final RedisTemplate redisTemplate; @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); 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); myAsyncService.FTP(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) { if (null!=user.getAgeType() && user.getAgeType()!=4){ List userVOS = baseMapper.selectUserPagesByAge(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); }else { 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); myAsyncService.FTP(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); myAsyncService.FTP(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 // public void importSecurity(List data, Boolean isCovered, String deptId) { // long time = System.currentTimeMillis(); // //将不能导入的保安员账号存起来 // List errorList = new ArrayList<>(); // //年龄不符的保安员信息存入集合 // List ageErrorList = new ArrayList<>(); // //保安员证编号不符的保安员信息存入集合 // List securityInvalidList = new ArrayList<>(); // //将需要更新的保安员信息存入集合 // List updateList = new ArrayList<>(); // //需要新增的保安员集合 // List userList = new ArrayList<>(); // //需要新增的从业记录集合 // List experienceList = new ArrayList<>(); // //导入状态,默认为true ,如果有一个出现问题则为 false // AtomicBoolean status = new AtomicBoolean(true); // AtomicBoolean agetStatus = new AtomicBoolean(true); // AtomicBoolean securityInvalidStatus = new AtomicBoolean(true); // //遍历 // for (SecurityExcel userExcel : data) { // 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()+"]不存在!"); // } // // //身份证校验 // if (null==user.getCardid() || user.getCardid().equals("")){ // throw new ServiceException("导入失败!身份证号码不能为空!"); // } // //身份证住址校验 // if (null==user.getRegistered() || user.getRegistered().equals("")){ // throw new ServiceException("导入失败!身份证住址不能为空!"); // } // if (null!=user.getCardid() && !user.getCardid().equals("")){ // //去除所有空格 // String cardid = user.getCardid().replaceAll(" ", ""); // //校验 // boolean b = IdCardNoUtil.checkIdCardNo(cardid); // if(b){ // user.setCardid(cardid); // }else { // agetStatus.set(false); // ageErrorList.add(user.getCardid()); //// throw new ServiceException("导入失败!身份证号码[ "+user.getCardid()+" ]不正确,请核对!"); // //forEach 只能使用 return 跳出本次循环 //// return; // continue; // } // } // // //判断当前用户是否已在本单位,如果是的更新数据 // 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.getSecuritynumber() && userExcel.getSecuritynumber() != "") { // user.setHold("1"); // //校验保安员证编号是否合规 // SecurityPaper securityPaper = new SecurityPaper(); // securityPaper.setIdCardNo(userExcel.getCardid()); // List securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper)); // if (securityPaperList.size()>0){ // boolean state = false; // //遍历 // for (SecurityPaper paper : securityPaperList) { // if (paper.getNumber().equals(user.getSecuritynumber())){ // state = true; // } // } // if (!state){ // user.setHold("2"); // user.setSecuritynumber(null); // securityInvalidList.add(userExcel.getCardid()); // securityInvalidStatus.set(false); // } // }else { // user.setHold("2"); // user.setSecuritynumber(null); // securityInvalidList.add(userExcel.getCardid()); // securityInvalidStatus.set(false); // } // }else { // 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())); // } // user.setCreateTime(new Date()); // user.setDispatch("1"); // user.setExaminationType("0"); // //新增 //// this.save(user); // //加入集合 // userList.add(user); // //从业记录新增 // Experience experience = new Experience(); // experience.setCardid(user.getCardid()); //// experience.setSecurityid(user.getId().toString()); // experience.setCompanyname(userExcel.getDeptId()); // experience.setName(user.getRealName()); // experience.setPost("保安员"); // experience.setEntrytime(new Date()); //// experienceService.save(experience); // //加入集合 // experienceList.add(experience); // // }else { // //匹配组织机构是否一致,如果不一致 // if(!user2.getDeptId().equals(user.getDeptId())){ // Dept dept = deptService.getById(user2.getDeptId()); // Dept dept1 = deptService.getById(user.getDeptId()); // //如果是南昌总公司分公司导入的 // if (dept.getId().equals(1432626178757275649L) && dept1.getParentId().equals(1432626178757275649L)){ // user2.setDeptId(dept1.getId().toString()); // //判断是否持证 // if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") { // user2.setHold("1"); // user2.setSecuritynumber(user.getSecuritynumber()); // //校验保安员证编号是否合规 // SecurityPaper securityPaper = new SecurityPaper(); // securityPaper.setIdCardNo(userExcel.getCardid()); // List securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper)); // if (securityPaperList.size()>0){ // boolean state = false; // //遍历 // for (SecurityPaper paper : securityPaperList) { // if (paper.getNumber().equals(user.getSecuritynumber())){ // state = true; // } // } // if (!state){ // user2.setHold("2"); // user2.setSecuritynumber(null); // securityInvalidList.add(userExcel.getCardid()); // securityInvalidStatus.set(false); // } // }else { // user2.setHold("2"); // user2.setSecuritynumber(null); // securityInvalidList.add(userExcel.getCardid()); // securityInvalidStatus.set(false); // } // }else { // user2.setHold("2"); // } // //更新用户数据 // user2.setUpdateTime(new Date()); // this.updateById(user2); // //qfqk异步推送 // myAsyncService.updateUserByQfqk(user2); // String s1 = // "update blade_user set hold = " + "'" + user2.getHold() + "'" // + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'" // + ",dept_id = " + "'" + user2.getDeptId() + "'" // + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'" // + ",registered = " + "'" + user2.getRegistered() + "'" // + " " + "where id = " + "'" + user2.getId() + "'"; // //FtpUtil.sqlFileUpload(s1); // myAsyncService.FTP(s1); // }else { // status.set(false); // //加入集合 // errorList.add(user.getCardid()); // //forEach 只能使用 return 跳出本次循环 //// return; // continue; // } // }else { // //如果是一致,则更新用户数据 // //判断是否持证 // if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") { // user2.setHold("1"); // user2.setSecuritynumber(user.getSecuritynumber()); // //校验保安员证编号是否合规 // SecurityPaper securityPaper = new SecurityPaper(); // securityPaper.setIdCardNo(userExcel.getCardid()); // List securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper)); // if (securityPaperList.size()>0){ // boolean state = false; // //遍历 // for (SecurityPaper paper : securityPaperList) { // if (paper.getNumber().equals(user.getSecuritynumber())){ // state = true; // } // } // if (!state){ // user2.setHold("2"); // user2.setSecuritynumber(null); // securityInvalidList.add(userExcel.getCardid()); // securityInvalidStatus.set(false); // } // }else { // user2.setHold("2"); // user2.setSecuritynumber(null); // securityInvalidList.add(userExcel.getCardid()); // securityInvalidStatus.set(false); // } // }else { // user2.setHold("2"); // } // if (null!=userExcel.getRegistered()){ // user2.setRegistered(userExcel.getRegistered()); // }else { // user2.setRegistered(""); // } // user2.setUpdateTime(new Date()); // //更新用户数据 // this.updateById(user2); // //qfqk异步推送 // myAsyncService.updateUserByQfqk(user2); // //内网数据sql // String s1 = // "update blade_user set hold = " + "'" + user2.getHold() + "'" // + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'" // + ",registered = " + "'" + user2.getRegistered() + "'" // + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'" // + " " + "where id = " + "'" + user2.getId() + "'"; // //FtpUtil.sqlFileUpload(s1); // myAsyncService.FTP(s1); // } // } // } // //批量插入 // //用户批量插入 // if (userList.size()>0) { // baseMapper.batchUserList(userList); // //用户批量插入异步推送 // myAsyncService.batchUserList(userList); // //sql 拼接 // StringBuilder builder = new StringBuilder(); // StringBuilder builder1 = new StringBuilder(); // //遍历 // for (User user : userList) { // //内网同步,sql 拼接 // String sql = "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,create_time) " + // "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() + "'" + // "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateTime()) + "'" + ")"; // //拼接 // builder = builder.append(sql).append(";"); // List list = Arrays.asList(builder.toString().split(";")); // //判断list.size 大小 // if (list.size()==1000){ // //执行 // //FtpUtil.sqlFileUpload(builder.toString()); // myAsyncService.FTP(builder.toString()); // //清空 // builder.delete(0,builder.length()); // } // } // // //装换成map // Map userMap = userList.stream().collect(Collectors.toMap(user -> user.getCardid(), user -> user)); // //匹配 // experienceList = experienceList.stream().map(experience -> { // if (experience.getCardid().equals(userMap.get(experience.getCardid()).getCardid())) { // experience.setSecurityid(userMap.get(experience.getCardid()).getId().toString()); // } // return experience; // }).collect(Collectors.toList()); // //批量插入从业记录 // baseMapper.batchExperienceList(experienceList); // //遍历,拼接sql ,同步数据到内网 // for (Experience experience : experienceList) { // String sql1 = "insert into sys_experience(id,name,post,entryTime,cardId,companyname,securityId) " + // "values(" + "'" + experience.getId() + "'" + "," + // "'" + experience.getName() + "'" + "," + // "'" + experience.getPost() + "'" + "," + // "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getEntrytime()) + "'" + // "," + "'" + experience.getCardid() + "'" + // "," + "'" + experience.getCompanyname() + "'" + // "," + "'" + experience.getSecurityid() + "'" + ")"; // //拼接 // builder1 = builder1.append(sql1).append(";"); // String[] split1 = builder.toString().split(";"); // //判断list.size 大小 // if (split1.length==1000){ // //执行 // //FtpUtil.sqlFileUpload(builder1.toString()); // myAsyncService.FTP(builder1.toString()); // //清空 // builder1.delete(0,builder1.length()); // } // } // //剩余的继续执行 // //FtpUtil.sqlFileUpload(builder.toString()); // myAsyncService.FTP(builder.toString()); // //FtpUtil.sqlFileUpload(builder1.toString()); // myAsyncService.FTP(builder1.toString()); // } //// System.out.println("导入时间: = " + (System.currentTimeMillis()-time)); // // //如果所有数据导入有一个异常 // StringBuilder errorBuilder = new StringBuilder(); // if (!status.get()){ // String errorAccount = StringUtils.join(errorList, "\\\n"); // errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"); // } // if (!agetStatus.get()){ // String errorAccount = StringUtils.join(ageErrorList, "\\\n"); // errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"); // } // if (!securityInvalidStatus.get()){ // String errorAccount = StringUtils.join(securityInvalidList, "\\\n"); // errorBuilder.append("用户:[" + errorAccount + "]保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!"); // } // //抛出异常 // if (errorBuilder.length()>0){ // throw new ServiceException(errorBuilder.toString()); // } // } /** * 导入保安员(需加密,部分字段需要脱敏处理) * @since 修改时间 : 2022-04-28 * @author: 修改人 zhongrj * @param data * @param isCovered */ @Override public void importSecurity(List data, Boolean isCovered, String deptId) { long time = System.currentTimeMillis(); //uuidList List uuidList = new ArrayList<>(); //将不能导入的保安员账号存起来 List errorList = new ArrayList<>(); //年龄不符的保安员信息存入集合 List ageErrorList = new ArrayList<>(); //保安员证编号不符的保安员信息存入集合 List securityInvalidList = new ArrayList<>(); //将需要更新的保安员信息存入集合 List updateList = new ArrayList<>(); //需要推送内网的保安员信息集合 List userList = new ArrayList<>(); //需要新增的保安员集合 List addList = new ArrayList<>(); //需要新增的从业记录集合 List experienceList = new ArrayList<>(); //导入状态,默认为true ,如果有一个出现问题则为 false AtomicBoolean status = new AtomicBoolean(true); AtomicBoolean agetStatus = new AtomicBoolean(true); AtomicBoolean securityInvalidStatus = new AtomicBoolean(true); //遍历 for (SecurityExcel userExcel : data) { 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()+"]不存在!"); } //身份证校验 if (null==user.getCardid() || user.getCardid().equals("")){ throw new ServiceException("导入失败!身份证号码不能为空!"); } //身份证住址校验 if (null==user.getRegistered() || user.getRegistered().equals("")){ throw new ServiceException("导入失败!身份证住址不能为空!"); } if (null!=user.getCardid() && !user.getCardid().equals("")){ //去除所有空格 String cardid = user.getCardid().replaceAll(" ", ""); //校验 boolean b = IdCardNoUtil.checkIdCardNo(cardid); if(b){ user.setCardid(cardid); }else { agetStatus.set(false); ageErrorList.add(user.getCardid()); // throw new ServiceException("导入失败!身份证号码[ "+user.getCardid()+" ]不正确,请核对!"); //forEach 只能使用 return 跳出本次循环 // return; continue; } } // 设置租户ID user.setTenantId("000000"); //默认在职 user.setStatus(1); user.setIsDeleted(0); //分配保安角色 // Role role = new Role(); // role.setRoleAlias("保安"); // Role oneRole = roleService.getOne(Condition.getQueryWrapper(role)); user.setRoleId("1412226235153731586"); if (null!=user.getSecuritynumber() && !user.getSecuritynumber().equals("")){ user.setHold("1"); }else { user.setHold("2"); } //性别 if (null != userExcel.getSex()) { if (userExcel.getSex().equals("男")) { user.setSex(1); }else if (userExcel.getSex().equals("女")) { user.setSex(2); }else { user.setSex(1); } }else { user.setSex(1); } //设置账号 String realName = user.getRealName(); String cardid = user.getCardid(); // user.setAccount(user.getRealName()); user.setAccount(realName.substring(0,1)+cardid.substring(cardid.length()-4)); //加密 user.setPassword(DigestUtil.encrypt(user.getCardid().substring(user.getCardid().length() - 6))); user.setCreateTime(new Date()); user.setUpdateTime(new Date()); user.setDispatch("1"); //待审查 user.setExaminationType("2"); //推送内网的数据 User user0 = Objects.requireNonNull(BeanUtil.copy(user,User.class)); //生成随机数 String uuid = UUID.randomUUID().toString(); //将 user 存入 redis redisTemplate.opsForValue().set(uuid, JSON.toJSONString(user)); //user0 临时设置uuid 到 reason_for_leav 离职原因字段 user0.setReasonForLeav(uuid); //加入集合 userList.add(user0); uuidList.add(uuid); } Result result = new Result(); //用户批量插入 if (userList.size()>0) { //生成随机数 String uuid = UUID.randomUUID().toString(); //数据推送 Map map = new HashMap<>(1); map.put(uuid, userList); myAsyncService.FTPObjectList(map); int count = 0; //调用ftp获取返回数据 while (true){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } //调用ftp获取返回数据 result = Monitor.getFtpDataByUuidList(uuid); //如果返回true,就退处 if (result.getCode() == 200) { break; } // else { // count++; // if (count == 60) { // break; // } // } } } if (null!=result){ //获取 result List data1 = result.getData(); if (data1.size()>0){ for (Result result1 : data1) { // 取出 Msg ,此 msg 存的对应的 uuid String uuid = result1.getMsg(); //从redis 中获取用户数据 Object o1 = redisTemplate.opsForValue().get(uuid); User user0 = JSON.parseObject(o1.toString(), User.class); // 从redis 中获取对应的用户信息,脱敏处理过 User user = handlerUserInfo(uuid); if (result1.getCode()==200){ user.setId(result1.getUserId()); this.save(user); //加入新增集合 // addList.add(user); } if (result1.getCode()==201){ user.setId(result1.getUserId()); user.setCreateTime(null); this.updateById(user); //加入更新集合 // updateList.add(user); } if (result1.getCode()==202){ status.set(false); //已在其他单位存在 errorList.add(user0.getCardid()); } if (result1.getCode()==203){ securityInvalidStatus.set(false); //保安证编号不匹配 securityInvalidList.add(user0.getCardid()); } } // //批量插入 // if (addList.size()>0){ // baseMapper.batchUserList(addList); // } // //批量更新 // if (updateList.size()>0){ // baseMapper.batchUpdateUserList(updateList); // } } } //如果所有数据导入有一个异常 StringBuilder errorBuilder = new StringBuilder(); if (!status.get()){ String errorAccount = StringUtils.join(errorList, "\\\n"); errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"); } if (!agetStatus.get()){ String errorAccount = StringUtils.join(ageErrorList, "\\\n"); errorBuilder.append("用户:[" + errorAccount + "]导入失败!身份证号码不正确,请核对!"); } if (!securityInvalidStatus.get()){ String errorAccount = StringUtils.join(securityInvalidList, "\\\n"); // errorBuilder.append("用户:[" + errorAccount + "]保安证编号不匹配,请核实!"); errorBuilder.append("用户:[" + errorAccount + "]保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!"); } //抛出异常 if (errorBuilder.length()>0){ throw new ServiceException(errorBuilder.toString()); } } /** * 用户数据获取和处理 * @param uuid 随机参数 * @return */ private User handlerUserInfo(String uuid){ //从redis 中获取用户数据 Object o1 = redisTemplate.opsForValue().get(uuid); User user = JSON.parseObject(o1.toString(), User.class); //取出后将 redis 删除 redisTemplate.delete(uuid); //返回的user,需处理敏感数据 User user1 = Objects.requireNonNull(BeanUtil.copy(user,User.class)); //敏感数据处理 user1.setRealName(DesensitizedUtil.desensitizedName(user.getRealName())); user1.setCardid(DesensitizedUtil.desensitizedIdNumberBy4(user.getCardid())); user1.setPhone(DesensitizedUtil.desensitizedPhoneNumber(user.getPhone())); user1.setRegistered(DesensitizedUtil.desensitizedAddress(user.getRegistered())); if (user.getHold().equals("1")) { user1.setSecuritynumber(DesensitizedUtil.desensitizedSecurityNumber(user.getSecuritynumber())); }else { user1.setSecuritynumber(""); } user1.setAvatar(""); user1.setEmail(""); user1.setFingerprint(""); user1.setNation(""); user1.setNativeplace(""); user1.setEducation(""); user1.setPoliticaloutlook(""); user1.setMyPicture(""); user1.setHeight(""); user1.setRtime(null); user1.setGuncode(""); //返回 return user1; } /** * 保安员导入(押运人员导入) * @param data * @param isCovered * @param deptId */ @Override public void importSecurityYy(List data, Boolean isCovered, String deptId) { //uuidList List uuidList = new ArrayList<>(); //将不能导入的保安员账号存起来 List errorList = new ArrayList<>(); //年龄不符的保安员信息存入集合 List ageErrorList = new ArrayList<>(); //保安员证编号不符的保安员信息存入集合 List securityInvalidList = new ArrayList<>(); //需要推送内网的保安员信息集合 List userList = new ArrayList<>(); //导入状态,默认为true ,如果有一个出现问题则为 false AtomicBoolean status = new AtomicBoolean(true); AtomicBoolean agetStatus = new AtomicBoolean(true); AtomicBoolean securityInvalidStatus = new AtomicBoolean(true); //遍历 for (SecurityYyExcel userExcel : data) { 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()+"]不存在!"); } //身份证校验 if (null==user.getCardid() || user.getCardid().equals("")){ throw new ServiceException("导入失败!身份证号码不能为空!"); } //身份证住址校验 if (null==user.getRegistered() || user.getRegistered().equals("")){ throw new ServiceException("导入失败!身份证住址不能为空!"); } if (null!=user.getCardid() && !user.getCardid().equals("")){ //去除所有空格 String cardid = user.getCardid().replaceAll(" ", ""); //校验 boolean b = IdCardNoUtil.checkIdCardNo(cardid); if(b){ user.setCardid(cardid); }else { agetStatus.set(false); ageErrorList.add(user.getCardid()); continue; } } // 设置租户ID user.setTenantId("000000"); //默认在职 user.setStatus(1); user.setIsDeleted(0); //分配保安角色 Role role = new Role(); role.setRoleAlias("保安"); Role oneRole = roleService.getOne(Condition.getQueryWrapper(role)); user.setRoleId(oneRole.getId().toString()); if (null!=user.getSecuritynumber() && !user.getSecuritynumber().equals("")){ user.setHold("1"); }else { user.setHold("2"); } //性别 if (null != userExcel.getSex()) { if (userExcel.getSex().equals("男")) { user.setSex(1); }else if (userExcel.getSex().equals("女")) { user.setSex(2); }else { user.setSex(1); } }else { user.setSex(1); } //设置账号 String realName = user.getRealName(); String cardid = user.getCardid(); // user.setAccount(user.getRealName()); user.setAccount(realName.substring(0,1)+cardid.substring(cardid.length()-4)); //加密 user.setPassword(DigestUtil.encrypt(user.getCardid().substring(user.getCardid().length() - 6))); user.setCreateTime(new Date()); user.setUpdateTime(new Date()); user.setDispatch("1"); //待审查 user.setExaminationType("2"); //推送内网的数据 User user0 = Objects.requireNonNull(BeanUtil.copy(user,User.class)); //生成随机数 String uuid = UUID.randomUUID().toString(); //将 user 存入 redis redisTemplate.opsForValue().set(uuid, JSON.toJSONString(user)); //user0 临时设置uuid 到 reason_for_leav 离职原因字段 user0.setReasonForLeav(uuid); //加入集合 userList.add(user0); uuidList.add(uuid); } Result result = new Result(); //用户批量插入 if (userList.size()>0) { //生成随机数 String uuid = UUID.randomUUID().toString(); //数据推送 Map map = new HashMap<>(1); map.put(uuid, userList); myAsyncService.FTPObjectList(map); int count = 0; //调用ftp获取返回数据 while (true){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } //调用ftp获取返回数据 result = Monitor.getFtpDataByUuidList(uuid); //如果返回true,就退处 if (result.getCode() == 200) { break; } } } if (null!=result){ //获取 result List data1 = result.getData(); if (data1.size()>0){ for (Result result1 : data1) { // 取出 Msg ,此 msg 存的对应的 uuid String uuid = result1.getMsg(); //从redis 中获取用户数据 Object o1 = redisTemplate.opsForValue().get(uuid); User user0 = JSON.parseObject(o1.toString(), User.class); // 从redis 中获取对应的用户信息,脱敏处理过 User user = handlerUserInfo(uuid); if (result1.getCode()==200){ user.setId(result1.getUserId()); boolean save = this.save(user); if (save){ //数据异步同步到群防群控 myAsyncService.qfqkUserSave(user); } //加入新增集合 // addList.add(user); } if (result1.getCode()==201){ user.setId(result1.getUserId()); user.setCreateTime(null); boolean update = this.updateById(user); if (update){ //数据异步同步到群防群控 myAsyncService.updateUserByQfqk(user); } //加入更新集合 // updateList.add(user); } if (result1.getCode()==202){ status.set(false); //已在其他单位存在 errorList.add(user0.getCardid()); } if (result1.getCode()==203){ securityInvalidStatus.set(false); //保安证编号不匹配 securityInvalidList.add(user0.getCardid()); } } } } //如果所有数据导入有一个异常 StringBuilder errorBuilder = new StringBuilder(); if (!status.get()){ String errorAccount = StringUtils.join(errorList, "\\\n"); errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"); } if (!agetStatus.get()){ String errorAccount = StringUtils.join(ageErrorList, "\\\n"); errorBuilder.append("用户:[" + errorAccount + "]导入失败!身份证号码不正确,请核对!"); } if (!securityInvalidStatus.get()){ String errorAccount = StringUtils.join(securityInvalidList, "\\\n"); errorBuilder.append("用户:[" + errorAccount + "]保安证编号不匹配,请核实!"); // errorBuilder.append("用户:[" + errorAccount + "]保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!"); } //抛出异常 if (errorBuilder.length()>0){ throw new ServiceException(errorBuilder.toString()); } } ///** // * 保安员导入(押运人员导入) // * @param data // * @param isCovered // * @param deptId // */ // @Override // public void importSecurityYy(List data, Boolean isCovered, String deptId) { // //将不能导入的保安员账号存起来 // List errorList = new ArrayList<>(); // //将需要新增的保安员信息存入集合 // List ageErrorList = new ArrayList<>(); // //保安员证编号不符的保安员信息存入集合 // List securityInvalidList = new ArrayList<>(); // //将需要更新的保安员信息存入集合 // List updateList = new ArrayList<>(); // //导入状态,默认为true ,如果有一个出现问题则为 false // AtomicBoolean status = new AtomicBoolean(true); // AtomicBoolean agetStatus = new AtomicBoolean(true); // AtomicBoolean securityInvalidStatus = 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()+"]不存在!"); // } // // //身份证号码校验 // if (null==user.getCardid() || user.getCardid().equals("")){ // throw new ServiceException("导入失败!身份证号码不能为空!"); // } // //身份证住址校验 // if (null==user.getRegistered() || user.getRegistered().equals("")){ // throw new ServiceException("导入失败!身份证住址不能为空!"); // } // if (null!=user.getCardid() && !user.getCardid().equals("")){ // //去除所有空格 // String cardid = user.getCardid().replaceAll(" ", ""); // //校验 // boolean b = IdCardNoUtil.checkIdCardNo(cardid); // if(b){ // user.setCardid(cardid); // }else { // agetStatus.set(false); // ageErrorList.add(user.getCardid()); //// throw new ServiceException("导入失败!身份证号码[ "+user.getCardid()+" ]不正确,请核对!"); // //forEach 只能使用 return 跳出本次循环 // return; // } // } // //判断当前用户是否已在本单位,如果是的更新数据 // 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.getSecuritynumber() && userExcel.getSecuritynumber() != "") { // user.setHold("1"); // //校验保安员证编号是否合规 // SecurityPaper securityPaper = new SecurityPaper(); // securityPaper.setIdCardNo(userExcel.getCardid()); // List securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper)); // if (securityPaperList.size()>0){ // boolean state = false; // //遍历 // for (SecurityPaper paper : securityPaperList) { // if (paper.getNumber().equals(user.getSecuritynumber())){ // state = true; // } // } // if (!state){ // user.setHold("2"); // user.setSecuritynumber(null); // securityInvalidList.add(userExcel.getCardid()); // securityInvalidStatus.set(false); // } // }else { // user.setHold("2"); // user.setSecuritynumber(null); // securityInvalidList.add(userExcel.getCardid()); // securityInvalidStatus.set(false); // } // }else { // 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())); // } // user.setCreateTime(new Date()); // //新增 // this.save(user); // //qfqk 推送 // myAsyncService.qfqkUserSave(user); // // //从业记录新增 // Experience experience = new Experience(); // experience.setCardid(user.getCardid()); // experience.setSecurityid(user.getId().toString()); // experience.setCompanyname(userExcel.getDeptId()); // experience.setName(user.getRealName()); // experience.setPost("保安员"); // experience.setEntrytime(new Date()); // experienceService.save(experience); // // //内网同步 // 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,create_time,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.getDispatch() + "'" + // "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateTime()) + "'" + // "," + "'" + user.getGuncode() + "'" + ");"+ // "insert into sys_experience(id,name,post,entryTime," + // "cardId,companyname,securityId) " + // "values(" + "'" + experience.getId() + "'" + "," + // "'" + experience.getName() + "'" + "," + // "'" + experience.getPost() + "'" + "," + // "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getEntrytime()) + "'" + // "," + "'" + experience.getCardid() + "'" + // "," + "'" + experience.getCompanyname() + "'" + // "," + "'" + experience.getSecurityid() + "'" // + ")"; // //FtpUtil.sqlFileUpload(s); // myAsyncService.FTP(s); // } // else { // //匹配组织机构是否一致,如果不一致 // if(!user2.getDeptId().equals(user.getDeptId())){ // Dept dept = deptService.getById(user2.getDeptId()); // Dept dept1 = deptService.getById(user.getDeptId()); // //如果是南昌总公司分公司导入的 // if (dept.getId().equals(1432626178757275649L) && dept1.getParentId().equals(1432626178757275649L)){ // user2.setDeptId(dept1.getId().toString()); // //判断是否持证 // if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") { // user2.setHold("1"); // user2.setSecuritynumber(user.getSecuritynumber()); // //校验保安员证编号是否合规 // SecurityPaper securityPaper = new SecurityPaper(); // securityPaper.setIdCardNo(userExcel.getCardid()); // List securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper)); // if (securityPaperList.size()>0){ // boolean state = false; // //遍历 // for (SecurityPaper paper : securityPaperList) { // if (paper.getNumber().equals(user.getSecuritynumber())){ // state = true; // } // } // if (!state){ // user2.setHold("2"); // user2.setSecuritynumber(null); // securityInvalidList.add(userExcel.getCardid()); // securityInvalidStatus.set(false); // } // }else { // user2.setHold("2"); // user2.setSecuritynumber(null); // securityInvalidList.add(userExcel.getCardid()); // securityInvalidStatus.set(false); // } // }else { // user2.setHold("2"); // } // if (null!=userExcel.getRegistered()){ // user2.setRegistered(userExcel.getRegistered()); // }else { // user2.setRegistered(""); // } // user2.setUpdateTime(new Date()); // //更新用户数据 // this.updateById(user2); // //qfqk 推送 // myAsyncService.updateUserByQfqk(user); // // String s1 = // "update blade_user set hold = " + "'" + user2.getHold() + "'" // + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'" // + ",dept_id = " + "'" + user2.getDeptId() + "'" // + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'" // + ",registered = " + "'" + user2.getRegistered() + "'" // + " " + "where id = " + "'" + user2.getId() + "'"; // //FtpUtil.sqlFileUpload(s1); // myAsyncService.FTP(s1); // }else { // status.set(false); // //加入集合 // errorList.add(user.getCardid()); // //forEach 只能使用 return 跳出本次循环 // return; // } // }else { // //如果是一致,则更新用户数据 // if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") { // user2.setHold("1"); // user2.setSecuritynumber(user.getSecuritynumber()); // //校验保安员证编号是否合规 // SecurityPaper securityPaper = new SecurityPaper(); // securityPaper.setIdCardNo(userExcel.getCardid()); // List securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper)); // if (securityPaperList.size()>0){ // boolean state = false; // //遍历 // for (SecurityPaper paper : securityPaperList) { // if (paper.getNumber().equals(user.getSecuritynumber())){ // state = true; // } // } // if (!state){ // user2.setHold("2"); // user2.setSecuritynumber(null); // securityInvalidList.add(userExcel.getCardid()); // securityInvalidStatus.set(false); // } // }else { // user2.setHold("2"); // user2.setSecuritynumber(null); // securityInvalidList.add(userExcel.getCardid()); // securityInvalidStatus.set(false); // } // }else { // user2.setHold("2"); // } // if (null!=userExcel.getRegistered()){ // user2.setRegistered(userExcel.getRegistered()); // }else { // user2.setRegistered(""); // } // user2.setUpdateTime(new Date()); // //更新用户数据 // this.updateById(user2); // //qfqk 推送 // myAsyncService.updateUserByQfqk(user); // // String s1 = // "update blade_user set hold = " + "'" + user2.getHold() + "'" // + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'" // + ",registered = " + "'" + user2.getRegistered() + "'" // + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'" // + " " + "where id = " + "'" + user2.getId() + "'"; // //FtpUtil.sqlFileUpload(s1); // myAsyncService.FTP(s1); // } // } // }); // //如果所有数据导入有一个异常 // StringBuilder errorBuilder = new StringBuilder(); // if (!status.get()){ // String errorAccount = StringUtils.join(errorList, "\\\n"); // errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"); // } // if (!agetStatus.get()){ // String errorAccount = StringUtils.join(ageErrorList, "\\\n"); // errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"); // } // if (!securityInvalidStatus.get()){ // String errorAccount = StringUtils.join(securityInvalidList, "\\\n"); // errorBuilder.append("用户:[" + errorAccount + "]保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!"); // } // //抛出异常 // if (errorBuilder.length()>0){ // throw new ServiceException(errorBuilder.toString()); // } // } /** * 根据保安员编码查询保安信息 * * @param securityNumber 保安证编码 * @return */ @Override public UserVO getUserInfoBySecurityNumber(String securityNumber,String cardid) { UserVO userVO = baseMapper.getUserInfoBySecurityNumber(securityNumber,cardid); //查询派遣信息 if (null!=userVO) { DispatcherVO dispatcherVO = baseMapper.getUserDispatcherInfo(userVO.getId()); if (null != dispatcherVO) { userVO.setDispatchUnitName(dispatcherVO.getDispatcherCompany()); userVO.setDispatchStartTime(new SimpleDateFormat("yyyy-MM-dd").format(dispatcherVO.getDispatchertime())); userVO.setDispatchEndTime(new SimpleDateFormat("yyyy-MM-dd").format(dispatcherVO.getEndTime())); } } return userVO; } /** * 保安员信息 * * @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://61.131.136.25: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(); } } }); //头像生成 data.forEach(qrCodeExcel -> { if (null!=qrCodeExcel.getSecuritynumber()) { //查询用户头像url User user = new User(); user.setRealName(qrCodeExcel.getRealName()); user.setStatus(1); user.setIsDeleted(0); user.setSecuritynumber(qrCodeExcel.getSecuritynumber()); User user1 = this.getOne(Condition.getQueryWrapper(user)); //url 拼接 byte[] qrCodeImage = new byte[0]; //获取图片 qrCodeImage = ImageUtils.getFileStream(user1.getAvatar()); //路径 String path = "D:\\QrCode\\"; FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream(path+user1.getRealName()+user1.getCardid()+".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); } /** * 导入保安员(admin 专用) * * @param data */ @Override public void importSecurityTest(List data) { //将不能导入的保安员账号存起来 List errorList = new ArrayList<>(); //年龄不符的保安员信息存入集合 List ageErrorList = new ArrayList<>(); //保安员证编号不符的保安员信息存入集合 List securityInvalidList = new ArrayList<>(); //将需要更新的保安员信息存入集合 List updateList = new ArrayList<>(); //需要新增的保安员集合 List userList = new ArrayList<>(); //需要新增的从业记录集合 List experienceList = new ArrayList<>(); //导入状态,默认为true ,如果有一个出现问题则为 false AtomicBoolean status = new AtomicBoolean(true); AtomicBoolean agetStatus = new AtomicBoolean(true); AtomicBoolean securityInvalidStatus = new AtomicBoolean(true); //遍历 for (SecurityExcel userExcel : data) { User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class)); //设置部门id String deptIds = userDeptService.selectIn(user.getDeptId()); user.setDeptId(deptIds); //身份证校验 if (null==user.getCardid() || user.getCardid().equals("")){ throw new ServiceException("导入失败!身份证号码不能为空!"); } //身份证住址校验 if (null==user.getRegistered() || user.getRegistered().equals("")){ throw new ServiceException("导入失败!身份证住址不能为空!"); } if (null!=user.getCardid() && !user.getCardid().equals("")){ //去除所有空格 String cardid = user.getCardid().replaceAll(" ", ""); //校验 boolean b = IdCardNoUtil.checkIdCardNo(cardid); if(b){ user.setCardid(cardid); }else { agetStatus.set(false); ageErrorList.add(user.getCardid()); //forEach 只能使用 return 跳出本次循环 // return; continue; } } //判断当前用户是否已在本单位,如果是的更新数据 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.getSecuritynumber() && userExcel.getSecuritynumber() != "") { user.setHold("1"); //校验保安员证编号是否合规 SecurityPaper securityPaper = new SecurityPaper(); securityPaper.setIdCardNo(userExcel.getCardid()); List securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper)); if (securityPaperList.size()>0){ boolean state = false; //遍历 for (SecurityPaper paper : securityPaperList) { if (paper.getNumber().equals(user.getSecuritynumber())){ state = true; } } if (!state){ user.setHold("2"); user.setSecuritynumber(null); securityInvalidList.add(userExcel.getCardid()); securityInvalidStatus.set(false); } }else { user.setHold("2"); user.setSecuritynumber(null); securityInvalidList.add(userExcel.getCardid()); securityInvalidStatus.set(false); } }else { //创建保安证编号 user.setHold("1"); //去生成保安证编号 String pre = SecurityPaperUtil.getSecurityPaper(); //查询当前年份已有的保安证编号 int max = this.getSecurityPaperCount(pre); String result = null; if (max == 0) { result = pre + "00001"; } else { //格式化 DecimalFormat decimalFormat = new DecimalFormat("00000"); max++; result = pre + (decimalFormat.format(max)); } user.setSecuritynumber(result); //生成保安证的同时向保安证管理表中插入一条数据 SecurityPaper securityPaper = new SecurityPaper(); securityPaper.setNumber(result); securityPaper.setCreateTime(new Date()); securityPaper.setIdCardNo(user.getCardid()); securityPaper.setPeopleName(user.getRealName()); securityPaper.setSource(3); //新增保安员证信息 securityPaperService.save(securityPaper); } //分配保安角色 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().contains("男")) { user.setSex(1); } if (userExcel.getSex().contains("女")) { 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())); } user.setCreateTime(new Date()); user.setDispatch("1"); user.setExaminationType("0"); //加入集合 userList.add(user); //从业记录新增 Experience experience = new Experience(); experience.setCardid(user.getCardid()); experience.setCompanyname(userExcel.getDeptId()); experience.setName(user.getRealName()); experience.setPost("保安员"); experience.setEntrytime(new Date()); //加入集合 experienceList.add(experience); }else { //匹配组织机构是否一致,如果不一致 if(!user2.getDeptId().equals(user.getDeptId())){ status.set(false); //加入集合 errorList.add(user.getCardid()); //forEach 只能使用 return 跳出本次循环 continue; }else { //如果是一致,则更新用户数据 //判断是否持证 if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") { user2.setHold("1"); user2.setSecuritynumber(user.getSecuritynumber()); //校验保安员证编号是否合规 SecurityPaper securityPaper = new SecurityPaper(); securityPaper.setIdCardNo(userExcel.getCardid()); List securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper)); if (securityPaperList.size()>0){ boolean state = false; //遍历 for (SecurityPaper paper : securityPaperList) { if (paper.getNumber().equals(user.getSecuritynumber())){ state = true; } } if (!state){ user2.setHold("2"); user2.setSecuritynumber(null); securityInvalidList.add(userExcel.getCardid()); securityInvalidStatus.set(false); } }else { user2.setHold("2"); user2.setSecuritynumber(null); securityInvalidList.add(userExcel.getCardid()); securityInvalidStatus.set(false); } }else { //创建保安证编号 user2.setHold("1"); //去生成保安证编号 String pre = SecurityPaperUtil.getSecurityPaper(); //查询当前年份已有的保安证编号 int max = this.getSecurityPaperCount(pre); String result = null; if (max == 0) { result = pre + "00001"; } else { //格式化 DecimalFormat decimalFormat = new DecimalFormat("00000"); max++; result = pre + (decimalFormat.format(max)); } user2.setSecuritynumber(result); //生成保安证的同时向保安证管理表中插入一条数据 SecurityPaper securityPaper = new SecurityPaper(); securityPaper.setNumber(result); securityPaper.setCreateTime(new Date()); securityPaper.setIdCardNo(user2.getCardid()); securityPaper.setPeopleName(user2.getRealName()); securityPaper.setSource(3); //新增保安员证信息 securityPaperService.save(securityPaper); } if (null!=userExcel.getRegistered()){ user2.setRegistered(userExcel.getRegistered()); }else { user2.setRegistered(""); } user2.setUpdateTime(new Date()); //更新用户数据 this.updateById(user2); //qfqk异步推送 myAsyncService.updateUserByQfqk(user2); //内网数据sql String s1 = "update blade_user set hold = " + "'" + user2.getHold() + "'" + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'" + ",registered = " + "'" + user2.getRegistered() + "'" + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'" + " " + "where id = " + "'" + user2.getId() + "'"; myAsyncService.FTP(s1); } } } //批量插入 //用户批量插入 if (userList.size()>0) { baseMapper.batchUserList(userList); //用户批量插入异步推送 myAsyncService.batchUserList(userList); //sql 拼接 StringBuilder builder = new StringBuilder(); StringBuilder builder1 = new StringBuilder(); //遍历 for (User user : userList) { //内网同步,sql 拼接 String sql = "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,create_time) " + "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() + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateTime()) + "'" + ")"; //拼接 builder = builder.append(sql).append(";"); List list = Arrays.asList(builder.toString().split(";")); //判断list.size 大小 if (list.size()==1000){ //执行 myAsyncService.FTP(builder.toString()); //清空 builder.delete(0,builder.length()); } } //装换成map Map userMap = userList.stream().collect(Collectors.toMap(user -> user.getCardid(), user -> user)); //匹配 experienceList = experienceList.stream().map(experience -> { if (experience.getCardid().equals(userMap.get(experience.getCardid()).getCardid())) { experience.setSecurityid(userMap.get(experience.getCardid()).getId().toString()); } return experience; }).collect(Collectors.toList()); //批量插入从业记录 baseMapper.batchExperienceList(experienceList); //遍历,拼接sql ,同步数据到内网 for (Experience experience : experienceList) { String sql1 = "insert into sys_experience(id,name,post,entryTime,cardId,companyname,securityId) " + "values(" + "'" + experience.getId() + "'" + "," + "'" + experience.getName() + "'" + "," + "'" + experience.getPost() + "'" + "," + "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getEntrytime()) + "'" + "," + "'" + experience.getCardid() + "'" + "," + "'" + experience.getCompanyname() + "'" + "," + "'" + experience.getSecurityid() + "'" + ")"; //拼接 builder1 = builder1.append(sql1).append(";"); String[] split1 = builder.toString().split(";"); //判断list.size 大小 if (split1.length==1000){ //执行 myAsyncService.FTP(builder1.toString()); //清空 builder1.delete(0,builder1.length()); } } //剩余的继续执行 myAsyncService.FTP(builder.toString()); myAsyncService.FTP(builder1.toString()); } //如果所有数据导入有一个异常 StringBuilder errorBuilder = new StringBuilder(); if (!status.get()){ String errorAccount = StringUtils.join(errorList, "\\\n"); errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"); } if (!agetStatus.get()){ String errorAccount = StringUtils.join(ageErrorList, "\\\n"); errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!"); } if (!securityInvalidStatus.get()){ String errorAccount = StringUtils.join(securityInvalidList, "\\\n"); errorBuilder.append("用户:[" + errorAccount + "]保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!"); } //抛出异常 if (errorBuilder.length()>0){ throw new ServiceException(errorBuilder.toString()); } } @Override public List> selectEquipent() { return baseMapper.selectEquipent(); } /** * 年龄分布查询 * @param user * @return */ @Override public Object getAgeStatistics(UserVO user) { //获取年龄分布数据 List list = baseMapper.getAgeStatistics(user); //返回 return list; } /** * 查询登录密码还是 123456 的单位信息 * @return */ @Override public Object getNotUpdatePwdInfo() { //查询角色为保安公司管理员的用户信息 User user = new User(); user.setRoleId("1414575196264300546"); user.setStatus(1); user.setIsDeleted(0); List list = this.list(Condition.getQueryWrapper(user)); List list1 = new ArrayList<>(); //遍历 if (list.size()>0){ byte[] bytes = DigestUtil.decodeHex(list.get(0).getPassword()); try { System.out.println("解密的密码 = " + new String(bytes)); } catch (Exception e) { e.printStackTrace(); } } return list; } /** * 根据用户 id 查询用户信息 * @param id * @return */ @Override public User getUserById(String id) { return baseMapper.getUserById(Long.parseLong(id)); } /** * 手动新增用户信息 * @param user * @return */ @Override public boolean insert(User user) { int i = baseMapper.insertUser(user); if (i>0){ return true; } return false; } }