智慧保安后台管理-外网项目备份
guoshilong
2024-01-20 5e3faa196ec93a8d1b983f50b3cd30d98c4e708a
src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -17,17 +17,24 @@
package org.springblade.modules.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.zxing.WriterException;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.util.Strings;
import org.springblade.common.cache.DictCache;
import org.springblade.common.cache.SysCache;
import org.springblade.common.config.QrcodeConfig;
import org.springblade.common.constant.AgeUtil;
import org.springblade.common.constant.CommonConstant;
import org.springblade.common.constant.TenantConstant;
import org.springblade.common.enums.DictEnum;
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;
@@ -40,32 +47,35 @@
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.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.excel.*;
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.UserInfoDetail;
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.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -89,7 +99,12 @@
   private final IInformationService iInformationService;
   private final IDeptService deptService;
   private final JurisdictionService jurisdictionService;
   private final AccreditationRecordsService accreditationRecordsService;
   private final IExperienceService experienceService;
   private final MyAsyncService myAsyncService;
   private final SecurityPaperService securityPaperService;
   private final IUserDetailService userDetailService;
   private final IUserWxService userWxService;
   @Override
   @Transactional(rollbackFor = Exception.class)
@@ -120,49 +135,13 @@
         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.<User>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);
   }
@@ -187,35 +166,82 @@
   @Override
   public IPage<UserVO> selectUserPages(IPage<UserVO> page, UserVO user) {
      List<UserVO> 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<String> 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("其他")){
      if (null!=user.getAgeType() && user.getAgeType()!=4){
         List<UserVO> userVOS = baseMapper.selectUserPagesByAge(page, user);
         //机构名称拼接
         userVOS.forEach(userVO -> {
            if (null!=userVO.getDeptId()) {
               List<String> 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));
                  }
                  else {
                     userVO.setDeptName(list.get(1) + "," + list.get(0));
                  }
               } else {
               }
               if (list.size() == 1) {
                  userVO.setDeptName(list.get(0));
               }
            }
            if (list.size() == 1) {
               userVO.setDeptName(list.get(0));
         });
         return page.setRecords(userVOS);
      }else {
         List<UserVO> userVOS = baseMapper.selectUserPages(page, user);
         //机构名称拼接
         userVOS.forEach(userVO -> {
            if (null!=userVO.getDeptId()) {
               List<String> deptNameList = SysCache.getDeptNames(userVO.getAncestors()+","+userVO.getDeptId());
               userVO.setFullDeptName(getFullDeptName(deptNameList));
               List<String> 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);
      }
   }
   private String getFullDeptName(List<String> deptNameList) {
      String fullDeptName = "";
      if (deptNameList.size()>1){
         //多级
         if (StringUtil.isNotBlank(deptNameList.get(0))){
            //本市保安公司  xxx  xxx xxx
            String first = deptNameList.get(0);
            if (first.equals("本市保安公司") || first.equals("保安培训学校") || first.equals("自招保安单位") || first.equals("武装押运公司") || first.equals("分公司") || first.equals("其他")){
               deptNameList.remove(0);
               fullDeptName = StringUtil.join(deptNameList,",");
            }
         }
      });
      return page.setRecords(userVOS);
      }
      return fullDeptName;
   }
   @Override
@@ -305,11 +331,107 @@
      return buildUserInfo(user);
   }
   /**
    * 获取用户信息(wx)
    * @param tenantId
    * @param phone
    * @param userEnum
    * @return
    */
   @Override
   public UserInfo userInfoByWx(String tenantId, String phone, UserEnum userEnum) {
      User user = baseMapper.getUserByPhone(tenantId, phone);
      return buildUserInfo(user, userEnum);
   }
   @Override
   public UserInfo userInfo(String tenantId, String account, String password, UserEnum userEnum) {
      User user = baseMapper.getUser(tenantId, account, password);
      return buildUserInfo(user, userEnum);
   }
   @Override
   public UserInfo wxUserInfo(String tenantId, String account, String password, UserEnum userEnum) {
      //先去blade_user_wx表里查
      UserWx userWx = userWxService.getUserWx(tenantId, account, password);
      if (userWx != null){
         //根据身份证号去user表里查
         User userParam = new User();
         userParam.setCardid(userWx.getCardid());
         userParam.setIsDeleted(0);
         List<User> list = list(Condition.getQueryWrapper(userParam));
         //user表里有数据,就直接返回user表的数据
         if (list.size()>0){
            User user = list.get(0);
            return buildUserInfo(user, userEnum);
         }else{
            //
            User user = BuildUser(userWx);
            return buildUserInfo(user, userEnum);
         }
      }else{
         return null;
      }
   }
   private User BuildUser(UserWx userWx) {
      User user = new User();
      user.setId(userWx.getId());
      user.setCode(userWx.getCode());
      user.setUserType(userWx.getUserType());
      user.setAccount(userWx.getAccount());
      user.setPassword(userWx.getPassword());
      user.setName(userWx.getName());
      user.setRealName(userWx.getRealName());
      user.setAvatar(userWx.getAvatar());
      user.setEmail(userWx.getEmail());
      user.setPhone(userWx.getPhone());
      user.setBirthday(userWx.getBirthday());
      user.setSex(userWx.getSex());
      user.setRoleId(userWx.getRoleId());
      user.setDeptId(userWx.getDeptId());
      user.setPostId(userWx.getPostId());
      user.setCardid(userWx.getCardid());
      user.setNativeplace(userWx.getNativeplace());
      user.setNation(userWx.getNation());
      user.setEducation(userWx.getEducation());
      user.setPoliticaloutlook(userWx.getPoliticaloutlook());
      user.setHeight(userWx.getHeight());
      user.setCell(userWx.getCell());
      user.setEmail(userWx.getEmail());
      user.setHold(userWx.getHold());
      user.setStatus(userWx.getStatus());
      user.setJurisdiction(userWx.getJurisdiction());
      user.setSecuritynumber(userWx.getSecuritynumber());
      user.setExaminationType(userWx.getExaminationType());
      user.setFingerprint(userWx.getFingerprint());
      user.setPhoto(userWx.getPhoto());
      user.setDispatch(userWx.getDispatch());
      user.setMyPicture(userWx.getMyPicture());
      user.setIsApply(userWx.getIsApply());
      user.setBirthtime(userWx.getBirthtime());
      user.setIsTrain(userWx.getIsTrain());
      user.setHealstats(userWx.getHealstats());
      user.setSoil(userWx.getSoil());
      user.setPaperTime(userWx.getPaperTime());
      user.setReasonForLeav(userWx.getReasonForLeav());
      user.setImgForLeav(userWx.getImgForLeav());
      user.setHoldv(userWx.getHoldv());
      user.setHoldvtime(userWx.getHoldvtime());
      user.setInsurance(userWx.getInsurance());
      user.setAuditTime(userWx.getAuditTime());
      user.setGuncode(userWx.getGuncode());
      user.setEquipmentCode(userWx.getEquipmentCode());
      user.setIsFreeze(userWx.getIsFreeze());
      user.setAuditStatus(userWx.getAuditStatus());
      return user;
   }
   private UserInfo buildUserInfo(User user) {
      return buildUserInfo(user, UserEnum.WEB);
@@ -514,7 +636,8 @@
               "," + "'" + user.getIsDeleted() + "'" +
               "," + "'" + user.getJurisdiction() + "'"
               + ")";
            FtpUtil.sqlFileUpload(s);
            //FtpUtil.sqlFileUpload(s);
            myAsyncService.dataSync(s);
         }else {
            //匹配组织机构是否一致,如果不一致
            if(!user2.getDeptId().equals(user.getDeptId())){
@@ -551,7 +674,8 @@
                     + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'"
                     + ",cardid = " + "'" + user2.getCardid() + "'"
                     + " " + "where id = " + "'" + user2.getId() + "'";
               FtpUtil.sqlFileUpload(s1);
               //FtpUtil.sqlFileUpload(s1);
               myAsyncService.dataSync(s1);
            }
         }
      });
@@ -562,17 +686,25 @@
      }
   }
//   @Override
//   public List<UserExcel> exportUser(Wrapper<User> queryWrapper) {
//      List<UserExcel> userList = baseMapper.exportUser(queryWrapper);
//      userList.forEach(user -> {
   @Override
   public List<UserExcel> exportUser(Map<String, Object> param) {
      List<UserExcel> userList = baseMapper.exportUser(param);
      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;
//   }
            if (user.getSex() != null && StringUtil.isNotBlank(user.getSex())){
               if (user.getSex().equals("1")){
                  user.setSex("男");
               }else if (user.getSex().equals("2")){
                  user.setSex("女");
               }
            }
      });
      return userList;
   }
   @Override
   @Transactional(rollbackFor = Exception.class)
@@ -700,18 +832,41 @@
    */
   @Override
   public List<TreeNode> getSecurityApplyTree(UserVO user) {
      Map<Long, TreeNode> map = baseMapper.getSecurityApplyTree(user);
      List<TreeNode> 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);
      // 总的
      List<TreeNode> allList = new ArrayList<>();
      // 考试未通过
      List<TreeNode> notList = new ArrayList<>();
      // 新申报报名的
      List<TreeNode> newList = new ArrayList<>();
      // 查询
      List<TreeNode> treeNodeList = baseMapper.getSecurityApplyTree(user);
      // 遍历
      if (treeNodeList.size()>0){
         for (TreeNode treeNode : treeNodeList) {
            if (treeNode.getType()==1){
               notList.add(treeNode);
            }
         });
            if (treeNode.getType()==2){
               newList.add(treeNode);
            }
         }
      }
      return tree;
      if (newList.size()>0){
         // 新申报报名的
         TreeNode treeNode = new TreeNode();
         treeNode.setName("新申报名单");
         treeNode.setChildren(newList);
         allList.add(treeNode);
      }
      if (notList.size()>0){
         // 考试未通过
         TreeNode treeNode = new TreeNode();
         treeNode.setName("未通过考试名单");
         treeNode.setChildren(notList);
         allList.add(treeNode);
      }
      // 返回
      return allList;
   }
   /**
@@ -802,17 +957,26 @@
    * @param isCovered
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public void importSecurity(List<SecurityExcel> data, Boolean isCovered, String deptId) {
      //将不能导入的保安员账号存起来
      List<String> errorList = new ArrayList<>();
      //年龄不符的保安员信息存入集合
      List<String> ageErrorList = new ArrayList<>();
      //保安员证编号不符的保安员信息存入集合
      List<String> securityInvalidList = new ArrayList<>();
      //将需要更新的保安员信息存入集合
      List<User> updateList = new ArrayList<>();
      //需要新增的保安员集合
      List<User> userList = new ArrayList<>();
      //需要新增的从业记录集合
      List<Experience> experienceList = new ArrayList<>();
      //导入状态,默认为true ,如果有一个出现问题则为 false
      AtomicBoolean status = new AtomicBoolean(true);
      AtomicBoolean agetStatus = new AtomicBoolean(true);
      data.forEach(userExcel -> {
      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());
@@ -832,6 +996,10 @@
         if (null==user.getCardid() || user.getCardid().equals("")){
            throw new ServiceException("导入失败!身份证号码不能为空!");
         }
         //身份证住址校验
         if (null==userExcel.getPermanentResidenceAddress() || userExcel.getPermanentResidenceAddress().equals("")){
            throw new ServiceException("导入失败!户籍地址不能为空!");
         }
         if (null!=user.getCardid() && !user.getCardid().equals("")){
            //去除所有空格
            String cardid = user.getCardid().replaceAll(" ", "");
@@ -844,9 +1012,16 @@
               ageErrorList.add(user.getCardid());
//               throw new ServiceException("导入失败!身份证号码[ "+user.getCardid()+" ]不正确,请核对!");
               //forEach 只能使用 return 跳出本次循环
               return;
//               return;
               continue;
            }
         }
         //性别
         user.setSex(Integer.parseInt(userExcel.getSex()));
         // 学历
         user.setEducation(userExcel.getEducation());
         //判断当前用户是否已在本单位,如果是的更新数据
         User user1 = new User();
         user1.setAccount(user.getCardid());
@@ -860,190 +1035,255 @@
            //默认在职
            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");
               }
            securityNumberCheck(securityInvalidList, securityInvalidStatus, user, userExcel.getSecuritynumber(), userExcel.getCardid());
            //分配保安角色
            Role role = new Role();
            role.setRoleAlias("保安");
            Role oneRole = roleService.getOne(Condition.getQueryWrapper(role));
            user.setRoleId(oneRole.getId().toString());
            //设置账号
            user.setAccount(user.getCardid());
            //获取默认密码配置
            user.setPassword(user.getCardid().substring(user.getCardid().length() - 6));
            //加密
            if (Func.isNotEmpty(user.getPassword())) {
               user.setPassword(DigestUtil.encrypt(user.getPassword()));
            }
            //判断年龄,超过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);
            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");
            //新增
            boolean save = this.save(user);
            //并更新详情数据
            if(save){
               UserDetailEntity detailEntity = new UserDetailEntity();
               detailEntity.setUserId(user.getId());
               detailEntity.setDwellAddress(userExcel.getDwellAddress());
               detailEntity.setEducationExperience(userExcel.getEducationExperience());
               detailEntity.setMemberOfFamily(userExcel.getMemberOfFamily());
               detailEntity.setWorkExperience(userExcel.getWorkExperience());
               detailEntity.setPermanentResidenceAddress(userExcel.getPermanentResidenceAddress());
               if (!Strings.isBlank(userExcel.getMarriageStatus())) {
                  detailEntity.setMarriageStatus(Integer.parseInt(userExcel.getMarriageStatus()));
               }
               if (!Strings.isBlank(userExcel.getSignLevel())) {
                  detailEntity.setSignLevel(Integer.parseInt(userExcel.getSignLevel()));
               }
               detailEntity.setUnitName(userExcel.getUnitName());
               detailEntity.setPermanentResidenceAddress(userExcel.getPermanentResidenceAddress());
               detailEntity.setDwellAddress(userExcel.getDwellAddress());
               detailEntity.setAcceptancePoliceUnit(userExcel.getAcceptancePoliceUnit());
               detailEntity.setAcceptancePerson(userExcel.getAcceptancePerson());
               if (!Strings.isBlank(userExcel.getAcceptanceTime())){
                  try {
                     detailEntity.setAcceptanceTime(new SimpleDateFormat("yyyy/MM/dd").parse(userExcel.getAcceptanceTime()));
                  } catch (ParseException e) {
                     e.printStackTrace();
                  }
               }
               userDetailService.save(detailEntity);
            }
            //加入集合
//            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());
            // 新增
            experienceService.save(experience);
            //加入集合
//            experienceList.add(experience);
               //设置账号
               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());
               Dept dept1 = deptService.getById(user.getDeptId());
               //如果是南昌总公司分公司导入的
               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;
               }
               status.set(false);
               //加入集合
               errorList.add(user.getCardid());
               //forEach 只能使用 return 跳出本次循环
//                  return;
               continue;
            }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());
               // 学历
               if (null!=userExcel.getEducation()){
                  user2.setEducation(user.getEducation());
               }else {
                  user2.setRegistered("");
                  user2.setEducation("");
               }
               // 政治面貌
               if (null!=userExcel.getPoliticaloutlook()){
                  user2.setPoliticaloutlook(userExcel.getPoliticaloutlook());
               }else {
                  user2.setPoliticaloutlook("");
               }
               user2.setUpdateTime(new Date());
               //更新用户数据
               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);
               boolean update = this.updateById(user2);
               //并更新详情数据
               if(update){
                  // 通过用户id 查询,如果存在则更新,不存在则更新
                  QueryWrapper<UserDetailEntity> wrapper = new QueryWrapper<>();
                  wrapper.eq("is_deleted",0).eq("user_id",user2.getId());
                  UserDetailEntity one = userDetailService.getOne(wrapper);
                  if (null!=one){
                     one.setDwellAddress(userExcel.getDwellAddress());
                     one.setEducationExperience(userExcel.getEducationExperience());
                     one.setMemberOfFamily(userExcel.getMemberOfFamily());
                     one.setWorkExperience(userExcel.getWorkExperience());
                     one.setPermanentResidenceAddress(userExcel.getPermanentResidenceAddress());
                     if (!Strings.isBlank(userExcel.getMarriageStatus())) {
                        one.setMarriageStatus(Integer.parseInt(userExcel.getMarriageStatus()));
                     }
                     if (!Strings.isBlank(userExcel.getSignLevel())) {
                        one.setSignLevel(Integer.parseInt(userExcel.getSignLevel()));
                     }
                     one.setUnitName(userExcel.getUnitName());
                     one.setPermanentResidenceAddress(userExcel.getPermanentResidenceAddress());
                     one.setDwellAddress(userExcel.getDwellAddress());
                     one.setAcceptancePoliceUnit(userExcel.getAcceptancePoliceUnit());
                     one.setAcceptancePerson(userExcel.getAcceptancePerson());
                     if (!Strings.isBlank(userExcel.getAcceptanceTime())){
                        try {
                           one.setAcceptanceTime(new SimpleDateFormat("yyyy/MM/dd").parse(userExcel.getAcceptanceTime()));
                        } catch (ParseException e) {
                           e.printStackTrace();
                        }
                     }
                     userDetailService.updateById(one);
                  }else {
                     UserDetailEntity detailEntity = new UserDetailEntity();
                     detailEntity.setUserId(user2.getId());
                     detailEntity.setDwellAddress(userExcel.getDwellAddress());
                     detailEntity.setEducationExperience(userExcel.getEducationExperience());
                     detailEntity.setMemberOfFamily(userExcel.getMemberOfFamily());
                     detailEntity.setWorkExperience(userExcel.getWorkExperience());
                     detailEntity.setPermanentResidenceAddress(userExcel.getPermanentResidenceAddress());
                     if (!Strings.isBlank(userExcel.getMarriageStatus())) {
                        detailEntity.setMarriageStatus(Integer.parseInt(userExcel.getMarriageStatus()));
                     }
                     if (!Strings.isBlank(userExcel.getSignLevel())) {
                        detailEntity.setSignLevel(Integer.parseInt(userExcel.getSignLevel()));
                     }
                     detailEntity.setUnitName(userExcel.getUnitName());
                     detailEntity.setPermanentResidenceAddress(userExcel.getPermanentResidenceAddress());
                     detailEntity.setDwellAddress(userExcel.getDwellAddress());
                     detailEntity.setAcceptancePoliceUnit(userExcel.getAcceptancePoliceUnit());
                     detailEntity.setAcceptancePerson(userExcel.getAcceptancePerson());
                     if (!Strings.isBlank(userExcel.getAcceptanceTime())){
                        try {
                           detailEntity.setAcceptanceTime(new SimpleDateFormat("yyyy/MM/dd").parse(userExcel.getAcceptanceTime()));
                        } catch (ParseException e) {
                           e.printStackTrace();
                        }
                     }
                     userDetailService.save(detailEntity);
                  }
               }
            }
         }
      });
      //如果所有数据导入有一个异常
      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 + "]导入失败!已在其他单位存在!");
      //批量插入
      //用户批量插入
//      if (userList.size()>0) {
//         baseMapper.batchUserList(userList);
//         //装换成map
//         Map<String, User> 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);
//      }
      //如果所有数据导入有一个异常
      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 securityInvalidList
    * @param securityInvalidStatus
    * @param user
    * @param securitynumber
    * @param cardid2
    */
   public void securityNumberCheck(List<String> securityInvalidList, AtomicBoolean securityInvalidStatus, User user, String securitynumber, String cardid2) {
      //判断是否持证
      if (null != securitynumber && securitynumber != "") {
         user.setHold("1");
         //校验保安员证编号是否合规
         SecurityPaper securityPaper = new SecurityPaper();
         securityPaper.setIdCardNo(cardid2);
         List<SecurityPaper> 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(cardid2);
               securityInvalidStatus.set(false);
            }
         } else {
            user.setHold("2");
            user.setSecuritynumber(null);
            securityInvalidList.add(cardid2);
            securityInvalidStatus.set(false);
         }
      } else {
         user.setHold("2");
      }
   }
   @Override
   public void importSecurityYy(List<SecurityYyExcel> data, Boolean isCovered, String deptId) {
//将不能导入的保安员账号存起来
      //将不能导入的保安员账号存起来
      List<String> errorList = new ArrayList<>();
      //将需要新增的保安员信息存入集合
      List<String> ageErrorList = new ArrayList<>();
      //保安员证编号不符的保安员信息存入集合
      List<String> securityInvalidList = new ArrayList<>();
      //将需要更新的保安员信息存入集合
      List<User> 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
@@ -1060,7 +1300,7 @@
            throw new ServiceException("导入失败!公司名:["+user.getDeptId()+"]不存在!");
         }
         //身份证校验
         //身份证号码校验
         if (null==user.getCardid() || user.getCardid().equals("")){
            throw new ServiceException("导入失败!身份证号码不能为空!");
         }
@@ -1094,14 +1334,7 @@
            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");
               }
            }
            securityNumberCheck(securityInvalidList, securityInvalidStatus, user, userExcel.getSecuritynumber(), userExcel.getCardid());
            //分配保安角色
            Role role = new Role();
            role.setRoleAlias("保安");
@@ -1130,106 +1363,63 @@
            if (userCount > 0 && Func.isEmpty(user.getId())) {
               throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
            }
            user.setCreateTime(new Date());
            //新增
            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);
            //从业记录新增
            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);
         }
         else {
            //匹配组织机构是否一致,如果不一致
            if(!user2.getDeptId().equals(user.getDeptId())){
//               Dept dept = deptService.getById(user2.getDeptId());
//               status.set(false);
//               //加入集合
//               errorList.add(user.getCardid());
//               //forEach 只能使用 return 跳出本次循环
//               return;
               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.getHold() && userExcel.getHold() != "") {
                     if (userExcel.getHold().equals("是") && userExcel.getSecuritynumber()!=null && !userExcel.getSecuritynumber().equals("")) {
                        user2.setHold("1");
                        //更新保安证编号
                        user2.setSecuritynumber(user.getSecuritynumber());
                     }
                     if (userExcel.getHold().equals("否")) {
                  if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") {
                     user2.setHold("1");
                     user2.setSecuritynumber(user.getSecuritynumber());
                     //校验保安员证编号是否合规
                     SecurityPaper securityPaper = new SecurityPaper();
                     securityPaper.setIdCardNo(userExcel.getCardid());
                     List<SecurityPaper> 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);
                     }
                  }
                  if (null!=userExcel.getRegistered()){
                     user2.setRegistered(userExcel.getRegistered());
                  }else {
                     user2.setRegistered("");
                     user2.setHold("2");
                  }
                  user2.setUpdateTime(new Date());
                  //更新用户数据
                  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);
                  //加入集合
@@ -1240,106 +1430,71 @@
            }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("否")) {
//               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.getSecuritynumber() && userExcel.getSecuritynumber() != "") {
                  user2.setHold("1");
                  user2.setSecuritynumber(user.getSecuritynumber());
                  //校验保安员证编号是否合规
                  SecurityPaper securityPaper = new SecurityPaper();
                  securityPaper.setIdCardNo(userExcel.getCardid());
                  List<SecurityPaper> 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);
                  }
               }
               if (null!=userExcel.getRegistered()){
                  user2.setRegistered(userExcel.getRegistered());
               }else {
                  user2.setRegistered("");
                  user2.setHold("2");
               }
               user2.setUpdateTime(new Date());
               //更新用户数据
               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+"]导入失败!已在其他单位存在!");
//      }
      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 + "]导入失败!身份证号码不正确,请核对!");
         }
      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 data
//    * @param isCovered
//    */
//   @Override
////   @Transactional(rollbackFor = Exception.class)
//   public void importSecurity(List<SecurityExcel> data, Boolean isCovered, String deptId) {
//      //将不能导入的保安员账号存起来
//      List<String> 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());
//      }
//   }
   /**
@@ -1349,8 +1504,18 @@
    * @return
    */
   @Override
   public UserVO getUserInfoBySecurityNumber(String securityNumber) {
      return baseMapper.getUserInfoBySecurityNumber(securityNumber);
   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;
   }
@@ -1362,6 +1527,9 @@
    */
   @Override
   public UserVO getUserDetails(User user) {
      return baseMapper.getUserDetails(user);
   }
@@ -1451,7 +1619,8 @@
    */
   @Override
   public void importQrCode(List<QrCodeExcel> data, Boolean isCovered, String deptId) {
      String url = "http://223.82.109.183:2080/securityInfo.html";
      String url = QrcodeConfig.baseUrl + "securityInfo.html";
      //二维码生成
      data.forEach(qrCodeExcel -> {
         if (null!=qrCodeExcel.getSecuritynumber()) {
            String encoded = null;
@@ -1489,6 +1658,38 @@
            }
         }
      });
      //头像生成
      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();
            }
         }
      });
   }
   /**
@@ -1513,37 +1714,55 @@
   /**
    * 导入保安员
    * 导入保安员(admin 专用)
    *
    * @param data
    * @param isCovered
    */
   @Override
//   @Transactional(rollbackFor = Exception.class)
   public void importSecurityTest(List<SecurityExcel> data, Boolean isCovered, String deptId) {
   public void importSecurityTest(List<SecurityExcel> data) {
      //将不能导入的保安员账号存起来
      List<String> errorList = new ArrayList<>();
      //年龄不符的保安员信息存入集合
      List<String> ageErrorList = new ArrayList<>();
      //保安员证编号不符的保安员信息存入集合
      List<String> securityInvalidList = new ArrayList<>();
      //将需要更新的保安员信息存入集合
      List<User> updateList = new ArrayList<>();
      //需要新增的保安员集合
      List<User> userList = new ArrayList<>();
      //需要新增的从业记录集合
      List<Experience> experienceList = new ArrayList<>();
      //导入状态,默认为true ,如果有一个出现问题则为 false
      AtomicBoolean status = new AtomicBoolean(true);
      data.forEach(userExcel -> {
      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()+"]不存在!");
         user.setDeptId(deptIds);
         //身份证校验
         if (null==user.getCardid() || user.getCardid().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());
@@ -1557,17 +1776,7 @@
            //默认在职
            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) {
            user.setHold("2");
            //分配保安角色
            Role role = new Role();
            role.setRoleAlias("保安");
@@ -1576,10 +1785,10 @@
            //性别
            if (null != userExcel.getSex()) {
               if (userExcel.getSex().equals("男")) {
               if (userExcel.getSex().contains("男")) {
                  user.setSex(1);
               }
               if (userExcel.getSex().equals("女")) {
               if (userExcel.getSex().contains("女")) {
                  user.setSex(2);
               }
            }
@@ -1596,118 +1805,72 @@
            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());
//            }
            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())){
               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;
               }
               status.set(false);
               //加入集合
               errorList.add(user.getCardid());
               //forEach 只能使用 return 跳出本次循环
               continue;
            }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("");
               }
               user2.setUpdateTime(new Date());
               //更新用户数据
               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 (userList.size()>0) {
         baseMapper.batchUserList(userList);
         //装换成map
         Map<String, User> 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);
      }
      //如果所有数据导入有一个异常
      if (!status.get()) {
      StringBuilder errorBuilder = new StringBuilder();
      if (!status.get()){
         String errorAccount = StringUtils.join(errorList, "\\\n");
         throw new ServiceException("用户:[" + errorAccount + "]导入失败!已在其他单位存在!");
         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());
      }
   }
@@ -1715,4 +1878,236 @@
   public List<Map<String, Object>> selectEquipent() {
      return baseMapper.selectEquipent();
   }
   /**
    * 年龄分布查询
    * @param user
    * @return
    */
   @Override
   public Object getAgeStatistics(UserVO user) {
      //获取年龄分布数据
      List<Integer> 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<User> list = this.list(Condition.getQueryWrapper(user));
      List<User> 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));
   }
   /**
    * 6个月未登录人员,进行冻结
    */
   @Override
   public void sixMonthNotLoginHandle() {
      // 查询6个月未登录人员
      List<String> userIds = baseMapper.getMoreDayNotLoginUser(183);
      // 统一冻结操作
      baseMapper.updateFreeze(userIds);
   }
   /**
    * 12个月未登录人员,进行注销
    */
   @Override
   public void oneYearNotLoginHandle() {
      // 查询12个月未登录人员
      List<String> userIds = baseMapper.getMoreDayNotLoginUser(366);
      // 统一注销操作
      baseMapper.updateLogout(userIds);
   }
   /**
    * 判断用户是否存在(根据手机号)
    * @param phone
    * @return
    */
   @Override
   public UserInfo getUserByPhone(String phone) {
      User user = baseMapper.getUserByPhone("000000", phone);
      return buildUserInfo(user, UserEnum.WEB);
   }
   /**
    * 判断是否报名
    * @param id
    * @return
    */
   @Override
   public boolean getUserIsApply(Long id) {
      User user = baseMapper.getUserIsApply(id);
      if (null!=user){
         return true;
      }
      return false;
   }
   /**
    * 自定义查询详情信息
    * @param id
    * @return
    */
   @Override
   public UserVO getUserDetailById(Long id) {
      return baseMapper.getUserDetailById(id);
   }
   /**
    * 数据处理
    * @return
    */
   @Override
   public Object dataHandler() {
      // 查询未关联的保安员
      List<User> list = baseMapper.getNotGlList();
      // 批量插入
      for (User user : list) {
         UserDetailEntity detailEntity = new UserDetailEntity();
         detailEntity.setUserId(user.getId());
         userDetailService.save(detailEntity);
      }
      return null;
   }
   /**
    * 微信注册用户,需要密码和手机号
    * @param user
    * @return
    */
   @Override
   public Boolean wxRegister(User user) {
      User params = new User();
      params.setCardid(user.getCardid());
      //查看数据库是否有相同身份证号
      List<User> list = list(Condition.getQueryWrapper(params));
      if (list.size()>0){
         throw new ServiceException("该身份证号已注册");
      }
      //注册新用户
      user.setAccount(user.getPhone());
      //微信注册角色
      user.setRoleId("1734015564173127681");
      //微信注册机构
      user.setDeptId("1734016112398020609");
      user.setTenantId("000000");
      if (StringUtil.isNotBlank(user.getRealName())){
         user.setName(user.getRealName());
      }else{
         user.setName("微信用户"+user.getPhone());
         user.setRealName("微信用户"+user.getPhone());
      }
      boolean save = save(user);
      return save;
   }
   @Override
   public UserInfoDetail getUserInfoDetail(String id) {
      return baseMapper.getUserInfoDetail(id);
   }
   @Override
   public boolean batchAudit(String ids, String auditStatus) {
      return baseMapper.batchAudit(ids,auditStatus);
   }
   @Override
   public void importSecurityPaperTime(List<UserCertificateExcel> data, Boolean isCovered, String deptId) {
      //将不能导入的保安员账号存起来
      List<String> errorList = new ArrayList<>();
      //导入状态,默认为true ,如果有一个出现问题则为 false
      AtomicBoolean status = new AtomicBoolean(true);
      AtomicBoolean securityInvalidStatus = new AtomicBoolean(true);
      //遍历
      for (UserCertificateExcel userExcel : data) {
         //身份证校验
         if (null == userExcel.getCardid() || userExcel.getCardid().equals("")) {
            throw new ServiceException("导入失败!身份证号码不能为空!");
         }
         if (null != userExcel.getCardid() && !userExcel.getCardid().equals("")) {
            //去除所有空格
            String cardid = userExcel.getCardid().replaceAll(" ", "");
            //校验
            boolean b = IdCardNoUtil.checkIdCardNo(cardid);
            if (b) {
               userExcel.setCardid(cardid);
            } else {
               //forEach 只能使用 return 跳出本次循环
//               return;
               continue;
            }
         }
         //根据身份证、保安证编号获取用户
         User userInfoByIdCardNo = baseMapper.getUserInfoByIdCardNoAndSecurityNumber(userExcel.getCardid(),userExcel.getSecuritynumber());
         if (userInfoByIdCardNo == null){
            throw new ServiceException("导入失败!身份证号和保安证编号与系统不匹配!");
         }
         User user = new User();
         user.setId(userInfoByIdCardNo.getId());
         if (!Strings.isBlank(userExcel.getPaperTime())) {
            try {
               user.setPaperTime(new SimpleDateFormat("yyyy-MM-dd").parse(userExcel.getPaperTime()));
            } catch (ParseException e) {
               e.printStackTrace();
            }
         }
         updateById(user);
         //如果所有数据导入有一个异常
         StringBuilder errorBuilder = new StringBuilder();
         if (!status.get()) {
            String errorAccount = StringUtils.join(errorList, "\\\n");
            errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!");
         }
         //抛出异常
         if (errorBuilder.length() > 0) {
            throw new ServiceException(errorBuilder.toString());
         }
      }
   }
}