智慧保安后台管理-外网
Administrator
2022-06-28 e290026f1004fca0d8cf43bf986a3dbd8b7974c9
src/main/java/org/springblade/modules/system/controller/UserController.java
@@ -17,18 +17,30 @@
package org.springblade.modules.system.controller;
import com.alibaba.excel.EasyExcel;
import com.aliyun.oss.ServiceException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.minio.*;
import io.minio.errors.*;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import net.sf.json.JSONObject;
import org.apache.commons.codec.Charsets;
import org.apache.commons.lang3.StringUtils;
import org.springblade.common.cache.DictCache;
import org.springblade.common.config.FtpConfig;
import org.springblade.common.enums.DictEnum;
import org.springblade.common.utils.arg;
import org.springblade.common.excel.CustomCellWriteHeightConfig;
import org.springblade.common.excel.CustomCellWriteWeightConfig;
import org.springblade.common.excel.RowWriteHandler;
import org.springblade.common.utils.*;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.launch.constant.AppConstant;
@@ -42,39 +54,64 @@
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.constant.RoleConstant;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.DigestUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringPool;
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.accreditation.entity.AccreditationRecords;
import org.springblade.modules.accreditation.service.AccreditationRecordsService;
import org.springblade.modules.dispatcher.entity.Dispatcher;
import org.springblade.modules.dispatcher.service.IDispatcherService;
import org.springblade.modules.exam.excel.ExportExamScoreExcel;
import org.springblade.modules.experience.entity.Experience;
import org.springblade.modules.experience.service.IExperienceService;
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.signinrecords.entity.SignInRecords;
import org.springblade.modules.signinrecords.service.SignInRecordsService;
import org.springblade.modules.system.dto.UserDTO;
import org.springblade.modules.system.entity.Dept;
import org.springblade.modules.system.entity.Role;
import org.springblade.modules.system.entity.User;
import org.springblade.modules.system.excel.SecurityImporter;
import org.springblade.modules.system.excel.UserExcel;
import org.springblade.modules.system.excel.UserImporter;
import org.springblade.modules.system.excel.*;
import org.springblade.modules.system.node.TreeNode;
import org.springblade.modules.system.service.IDeptService;
import org.springblade.modules.system.service.IRoleService;
import org.springblade.modules.system.service.IUserService;
import org.springblade.modules.system.service.MyAsyncService;
import org.springblade.modules.system.vo.DeptVO;
import org.springblade.modules.system.vo.UserVO;
import org.springblade.modules.system.wrapper.UserWrapper;
import org.springblade.modules.training.entity.TrainingRegistration;
import org.springblade.modules.training.service.TrainingRegistrationService;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import springfox.documentation.annotations.ApiIgnore;
import sun.misc.BASE64Decoder;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import static org.springblade.common.config.FtpConfig.*;
import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
import static org.springblade.modules.FTP.DataHandler.handlerUserInfo;
/**
 * 控制器
@@ -94,6 +131,22 @@
   private final IExperienceService experienceService;
   private final JurisdictionService jurisdictionService;
   private final IDispatcherService dispatcherService;
   private final SignInRecordsService signInRecordsService;
   private final TrainingRegistrationService trainingRegistrationService;
   private final AccreditationRecordsService accreditationRecordsService;
   private final SecurityPaperService securityPaperService;
   private final MyAsyncService myAsyncService;
   private final RedisTemplate redisTemplate;
   /**
    * 查询单条
@@ -163,8 +216,8 @@
   @ApiOperation(value = "列表", notes = "传入account和realName")
   //@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
   public R<IPage<UserVO>> page(@ApiIgnore User user, Query query, Long deptId, BladeUser bladeUser) {
      IPage<User> pages = userService.selectUserPage(Condition.getPage(query), user, deptId, (bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : bladeUser.getTenantId()));
      return R.data(UserWrapper.build().pageVO(pages));
      IPage<UserVO> pages = userService.selectUserPage(Condition.getPage(query), user, deptId, (bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : bladeUser.getTenantId()));
      return R.data(pages);
   }
   /**
@@ -174,33 +227,230 @@
   @ApiOperationSupport(order = 4)
   @ApiOperation(value = "新增或修改", notes = "传入User")
   //@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
   public R submit(@Valid @RequestBody User user) throws Exception {
      CacheUtil.clear(USER_CACHE);
      //查询角色
      if (null!=user.getRoleId()){
         Role role = new Role();
         role.setId(Long.parseLong(user.getRoleId()));
         Role one = roleService.getOne(Condition.getQueryWrapper(role));
         if (one.getRoleAlias().equals("保安")){
            user.setHold("1");
   public R submit(@Valid @RequestBody User user) {
      if (null == user.getId()) {
         Integer userCount = userService.selectCountAccount(user.getAccount());
         if (userCount > 0) {
            throw new org.springblade.core.log.exception.ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
         }
         if (one.getRoleAlias().equals("未持证保安")){
         //判断角色
         if(user.getRoleId().equals("1412226235153731586")){
            //如果是保安员,默认为无证
            user.setHold("2");
         }
         user.setTenantId("000000");
         user.setDispatch("1");
         //待审查
         user.setExaminationType("2");
//         String realName = user.getRealName();
//         String cardid = user.getCardid();
////         user.setAccount(user.getRealName());
//         user.setAccount(realName.substring(0,1)+cardid.substring(cardid.length()-4));
         //默认在职
         user.setStatus(1);
         user.setIsDeleted(0);
         user.setCreateTime(new Date());
         user.setUpdateTime(new Date());
         //密码加密
         if (Func.isNotEmpty(user.getCardid())) {
            //取身份证号码后6位作为密码
            user.setPassword(DigestUtil.encrypt(user.getCardid().substring(user.getCardid().length() - 6)));
         }
         user.setCreateTime(new Date());
         user.setTenantId("000000");
         //判断是否为民警 code
         if (null != user.getCode() && !user.getCode().equals("")) {
            //民警
            //根据 deptId 查询dept信息,公安管理员
            Dept dept = iDeptService.getById(user.getDeptId());
            //获取辖区的数据
            Jurisdiction jurisdiction = new Jurisdiction();
            jurisdiction.setDeptName(dept.getDeptName());
            Jurisdiction one = jurisdictionService.getOne(Condition.getQueryWrapper(jurisdiction));
            user.setJurisdiction(one.getId().toString());
         }
         //用户新增
//      boolean status = userService.save(user);
         User user1 = Objects.requireNonNull(BeanUtil.copy(user,User.class));
         //生成随机数
         String uuid = UUID.randomUUID().toString();
         //将 user 存入 redis
         redisTemplate.opsForValue().set(uuid,JSON.toJSONString(user));
         //user1 临时设置uuid 到 reason_for_leav 离职原因字段
         user1.setReasonForLeav(uuid);
         //数据推送
         Map<String, Object> map = new HashMap<>(1);
         map.put("user",user1);
         myAsyncService.FTPObject(map);
         int count = 0;
         int flag = 1;
         Result result = new Result();
         //调用ftp获取返回数据
         while (true){
            try {
               Thread.sleep(1000);
            } catch (InterruptedException e) {
               e.printStackTrace();
            }
            //调用ftp获取返回数据
            result = Monitor.isFTPFileExist(uuid);
            //如果返回true,就退处
            if (result.getCode()==200){
               flag = 1;
               break;
            }else if (result.getCode()==201){
               flag = 2;
               break;
            }else if (result.getCode()==202){
               flag = 3;
               break;
            }else if (result.getCode()==203){
               flag = 4;
               break;
            }else{
               //计数
               count++;
               //如果超过10s 没有读取到,则退出
               if (count == 60) {
                  System.out.println("等待超时.....................");
                  break;
               }
            }
         }
         if (flag==1 || flag==2) {
            //返回
            return R.data(200, null, "新增成功!");
         }else if (flag==3){
            throw new ServiceException(result.getMsg());
         }else if (flag==4){
//         return R.data(201, null, "保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!");
            return R.data(201, null, "保安证编号不匹配,请核实!");
         }else{
            //返回
            return R.data(400, null, "新增失败!");
         }
      } else {
         //修改
         User user1 = userService.getById(user.getId());
         user.setPassword(user1.getPassword());
         user.setUpdateTime(new Date());
         boolean b = userService.updateById(user);
         if (b) {
            String s1 =
               "update blade_user set account = " + "'" + user.getAccount() + "'"
                  + ",code = " + "'" + user.getCode() + "'"
                  + ",real_name = " + "'" + user.getRealName() + "'"
                  + ",phone = " + "'" + user.getPhone() + "'"
                  + ",sex = " + "'" + user.getSex() + "'"
                  + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'"
                  + ",role_id = " + "'" + user.getRoleId() + "'"
                  + ",dept_id = " + "'" + user.getDeptId() + "'"
                  + ",cardid = " + "'" + user.getCardid() + "'"
                  + ",guncode = " + "'" + user.getGuncode() + "'"
                  + " " + "where id = " + "'" + user.getId() + "'";
            myAsyncService.FTP(s1);
         }
      }
      //根据 deptId 查询dept信息,公安管理员
      Dept dept = iDeptService.getById(user.getDeptId());
      Long sid = 1123598813738675201L;
      if (dept.getParentId().equals(sid)){
         //获取辖区的数据
         Jurisdiction jurisdiction = new Jurisdiction();
         jurisdiction.setDeptName(dept.getDeptName());
         Jurisdiction one = jurisdictionService.getOne(Condition.getQueryWrapper(jurisdiction));
         user.setJurisdiction(one.getId().toString());
      }
      return R.status(userService.submit(user));
      //返回
      return R.success("成功");
   }
   /**
//    * 新增或修改
//    */
//   @PostMapping("/submit")
//   @ApiOperationSupport(order = 4)
//   @ApiOperation(value = "新增或修改", notes = "传入User")
//   //@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
//   public R submit(@Valid @RequestBody User user) {
//      if (null == user.getId()) {
//         //新增
//         //密码加密
//         if (Func.isNotEmpty(user.getPassword())) {
//            user.setPassword(DigestUtil.encrypt(user.getPassword()));
//         }
//         Integer userCount = userService.selectCountAccount(user.getAccount());
//         if (userCount > 0) {
//            throw new org.springblade.core.log.exception.ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
//         }
//         user.setTenantId("000000");
//         user.setStatus(1);
//         user.setIsDeleted(0);
//         user.setCreateTime(new Date());
//         user.setUpdateTime(new Date());
//         //判断是否为民警 code
//         if (null != user.getCode() && !user.getCode().equals("")) {
//            //民警
//            //根据 deptId 查询dept信息,公安管理员
//            Dept dept = iDeptService.getById(user.getDeptId());
//            //获取辖区的数据
//            Jurisdiction jurisdiction = new Jurisdiction();
//            jurisdiction.setDeptName(dept.getDeptName());
//            Jurisdiction one = jurisdictionService.getOne(Condition.getQueryWrapper(jurisdiction));
//            user.setJurisdiction(one.getId().toString());
//         }
//         //新增
//         boolean stats = userService.save(user);
//         if (stats) {
//            //内网同步
//            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() + "'"
//               + ")";
//            myAsyncService.FTP(s);
//         }
//      } else {
//         //修改
//         User user1 = userService.getById(user.getId());
//         user.setPassword(user1.getPassword());
//         user.setUpdateTime(new Date());
//         boolean b = userService.updateById(user);
//         if (b) {
//            String s1 =
//               "update blade_user set account = " + "'" + user.getAccount() + "'"
//                  + ",code = " + "'" + user.getCode() + "'"
//                  + ",real_name = " + "'" + user.getRealName() + "'"
//                  + ",phone = " + "'" + user.getPhone() + "'"
//                  + ",sex = " + "'" + user.getSex() + "'"
//                  + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'"
//                  + ",role_id = " + "'" + user.getRoleId() + "'"
//                  + ",dept_id = " + "'" + user.getDeptId() + "'"
//                  + ",cardid = " + "'" + user.getCardid() + "'"
//                  + ",guncode = " + "'" + user.getGuncode() + "'"
//                  + " " + "where id = " + "'" + user.getId() + "'";
//            myAsyncService.FTP(s1);
//         }
//      }
//
//      //返回
//      return R.success("成功");
//   }
   /**
    * 修改
@@ -208,9 +458,619 @@
   @PostMapping("/update")
   @ApiOperationSupport(order = 5)
   @ApiOperation(value = "修改", notes = "传入User")
   public R update(@Valid @RequestBody User user) {
   public R update(@Valid @RequestBody User user) throws Exception {
      CacheUtil.clear(USER_CACHE);
      return R.status(userService.updateUser(user));
      User user1 = userService.getById(user.getId());
      String url = "";
      if (null != user.getFingerprint() && !user.getFingerprint().equals("")) {
         if (user.getFingerprint().length() > 100) {
            //指纹图片上传并返回url
            String s = uploadBase64String(user);
            String[] split = s.split(",");
            user.setFingerprint(split[0]);
            //内网指纹图片url
            url = split[1];
         }
      }
      //判断是否持证
      boolean states = false;
      if (user.getHold().equals("1") && null!=user.getSecuritynumber() && !user.getSecuritynumber().equals("")){
         //持证,校验保安证编号是否合法
         SecurityPaper securityPaper = new SecurityPaper();
         securityPaper.setIdCardNo(user.getCardid());
         List<SecurityPaper> securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper));
         if (securityPaperList.size()>0){
            //遍历
            for (SecurityPaper paper : securityPaperList) {
               if (paper.getNumber().equals(user.getSecuritynumber())){
                  states = true;
               }
            }
            if (!states){
               user.setHold("2");
//               throw new ServiceException("保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!");
            }
         }else {
//            throw new ServiceException("保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!");
            states = false;
            user.setHold("2");
         }
      }
      if (user.getHold().equals("2")){
         states = true;
      }
      //如果是离职
      if (null != user.getStatus()) {
         if (user.getStatus().equals(2)) {
            //修改派遣状态
            user.setDispatch("1");
            //同时将派遣记录中的派遣状态修改
            //查询派遣记录(还在派遣中的)
            Dispatcher dispatcher = new Dispatcher();
            dispatcher.setUserIds(user.getId().toString());
            dispatcher.setStatus(0);
            List<Dispatcher> dispatcherList = dispatcherService.list(Condition.getQueryWrapper(dispatcher));
            if (dispatcherList.size() > 0) {
               dispatcherList.forEach(dispatcher1 -> {
                  dispatcher1.setStatus(1);
                  dispatcher1.setUpdateTime(new Date());
                  boolean b = dispatcherService.updateById(dispatcher1);
                  if (b) {
                     String s1 =
                        "update sys_dispatcher set status = " + "'" + dispatcher1.getStatus() + "'"
                           + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dispatcher1.getUpdateTime()) + "'"
                           + " " + "where id = " + "'" + dispatcher1.getId() + "'";
                     myAsyncService.FTP(s1);
                  }
               });
            }
            //查询当前用户是否有从业记录,没有的话新增,有就更新
            //根据公司名查询单位
            Dept dept = iDeptService.getById(user.getDeptId());
            Experience experience = new Experience();
            experience.setCompanyname(dept.getDeptName());
            experience.setCardid(user.getCardid());
            //按id降序
            List<Experience> list = experienceService.list(Condition.getQueryWrapper(experience).orderByDesc("id"));
            if (list.size() > 0) {
               //如果有多条取第一条更新
               Experience experience1 = list.get(0);
               //设置离职时间
               experience1.setDeparturetime(new Date());
               //更新从业记录信息
               experienceService.updateById(experience1);
               //数据同步
               String s1 =
                  "update sys_experience set departureTime = " + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience1.getDeparturetime()) + "'"
                     + " " + "where id = " + "'" + experience1.getId() + "'";
               //FtpUtil.sqlFileUpload(s1);
               myAsyncService.FTP(s1);
            } else {
               //新增
               if (null != user.getRtime()) {
                  experience.setEntrytime(user.getRtime());
               } else {
                  experience.setEntrytime(new Date());
               }
               experience.setDeparturetime(new Date());
               experience.setName(user.getRealName());
               if (null != user.getReasonForLeav() && !user.getReasonForLeav().equals("")) {
                  experience.setLeaving(user.getReasonForLeav());
               }
               experience.setCardid(user.getCardid());
               experience.setSecurityid(user.getId().toString());
               //新增
               boolean save = experienceService.save(experience);
               if (save) {
                  //内网同步
                  String s = "insert into sys_experience(id,name,entryTime,departureTime,leaving,cardId,companyname,securityId) " +
                     "values(" + "'" + experience.getId() + "'" +
                     "," + "'" + experience.getName() + "'" +
                     "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getEntrytime()) + "'" +
                     "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getDeparturetime()) + "'" +
                     "," + "'" + experience.getLeaving() + "'" +
                     "," + "'" + experience.getCardid() + "'" +
                     "," + "'" + experience.getCompanyname() + "'" +
                     "," + "'" + experience.getSecurityid() + "'"
                     + ")";
                  myAsyncService.FTP(s);
               }
            }
            boolean status = userService.updateById(user);
            //qfqk 数据推送
            if (status) {
               User user2 = new User();
               user2.setId(user.getId());
               //删除
               myAsyncService.deleteUserByQfqk(user2);
               //内网更新
               String s1 =
                  "update blade_user set status = " + "'" + user.getStatus() + "'"
                     + " " + "where id = " + "'" + user.getId() + "'";
               myAsyncService.FTP(s1);
            }
            return R.success("修改成功");
         }
      }
      int state = 0;
      //如果是异常标记
      if (null != user.getExaminationType() && !user.getExaminationType().equals("")) {
         if (user.getExaminationType().equals("1")) {
            //吊销保安证
            user.setHold("3");
            state = 1;
         }
      }
      user.setPassword(user1.getPassword());
      user.setUpdateTime(new Date());
      //如果身份证号修改
      if (!user.getCardid().equals(user1.getCardid())) {
         //账号,密码也修改
         user.setAccount(user.getCardid());
         //获取默认密码配置
         user.setPassword(user.getCardid().substring(user.getCardid().length() - 6));
         //加密
         if (Func.isNotEmpty(user.getPassword())) {
            user.setPassword(DigestUtil.encrypt(user.getPassword()));
         }
         state = 2;
      }
      //修改
      boolean status = userService.updateById(user);
      if (status) {
         if (state == 2) {
            UserDTO userDTO = new UserDTO();
            userDTO.setAccount(user.getAccount());
            userDTO.setCardid(user.getCardid());
            userDTO.setOldCardid(user1.getCardid());
            userDTO.setPassword(user.getPassword());
            userDTO.setRealName(user.getRealName());
            userDTO.setPhone(user.getPhone());
            userDTO.setSex(user.getSex());
            userDTO.setAvatar(user.getAvatar());
            //推送qfqk
            myAsyncService.updateUserByAccount(userDTO);
         } else {
            myAsyncService.updateUserByQfqk(user);
         }
      }
      String rtime;
      if (user.getRtime() == null) {
         String s1 =
            "update blade_user set account = " + "'" + user.getAccount() + "'"
               + ",name = " + "'" + user.getName() + "'"
               + ",real_name = " + "'" + user.getRealName() + "'"
               + ",avatar = " + "'" + user.getAvatar() + "'"
               + ",email = " + "'" + user.getEmail() + "'"
               + ",phone = " + "'" + user.getPhone() + "'"
               + ",sex = " + "'" + user.getSex() + "'"
               + ",role_id = " + "'" + user.getRoleId() + "'"
               + ",dept_id = " + "'" + user.getDeptId() + "'"
               + ",cardid = " + "'" + user.getCardid() + "'"
               + ",nativePlace = " + "'" + user.getNativeplace() + "'"
               + ",nation = " + "'" + user.getNation() + "'"
               + ",education = " + "'" + user.getEducation() + "'"
               + ",politicaloutlook = " + "'" + user.getPoliticaloutlook() + "'"
               + ",healstats = " + "'" + user.getHealstats() + "'"
               + ",height = " + "'" + user.getHeight() + "'"
               + ",fingerprint = " + "'" + url + "'"
               + ",my_picture = " + "'" + user.getMyPicture() + "'"
               + ",address = " + "'" + user.getAddress() + "'"
               + ",registered = " + "'" + user.getRegistered() + "'"
               + ",dispatch = " + "'" + user.getDispatch() + "'"
               + ",securitynumber = " + "'" + user.getSecuritynumber() + "'"
               + ",hold = " + "'" + user.getHold() + "'"
               + ",jurisdiction = " + "'" + user.getJurisdiction() + "'"
               + ",reason_for_leav = " + "'" + user.getReasonForLeav() + "'"
               + ",guncode = " + "'" + user.getGuncode() + "'"
               + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'"
               + " " + "where id = " + "'" + user.getId() + "'";
         //FtpUtil.sqlFileUpload(s1);
         myAsyncService.FTP(s1);
      } else {
         rtime = new SimpleDateFormat("yyyy-MM-dd").format(user.getRtime());
         String s1 =
            "update blade_user set account = " + "'" + user.getAccount() + "'"
               + ",name = " + "'" + user.getName() + "'"
               + ",real_name = " + "'" + user.getRealName() + "'"
               + ",avatar = " + "'" + user.getAvatar() + "'"
               + ",email = " + "'" + user.getEmail() + "'"
               + ",phone = " + "'" + user.getPhone() + "'"
               + ",sex = " + "'" + user.getSex() + "'"
               + ",role_id = " + "'" + user.getRoleId() + "'"
               + ",dept_id = " + "'" + user.getDeptId() + "'"
               + ",cardid = " + "'" + user.getCardid() + "'"
               + ",nativePlace = " + "'" + user.getNativeplace() + "'"
               + ",nation = " + "'" + user.getNation() + "'"
               + ",education = " + "'" + user.getEducation() + "'"
               + ",politicaloutlook = " + "'" + user.getPoliticaloutlook() + "'"
               + ",healstats = " + "'" + user.getHealstats() + "'"
               + ",height = " + "'" + user.getHeight() + "'"
               + ",fingerprint = " + "'" + url + "'"
               + ",my_picture = " + "'" + user.getMyPicture() + "'"
               + ",address = " + "'" + user.getAddress() + "'"
               + ",registered = " + "'" + user.getRegistered() + "'"
               + ",rtime = " + "'" + rtime + "'"
               + ",dispatch = " + "'" + user.getDispatch() + "'"
               + ",securitynumber = " + "'" + user.getSecuritynumber() + "'"
               + ",hold = " + "'" + user.getHold() + "'"
               + ",jurisdiction = " + "'" + user.getJurisdiction() + "'"
               + ",reason_for_leav = " + "'" + user.getReasonForLeav() + "'"
               + ",guncode = " + "'" + user.getGuncode() + "'"
               + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'"
               + " " + "where id = " + "'" + user.getId() + "'";
         //FtpUtil.sqlFileUpload(s1);
         myAsyncService.FTP(s1);
      }
      if (!states) {
         return R.data(201,null,"保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!");
      }
      return R.data(200,null,"修改成功!");
   }
   /**
    * 修改保安员信息
    */
   @PostMapping("/updateSecurityInfo")
   public R updateSecurityInfo(@RequestBody User user) throws Exception {
      User user1 = userService.getById(user.getId());
      user.setId(user1.getId());
      user.setUpdateTime(new Date());
      user.setPassword(user1.getPassword());
      //创建更新的字符串
      StringBuilder builder = new StringBuilder();
      builder.append("update blade-user set update_time = "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()));
      //姓名
      if (null != user.getRealName() && !user.getRealName().equals("")) {
         builder.append(",set real_name = "+user.getRealName());
      }
      int state = 1;
      //身份证号码
      if (null != user.getCardid() && !user.getCardid().equals("")) {
         //身份证号校验
         //去除所有空格
         String cardid = user.getCardid().replaceAll(" ", "");
         //校验
         boolean b = IdCardNoUtil.checkIdCardNo(cardid);
         if(b){
            user.setCardid(cardid);
            //账号,密码也修改
            user.setAccount(user1.getRealName().substring(0,1)+cardid.substring(cardid.length()-4));
            //获取默认密码配置
            user.setPassword(user.getCardid().substring(user.getCardid().length() - 6));
            //加密
            if (Func.isNotEmpty(user.getPassword())) {
               user.setPassword(DigestUtil.encrypt(user.getPassword()));
            }
            state = 2;
            builder.append(",set account = "+user.getAccount()+",set cardid = "+user.getCardid()+",set password = "+user.getPassword());
         }else {
            throw new ServiceException("导入失败!身份证号码[ "+user.getCardid()+" ]不正确,请核对!");
         }
      }
      //手机号
      if (null != user.getPhone() && !user.getPhone().equals("")) {
         builder.append(",set phone = "+user.getPhone());
      }
      //指纹url 处理
      String url = "";
      if (null != user.getFingerprint() && !user.getFingerprint().equals("")) {
         if (user.getFingerprint().length() > 100) {
            //指纹图片上传并返回url
            String s = uploadBase64String(user);
            String[] split = s.split(",");
            user.setFingerprint(split[0]);
            //内网指纹图片url
            url = split[1];
            builder.append(",set fingerprint = "+url);
         }
      }
      //头像
      if (null != user.getAvatar() && !user.getAvatar().equals("")) {
         String avatar  = FtpConfig.ip +"/"+ user.getAvatar().substring(26);
         System.out.println("头像上传 url = " + avatar);
         builder.append(",set fingerprint = "+avatar);
      }
      //名族
      if (null != user.getNation() && !user.getNation().equals("")) {
         builder.append(",set nation = "+user.getNation());
      }
      //学历
      if (null != user.getEducation() && !user.getEducation().equals("")) {
         builder.append(",set education = "+user.getEducation());
      }
      //政治面貌
      if (null != user.getPoliticaloutlook() && !user.getPoliticaloutlook().equals("")) {
         builder.append(",set politicaloutlook = "+user.getPoliticaloutlook());
      }
      //健康状态
      if (null != user.getHealstats() && !user.getHealstats().equals("")) {
         builder.append(",set healstats = "+user.getHealstats());
      }
      //身高
      if (null != user.getHeight() && !user.getHeight().equals("")) {
         builder.append(",set height = "+user.getHeight());
      }
      //联系地址
      if (null != user.getAddress() && !user.getAddress().equals("")) {
         builder.append(",set address = "+user.getAddress());
      }
      //身份证地址
      if (null != user.getRegistered() && !user.getRegistered().equals("")) {
         builder.append(",set registered = "+user.getRegistered());
      }
      //修改
//      boolean status = userService.updateById(user);
      boolean status = userService.update(user, Wrappers.<User>update().lambda().in(User::getId,user.getId()));
      if (status) {
         if (state == 2) {
            UserDTO userDTO = new UserDTO();
            userDTO.setAccount(user.getAccount());
            userDTO.setCardid(user.getCardid());
            userDTO.setOldCardid(user1.getCardid());
            userDTO.setPassword(user.getPassword());
            userDTO.setRealName(user.getRealName());
            userDTO.setPhone(user.getPhone());
            userDTO.setSex(user.getSex());
            userDTO.setAvatar(user.getAvatar());
            //推送qfqk
            myAsyncService.updateUserByAccount(userDTO);
         } else {
            myAsyncService.updateUserByQfqk(user);
         }
      }
      //拼接最终的sql
      String sql = builder.append(" where id = " + user.getId()).toString();
      myAsyncService.FTP(sql);
      //返回
      return R.data(200,null,"修改成功!");
   }
   /**
    * 账号修改
    * @param user
    * @return
    */
   @PostMapping("/update_account")
   public R updataAccount(@RequestBody User user){
      boolean status = false;
      //校验账户是否重复
      User user1 = new User();
      user1.setIsDeleted(0);
      user1.setStatus(1);
      user1.setAccount(user.getAccount());
      List<User> list = userService.list(new QueryWrapper<>(user1));
      if (list.size()>0){
         throw new ServiceException("账号:["+user.getAccount()+"]已存在!");
      }
      //如果不重复,则进行修改操作
      //更新用户账户信息
      status = userService.update(user, Wrappers.<User>update().lambda().in(User::getId,user.getId()));
//      status = userService.updateById(user);
      if (status){
         System.out.println("user = " + user);
         User user2 = userService.getById(user.getId());
         UserDTO userDTO = new UserDTO();
         userDTO.setAccount(user.getAccount());
         userDTO.setPassword(user2.getPassword());
         userDTO.setSecurityId(user2.getId().toString());
         userDTO.setRealName(user1.getRealName());
         userDTO.setPhone(user2.getPhone());
         userDTO.setCardid(user2.getCardid());
         userDTO.setSex(user1.getSex());
         //异步修改群防群控
         myAsyncService.updateUserByAccount(userDTO);
      }
      //返回
      return R.status(status);
   }
   /**
    * 修改
    */
   @PostMapping("/updateUserInfo")
   public R updateUserInfo(@Valid @RequestBody UserVO user) throws Exception {
      String url = null;
      if (null != user.getFingerprint() && !user.getFingerprint().equals("")) {
         if (user.getFingerprint().length() > 100) {
            //指纹图片上传并返回url
            String s = uploadBase64String(user);
            String[] split = s.split(",");
            user.setFingerprint(split[0]);
            //内网指纹图片url
            url = split[1];
         }
      }
      user.setUpdateTime(new Date());
      //更新
      userService.updateById(user);
      //生成签到记录
      if (null != user.getCandidateNo() && !user.getCandidateNo().equals("")) {
         //查询签到记录,如果已有,则更新,没有就新增
         SignInRecords signInRecords = new SignInRecords();
         signInRecords.setCandidateNo(user.getCandidateNo());
         SignInRecords inRecordsServiceOne = signInRecordsService.getOne(Condition.getQueryWrapper(signInRecords));
         //如果为null
         if (null == inRecordsServiceOne) {
            //查询报名信息
            TrainingRegistration trainingRegistration = new TrainingRegistration();
            trainingRegistration.setCandidateNo(user.getCandidateNo());
            TrainingRegistration one = trainingRegistrationService.getOne(Condition.getQueryWrapper(trainingRegistration));
            //新增,数据封装
            SignInRecords sign = new SignInRecords();
            sign.setCreateTime(new Date());
            sign.setUpdateTime(new Date());
            sign.setCandidateNo(user.getCandidateNo());
            sign.setUserId(user.getId());
            sign.setApplyId(one.getId());
            sign.setExamId(Long.parseLong(one.getTrainExamId()));
            //新增
            signInRecordsService.save(sign);
         } else {
            //更新
            inRecordsServiceOne.setUpdateTime(new Date());
            signInRecordsService.updateById(inRecordsServiceOne);
         }
      }
      //内网同步
      String s1 =
         "update blade_user set account = " + "'" + user.getCardid() + "'"
            + ",real_name = " + "'" + user.getRealName() + "'"
            + ",avatar = " + "'" + user.getAvatar() + "'"
            + ",sex = " + "'" + user.getSex() + "'"
            + ",cardid = " + "'" + user.getCardid() + "'"
            + ",nation = " + "'" + user.getNation() + "'"
            + ",fingerprint = " + "'" + url + "'"
            + ",my_picture = " + "'" + user.getMyPicture() + "'"
            + ",address = " + "'" + user.getAddress() + "'"
            + ",registered = " + "'" + user.getRegistered() + "'"
            + ",securitynumber = " + "'" + user.getSecuritynumber() + "'"
            + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'"
            + ",hold = " + "'" + user.getHold() + "'"
            + ",cell = " + "'" + user.getCell() + "'"
            + " " + "where id = " + "'" + user.getId() + "'";
      //FtpUtil.sqlFileUpload(s1);
      myAsyncService.FTP(s1);
      return R.success("修改成功");
   }
   /**
    * 指纹图片上传
    *
    * @return
    * @throws Exception
    */
   private String uploadBase64String(User user) throws Exception {
      //图片上传
      BASE64Decoder decoder = new BASE64Decoder();
      // 解密
      byte[] b = decoder.decodeBuffer(user.getFingerprint());
      // 处理数据
      for (int i = 0; i < b.length; ++i) {
         if (b[i] < 0) {
            b[i] += 256;
         }
      }
      //填写你文件上传的地址以及相应信息
      String url = "http://61.131.136.25:2081";
      String access = "zhbaadmin";
      String secret = "zhbapassword";
      String bucket = "zhba";
      MinioClient minioClient =
         MinioClient.builder()
            .endpoint(url)
            .credentials(access, secret)
            .build();
      // 检查存储桶是否已经存在
      boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build());
      if (!isExist) {
         // 创建一个名为zip的存储桶,用于zip文件。
         minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());
         minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucket).build());
      }
      String newName = "upload/picture/f" + UUID.randomUUID().toString().replaceAll("-", "") + ".jpg";
      InputStream in = new ByteArrayInputStream(b);
      String[] split = newName.split("/");
      //创建头部信息
      Map<String, String> headers = new HashMap<>(1 << 2);
      //添加自定义内容类型
      headers.put("Content-Type", "application/octet-stream");
      //上传
      minioClient.putObject(
         PutObjectArgs.builder().bucket(bucket).object(newName).stream(
            in, in.available(), -1)
            .headers(headers)
            .build());
      InputStream inputStream = new ByteArrayInputStream(b);
      FtpUtil.uploadFile(FtpConfig.ftpHost, ftpPort, FtpConfig.ftpUserName, ftpPassword, ftpPath, "/", split[2], inputStream);
      in.close();
      //外围url
      String urls = "http://61.131.136.25:2081/zhba/" + newName;
      //内网
      String inUrl = FtpConfig.ip + "/zhba/" + newName;
      //返回
      return urls + "," + inUrl;
   }
   /**
    * 修改发证时间
    */
   @PostMapping("/updatePaperTime")
   public R updatePaperTime(@RequestBody User user) {
      user.setPaperTime(new Date());
      user.setUpdateTime(new Date());
      userService.updateById(user);
      String paperTime = null;
      //发证日期处理
      if (user.getPaperTime() == null) {
         paperTime = null;
      } else {
         paperTime = new SimpleDateFormat("yyyy-MM-dd").format(user.getPaperTime());
      }
      //更新制证记录制证状态
      AccreditationRecords accreditationRecords = new AccreditationRecords();
      accreditationRecords.setUserId(user.getId());
      //审核通过的
      accreditationRecords.setAuditStatus(2);
      //未制证的记录
      accreditationRecords.setStatus(1);
      //查询
      List<AccreditationRecords> list = accreditationRecordsService.list(Condition.getQueryWrapper(accreditationRecords));
      if (list.size() > 0) {
         //排序
         List<AccreditationRecords> collect = list.stream().sorted(Comparator.comparing(AccreditationRecords::getId).reversed()).collect(Collectors.toList());
         //取出第一个
         AccreditationRecords accreditationRecords1 = collect.get(0);
         //修改为已制证状态
         accreditationRecords1.setStatus(2);
         //记录打印时间
         accreditationRecords1.setPaperTime(new Date());
         //更新
         accreditationRecordsService.updateById(accreditationRecords1);
         //同步
         String s1 =
            "update blade_user set paper_time = " + "'" + paperTime + "'"
               + ",user_type = " + "'" + user.getUserType() + "'"
               + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'"
               + " " + "where id = " + "'" + user.getId() + "';" +
               "update sys_accreditation_records set status = " + "'" + accreditationRecords1.getStatus() + "'" +
               " " + "where id = " + "'" + accreditationRecords1.getId() + "'";
         //FtpUtil.sqlFileUpload(s1);
         myAsyncService.FTP(s1);
         //返回
         return R.success("修改成功");
      }
      String s1 =
         "update blade_user set paper_time = " + "'" + paperTime + "'"
            + ",user_type = " + "'" + user.getUserType() + "'"
            + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'"
            + " " + "where id = " + "'" + user.getId() + "'";
      //FtpUtil.sqlFileUpload(s1);
      myAsyncService.FTP(s1);
      return R.success("修改成功");
   }
   /**
@@ -222,6 +1082,20 @@
   //@PreAuth(RoleConstant.HAS_ROLE_ADMIN)
   public R remove(@RequestParam String ids) {
      CacheUtil.clear(USER_CACHE);
      List<String> list = Arrays.asList(ids.split(","));
      list.forEach(id -> {
         User user = userService.getById(id);
         User user1 = new User();
         user1.setId(user.getId());
//         user1.setCardid(user.getCardid());
         user1.setIsDeleted(1);
         //qfqk 同步
         myAsyncService.deleteUserByQfqk(user1);
         //内网同步
         String s1 = "update blade_user set is_deleted = 1 where id = " + "'" + id + "'";
         //FtpUtil.sqlFileUpload(s1);
         myAsyncService.FTP(s1);
      });
      return R.status(userService.removeUser(ids));
   }
@@ -292,9 +1166,22 @@
   @PostMapping("import-user")
   @ApiOperationSupport(order = 12)
   @ApiOperation(value = "导入用户", notes = "传入excel")
   public R importUser(MultipartFile file, Integer isCovered) {
      UserImporter userImporter = new UserImporter(userService, false);
   public R importUser(MultipartFile file, Integer isCovered, String deptId) {
      UserImporter userImporter = new UserImporter(userService, false, deptId);
      ExcelUtil.save(file, userImporter, UserExcel.class);
      return R.success("操作成功");
   }
   /**
    * 保安员证二维码批量生成
    */
   @PostMapping("import-qrCode")
   @ApiOperationSupport(order = 12)
   @ApiOperation(value = "导入用户", notes = "传入excel")
   public R importQrCode(@RequestParam("file") MultipartFile file, Integer isCovered, String deptId) {
      QrCodeImporter qrCodeImporter = new QrCodeImporter(userService, false, deptId);
      ExcelUtil.save(file, qrCodeImporter, QrCodeExcel.class);
      return R.success("操作成功");
   }
@@ -305,9 +1192,33 @@
   @PostMapping("import-security")
   @ApiOperationSupport(order = 12)
   @ApiOperation(value = "导入用户", notes = "传入excel")
   public R importSecurity(MultipartFile file, Integer isCovered) {
      SecurityImporter securityImporter = new SecurityImporter(userService, false);
      ExcelUtil.save(file, securityImporter, UserExcel.class);
   public R importSecurity(MultipartFile file, Integer isCovered, String deptId) {
      SecurityImporter securityImporter = new SecurityImporter(userService, false, deptId);
      ExcelUtil.save(file, securityImporter, SecurityExcel.class);
      return R.success("操作成功");
   }
   /**
    * 导入保安员(test)
    */
   @PostMapping("import-security-test")
   @ApiOperationSupport(order = 12)
   @ApiOperation(value = "导入用户", notes = "传入excel")
   public R importSecurityTest(MultipartFile file, Integer isCovered, String deptId) {
      SecurityImporterTest securityImporter = new SecurityImporterTest(userService);
      ExcelUtil.save(file, securityImporter, SecurityExcel.class);
      return R.success("操作成功");
   }
   /**
    * 导入持枪保安员
    */
   @PostMapping("import-securityYy")
   @ApiOperationSupport(order = 12)
   @ApiOperation(value = "导入用户", notes = "传入excel")
   public R importSecurityYy(MultipartFile file, Integer isCovered, String deptId) {
      SecurityYyImporter securityYyImporter = new SecurityYyImporter(userService, false, deptId);
      ExcelUtil.save(file, securityYyImporter, SecurityYyExcel.class);
      return R.success("操作成功");
   }
@@ -327,6 +1238,7 @@
//      ExcelUtil.export(response, "用户数据" + DateUtil.time(), "用户数据表", list, UserExcel.class);
//   }
   /**
    * 导出模板
    */
@@ -339,14 +1251,104 @@
   }
   /**
    * 导出持枪保安模板
    */
   @GetMapping("export-templateYy")
   @ApiOperationSupport(order = 14)
   @ApiOperation(value = "导出模板")
   public void exportUserYy(HttpServletResponse response) {
      List<SecurityYyExcel> list = new ArrayList<>();
      ExcelUtil.export(response, "持枪保安员数据模板", "持枪保安员数据表", list, SecurityYyExcel.class);
   }
   /**
    * 保安员导出模板
    */
   @GetMapping("export-template-security")
   @ApiOperationSupport(order = 14)
   @ApiOperation(value = "导出模板")
   public void exportSecurity(HttpServletResponse response) {
      List<UserExcel> list = new ArrayList<>();
      ExcelUtil.export(response, "保安员导入数据模板", "保安员数据表", list, UserExcel.class);
   public void exportSecurity(HttpServletResponse response) throws IOException {
      List<SecurityExcel> list = new ArrayList<>();
      SecurityExcel securityExcel = new SecurityExcel();
      securityExcel.setDeptId("xxx保安公司");
      securityExcel.setRealName("张三");
      securityExcel.setPhone("12345678901");
      securityExcel.setSex("男");
      securityExcel.setCardid("360XXX19XXXXXX****");
      securityExcel.setNation("汉");
      securityExcel.setRegistered("江西省南昌市******");
//      securityExcel.setHold("是");
      securityExcel.setSecuritynumber("赣洪202100001");
      list.add(securityExcel);
      SecurityExcel securityExcel1 = new SecurityExcel();
      securityExcel1.setDeptId("xxx保安公司");
      securityExcel1.setRealName("李四");
      securityExcel1.setPhone("12345678901");
      securityExcel1.setSex("女");
      securityExcel1.setCardid("360XXX19XXXXXX****");
      securityExcel1.setNation("汉");
      securityExcel1.setRegistered("江西省南昌市******");
//      securityExcel1.setHold("否");
      securityExcel1.setSecuritynumber("");
      list.add(securityExcel1);
      String fileName = null;
      try {
         response.setContentType("application/vnd.ms-excel");
         response.setCharacterEncoding(org.apache.commons.codec.Charsets.UTF_8.name());
         fileName = URLEncoder.encode("保安员导入数据模板" + DateUtil.time(), Charsets.UTF_8.name());
         response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
         //修改单元格格式为文本格式
         EasyExcel.write(response.getOutputStream(), SecurityExcel.class).sheet("保安员数据表").registerWriteHandler(new RowWriteHandler()).doWrite(list);
      } catch (Throwable var6) {
         throw var6;
      }
//      ExcelUtil.export(response, "保安员导入数据模板", "保安员数据表", list, UserExcel.class);
   }
   /**
    * 持枪保安员导出模板
    */
   @GetMapping("export-template-securityYy")
   @ApiOperationSupport(order = 14)
   @ApiOperation(value = "导出模板")
   public void exportSecurityYy(HttpServletResponse response) throws IOException {
      List<SecurityYyExcel> list = new ArrayList<>();
      SecurityYyExcel securityExcel = new SecurityYyExcel();
      securityExcel.setDeptId("xxx保安公司");
      securityExcel.setRealName("张三");
      securityExcel.setPhone("12345678901");
      securityExcel.setSex("男");
      securityExcel.setCardid("360XXX19XXXXXX****");
      securityExcel.setNation("汉");
      securityExcel.setRegistered("江西省南昌市******");
//      securityExcel.setHold("是");
      securityExcel.setSecuritynumber("赣洪202100001");
      list.add(securityExcel);
      SecurityYyExcel securityExcel1 = new SecurityYyExcel();
      securityExcel1.setDeptId("xxx保安公司");
      securityExcel1.setRealName("李四");
      securityExcel1.setPhone("12345678901");
      securityExcel1.setSex("女");
      securityExcel1.setCardid("360XXX19XXXXXX****");
      securityExcel1.setNation("汉");
      securityExcel1.setRegistered("江西省南昌市******");
//      securityExcel1.setHold("否");
      securityExcel1.setSecuritynumber("");
      list.add(securityExcel1);
      String fileName = null;
      try {
         response.setContentType("application/vnd.ms-excel");
         response.setCharacterEncoding(org.apache.commons.codec.Charsets.UTF_8.name());
         fileName = URLEncoder.encode("保安员导入数据模板" + DateUtil.time(), Charsets.UTF_8.name());
         response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
         //修改单元格格式为文本格式
         EasyExcel.write(response.getOutputStream(), SecurityYyExcel.class).sheet("保安员数据表").registerWriteHandler(new RowWriteHandler()).doWrite(list);
      } catch (Throwable var6) {
         throw var6;
      }
//      ExcelUtil.export(response, "保安员导入数据模板", "保安员数据表", list, UserExcel.class);
   }
@@ -422,7 +1424,7 @@
    */
   @GetMapping("/page-security-units")
   public R pageSecurityUnits(@ApiIgnore User user, Query query) {
      List<User> pages = userService.selectUserPageSecurityUnit(Condition.getPage(query),user);
      List<User> pages = userService.selectUserPageSecurityUnit(Condition.getPage(query), user);
      return R.data(pages);
   }
@@ -441,6 +1443,16 @@
   @GetMapping("/security-apply-tree")
   public R<List<TreeNode>> securityApplyTree(UserVO user) {
      List<TreeNode> tree = userService.getSecurityApplyTree(user);
      System.out.println("tree = " + tree);
      return R.data(tree);
   }
   /**
    * 保安员列表树,帅选无保安证,下拉tree
    */
   @GetMapping("/security-dispatcher-tree")
   public R<List<TreeNode>> getSecurityDispatcherTree(UserVO user) {
      List<TreeNode> tree = userService.getSecurityDispatcherTree(user);
      return R.data(tree);
   }
@@ -452,13 +1464,16 @@
      List<Map<Object, Object>> list = userService.selectInr(deptid);
      return R.data(list);
   }
   @GetMapping("/zc")
   public R zc(String username,String password) {
   public R zc(String username, String password, String phone) {
      User user = new User();
      user.setTenantId("000000");
      user.setAccount(username);
      user.setPassword(DigestUtil.encrypt(password));
      user.setDeptId("1426355050199945218");
      user.setRoleId("1428177141018771458");
      user.setPhone(phone);
      userService.saveOrUpdate(user);
      return R.success("注册成功");
   }
@@ -467,53 +1482,612 @@
    * 保安员新增
    */
   @PostMapping("/securitySave")
   public R securitySave(@Valid @RequestBody Map<String,Object> userMap){
   @Transactional(rollbackFor = Exception.class)
   public R securitySave(@Valid @RequestBody Map<String, Object> userMap) throws Exception {
      //获取user
      User user = JSON.parseObject(JSON.toJSONString(userMap.get("user")),User.class);
      //判断是否为空
      if (null!=user.getHold()){
         //持证
         if (user.getHold().equals("1")){
            //分配保安角色
            Role role = new Role();
            role.setRoleAlias("保安");
            Role oneRole = roleService.getOne(Condition.getQueryWrapper(role));
            user.setRoleId(oneRole.getId().toString());
         }
         //未持证
         if (user.getHold().equals("2")){
            //分配未持证保安角色
            Role role = new Role();
            role.setRoleAlias("未持证保安");
            Role oneRole = roleService.getOne(Condition.getQueryWrapper(role));
            user.setRoleId(oneRole.getId().toString());
      User user = JSON.parseObject(JSON.toJSONString(userMap.get("user")), User.class);
      //分配保安角色
      Role role = new Role();
      role.setRoleAlias("保安");
      Role oneRole = roleService.getOne(Condition.getQueryWrapper(role));
      user.setRoleId(oneRole.getId().toString());
      user.setDispatch("1");
      user.setExaminationType("0");
      user.setAccount(user.getCardid());
      user.setStatus(1);
      User user1 = new User();
      user1.setIsDeleted(0);
      user1.setStatus(1);
      user1.setAccount(user.getCardid());
      List<User> list = userService.list(Condition.getQueryWrapper(user1));
      if (list.size() > 0 && Func.isEmpty(user.getId())) {
         if (null != user.getCell() && !user.getCell().equals("")) {
            if (user.getCell().equals("2")) {
               list.forEach(user2 -> {
                  //判断是否在本单位,如果是本单位,则不能再次新增
                  if (!user2.getDeptId().equals(user.getDeptId())) {
                     user2.setStatus(2);
                     //先将原有人员离职  cell 1:手动录入  2:自动录入
                     user2.setUpdateTime(new Date());
                     userService.updateById(user2);
                     //内网同步
                     String s1 = "update blade_user set status = " + user2.getStatus() +
                        ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'" +
                        " where id = " + "'" + user2.getId() + "'";
                     //FtpUtil.sqlFileUpload(s1);
                     myAsyncService.FTP(s1);
                     //人员离职后修改派遣记录,修改从业记录
                     updateUserDispatcherExp(user2);
                  } else {
                     throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
                  }
               });
            } else {
               throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
            }
         } else {
            throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
         }
      }
      //判断是否持证
      boolean state = false;
      if (user.getHold().equals("1")){
         //持证,校验保安证编号是否合法
         SecurityPaper securityPaper = new SecurityPaper();
         securityPaper.setIdCardNo(user.getCardid());
         List<SecurityPaper> securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper));
         if (securityPaperList.size()>0){
            //遍历
            for (SecurityPaper paper : securityPaperList) {
               if (paper.getNumber().equals(user.getSecuritynumber())){
                  state = true;
               }
            }
            if (!state){
               user.setHold("2");
               user.setSecuritynumber(null);
            }
         }else {
            user.setHold("2");
            user.setSecuritynumber(null);
         }
      }else {
         state = true;
      }
      String url = "";
      if (null != user.getFingerprint() && !user.getFingerprint().equals("")) {
         if (user.getFingerprint().length() > 100) {
            String s = uploadBase64String(user);
            String[] split = s.split(",");
            user.setFingerprint(split[0]);
            url = split[1];
         }
      }
      //密码加密
      if (Func.isNotEmpty(user.getPassword())) {
         user.setPassword(DigestUtil.encrypt(user.getPassword()));
      if (Func.isNotEmpty(user.getCardid())) {
//         user.setPassword(DigestUtil.encrypt(user.getPassword()));
         //取身份证号码后6位作为密码
         user.setPassword(DigestUtil.encrypt(user.getCardid().substring(user.getCardid().length() - 6)));
      }
      user.setCreateTime(new Date());
      user.setTenantId("000000");
      //用户新增
      boolean status = userService.save(user);
      //从业记录新增
      Experience experience = new Experience();
      String rtime;
      String paperTime;
      if (user.getRtime() == null) {
         rtime = null;
      } else {
         rtime = new SimpleDateFormat("yyyy-MM-dd").format(user.getRtime());
         experience.setEntrytime(user.getRtime());
      }
      Dept dept = iDeptService.getById(user.getDeptId());
      experience.setCardid(user.getCardid());
      experience.setSecurityid(user.getId().toString());
      experience.setCompanyname(dept.getDeptName());
      experience.setName(user.getRealName());
      experience.setPost("保安员");
      experienceService.save(experience);
      //头像
      if (null != user.getAvatar() && !user.getAvatar().equals("")) {
         user.setAvatar(FtpConfig.ip + user.getAvatar().substring(26));
      }
      //数据推送
      //1.群访群控数据推送(异步)
      if (status) {
         myAsyncService.qfqkUserSave(user);
         //2.内网数据推送
         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,rtime," +
            "securitynumber,hold,jurisdiction,examination_type,status,is_deleted,dispatch,guncode,create_time,cell) " +
            "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() + "'" +
            "," + "'" + url + "'" +
            "," + "'" + user.getEducation() + "'" +
            "," + "'" + user.getPoliticaloutlook() + "'" +
            "," + "'" + user.getHealstats() + "'" +
            "," + "'" + user.getHeight() + "'" +
            "," + "'" + user.getAddress() + "'" +
            "," + "'" + user.getRegistered() + "'" +
            "," + "'" + rtime + "'" +
            "," + "'" + user.getSecuritynumber() + "'" +
            "," + "'" + user.getHold() + "'" +
            "," + "'" + user.getJurisdiction() + "'" +
            "," + "'" + user.getExaminationType() + "'" +
            "," + "'" + user.getStatus() + "'" +
            "," + "'" + user.getIsDeleted() + "'" +
            "," + "'" + user.getDispatch() + "'" +
            "," + "'" + user.getGuncode() + "'" +
            "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateTime()) + "'" +
            "," + "'" + user.getCell() + "'" + ");" +
            "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() + "'"
            + ")";
         myAsyncService.FTP(s);
      }
      //获取从业记录
      List<Experience> experiences = (List<Experience>) userMap.get("userPractitionersInfo");
      if (experiences.size()>0){
         int count = 0;
         for (int i = 0; i < experiences.size(); i++) {
            Experience e = JSON.parseObject(JSON.toJSONString(experiences.get(i)), Experience.class);
            e.setSecurityid(user.getId().toString());
            experienceService.save(e);
            count++;
         }
         if (count < 1) {
            return R.status(false);
//      List<Experience> experiences = (List<Experience>) userMap.get("userPractitionersInfo");
//      if (experiences.size()>0){
//         int count = 0;
//         for (int i = 0; i < experiences.size(); i++) {
//            Experience e = JSON.parseObject(JSON.toJSONString(experiences.get(i)), Experience.class);
//            e.setSecurityid(user.getId().toString());
//            experienceService.save(e);
//            count++;
//         }
//         if (count < 1) {
//            return R.status(false);
//         }
//      }
      //判断是否持证是否为空
      if (!state) {
         return R.data(201, null, "保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!");
      }
      return R.data(200,null,"新增成功!");
   }
   /**
    * 保安员新增(外网不能存敏感数据)
    * @since 2022-04-26
    * @param userMap
    */
   @PostMapping("/securitySaves")
   @Transactional(rollbackFor = Exception.class)
   public R securitySaves(@Valid @RequestBody Map<String, Object> userMap) throws Exception {
      //获取user
      User user = JSON.parseObject(JSON.toJSONString(userMap.get("user")), User.class);
      //分配保安角色
      Role role = new Role();
      role.setRoleAlias("保安");
      Role oneRole = roleService.getOne(Condition.getQueryWrapper(role));
      user.setRoleId(oneRole.getId().toString());
      user.setDispatch("1");
      //待审查
      user.setExaminationType("2");
      String realName = user.getRealName();
      String cardid = user.getCardid();
//         user.setAccount(user.getRealName());
      user.setAccount(realName.substring(0,1)+cardid.substring(cardid.length()-4));
      user.setStatus(1);
      //密码加密
      if (Func.isNotEmpty(user.getCardid())) {
         //取身份证号码后6位作为密码
         user.setPassword(DigestUtil.encrypt(user.getCardid().substring(user.getCardid().length() - 6)));
      }
      user.setCreateTime(new Date());
      user.setTenantId("000000");
      //用户新增
//      boolean status = userService.save(user);
      User user1 = Objects.requireNonNull(BeanUtil.copy(user,User.class));
      //头像
      if (null != user.getAvatar() && !user.getAvatar().equals("")) {
         user1.setAvatar(FtpConfig.ip +"/"+ user.getAvatar().substring(26));
      }
      //指纹
      String url = "";
      if (null != user.getFingerprint() && !user.getFingerprint().equals("")) {
         if (user.getFingerprint().length() > 100) {
            String s = uploadBase64String(user);
            String[] split = s.split(",");
            user.setFingerprint(split[0]);
            url = split[1];
            user1.setFingerprint(url);
         }
      }
      //判断是否持证是否为空
      return R.status(status);
      //生成随机数
      String uuid = UUID.randomUUID().toString();
      //将 user 存入 redis
      redisTemplate.opsForValue().set(uuid,JSON.toJSONString(user));
      //user1 临时设置uuid 到 reason_for_leav 离职原因字段
      user1.setReasonForLeav(uuid);
      //数据推送
      Map<String, Object> map = new HashMap<>(1);
      map.put("user",user1);
      myAsyncService.FTPObject(map);
//      int count = 0;
//      int flag = 1;
//      Result result0 = new Result();
//      //调用ftp获取返回数据
//      while (true){
//         System.out.println("用户新增开始接收消息......................");
//         Thread.sleep(2000);
//         //调用ftp获取返回数据
//         result0 = Monitor.isFTPFileExist(uuid);
//         System.out.println("result0 ftp 返回结果 = " + result0);
//         //如果返回true,就退处
//         if (result0.getCode()==200){
//            break;
//         }else{
//            //计数
//            count++;
//            //如果超过60s 没有读取到,则退出
//            if (count == 20) {
//               break;
//            }
//         }
//      }
//
//      //将不能导入的保安员账号存起来
//      List<String> errorList = new ArrayList<>();
//      //保安员证编号不符的保安员信息存入集合
//      List<String> securityInvalidList = new ArrayList<>();
//      //导入状态,默认为true ,如果有一个出现问题则为 false
//      AtomicBoolean status = new AtomicBoolean(true);
//      AtomicBoolean securityInvalidStatus = new AtomicBoolean(true);
//      if (null!=result0){
//         Result result = result0.getData().get(0);
//         //用户数处理
//         User users = handlerUserInfo(uuid);
//         System.out.println("用户数据处理---------------");
//         System.out.println("用户数据 = " + users);
//         //判断结果
//         if (result.getCode()==200){
//            //新增
//            users.setId(result.getUserId());
//            users.setStatus(1);
//            //插入数据库
//            boolean save = userService.save(users);
//            if (save){
//               //异步同步到群防群控
//               myAsyncService.qfqkUserSave(users);
//            }
//         }else if (result.getCode()==201) {
//            //修改
//            users.setId(result.getUserId());
//            //先查询当前库是否有改用户?
//            User user2 = userService.getById(result.getUserId());
//            if (null!=user2) {
//               //数据修改
//               boolean b = userService.updateById(users);
//               if (b) {
//                  //异步同步到群防群控
//                  myAsyncService.updateUserByQfqk(users);
//               }
//            }else {
//               //新增
//               boolean save = userService.save(users);
//               if (save){
//                  //异步同步到群防群控
//                  myAsyncService.qfqkUserSave(users);
//               }
//            }
//         }else if (result.getCode()==203){
//            //保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请! 用户为新增
//            //新增
//            users.setId(result.getUserId());
//            //插入数据库
//            boolean save = userService.save(users);
//            if (save) {
//               //异步同步到群防群控
//               myAsyncService.qfqkUserSave(users);
//            }
//            securityInvalidStatus.set(false);
//            //保安证编号不匹配
//            securityInvalidList.add(user.getCardid());
//         }else if (result.getCode()==204){
//            //保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请! 内网用户已存在情况
//            users.setId(result.getUserId());
//            //先查询当前库是否有改用户?
//            User user2 = userService.getById(result.getUserId());
//            //判断
//            if (null!=user2) {
//               //修改
//               //数据修改
//               boolean b = userService.updateById(users);
//               if (b){
//                  //异步同步到群防群控
//                  myAsyncService.updateUserByQfqk(users);
//               }
//            }else {
//               //新增
//               boolean save = userService.save(users);
//               if (save){
//                  //异步同步到群防群控
//                  myAsyncService.qfqkUserSave(users);
//               }
//            }
//            securityInvalidStatus.set(false);
//            //保安证编号不匹配
//            securityInvalidList.add(user.getCardid());
//         }else {
//            status.set(false);
//            //已在其他单位存在
//            errorList.add(user.getCardid());
//         }
//      }
      //如果所有数据导入有一个异常
//      StringBuilder errorBuilder = new StringBuilder();
//      if (!status.get()){
//         String errorAccount = StringUtils.join(errorList, "\\\n");
//         errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!");
//      }
//      //抛出异常
//      if (errorBuilder.length()>0){
//         throw new org.springblade.core.log.exception.ServiceException(errorBuilder.toString());
//      }
//
//      if (!securityInvalidStatus.get()){
////         return R.data(201, null, "保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!");
//         return R.data(201, null, "保安证编号不匹配,请核实!");
//      }
      return R.data(200, null, "新增成功!");
   }
   /**
    * 修改派遣记录,修改从业记录
    *
    * @param user
    */
   private void updateUserDispatcherExp(User user) {
      //修改派遣状态
      user.setDispatch("1");
      //同时将派遣记录中的派遣状态修改
      //查询派遣记录(还在派遣中的)
      Dispatcher dispatcher = new Dispatcher();
      dispatcher.setUserIds(user.getId().toString());
      dispatcher.setStatus(0);
      List<Dispatcher> dispatcherList = dispatcherService.list(Condition.getQueryWrapper(dispatcher));
      if (dispatcherList.size() > 0) {
         dispatcherList.forEach(dispatcher1 -> {
            dispatcher1.setStatus(1);
            dispatcher1.setUpdateTime(new Date());
            String s1 =
               "update sys_dispatcher set status = " + "'" + dispatcher1.getStatus() + "'"
                  + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(dispatcher1.getUpdateTime()) + "'"
                  + " " + "where id = " + "'" + dispatcher1.getId() + "'";
            //FtpUtil.sqlFileUpload(s1);
            myAsyncService.FTP(s1);
         });
      }
      //查询当前用户是否有从业记录,没有的话新增,有就更新
      //根据公司名查询单位
      Dept dept = iDeptService.getById(user.getDeptId());
      Experience experience = new Experience();
      experience.setCompanyname(dept.getDeptName());
      //按id降序
      List<Experience> list = experienceService.list(Condition.getQueryWrapper(experience).orderByDesc("id"));
      if (list.size() > 0) {
         //如果有多条取第一条更新
         Experience experience1 = list.get(0);
         //设置离职时间
         experience1.setDeparturetime(new Date());
         //更新从业记录信息
         experienceService.updateById(experience1);
         //数据同步
         String s1 =
            "update sys_experience set departureTime = " + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience1.getDeparturetime()) + "'"
               + " " + "where id = " + "'" + experience1.getId() + "'";
         //FtpUtil.sqlFileUpload(s1);
         myAsyncService.FTP(s1);
      } else {
         //新增
         if (null != user.getRtime()) {
            experience.setEntrytime(user.getRtime());
         } else {
            experience.setEntrytime(new Date());
         }
         experience.setDeparturetime(new Date());
         experience.setName(user.getRealName());
         if (null != user.getReasonForLeav() && !user.getReasonForLeav().equals("")) {
            experience.setLeaving(user.getReasonForLeav());
         }
         experience.setCardid(user.getCardid());
         experience.setSecurityid(user.getId().toString());
         //新增
         experienceService.save(experience);
         //内网同步
         String s = "insert into sys_experience(id,name,entryTime,departureTime,leaving,cardId,companyname,securityId) " +
            "values(" + "'" + experience.getId() + "'" + "," +
            "'" + experience.getName() + "'" + "," +
            "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getEntrytime()) + "'" +
            "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getDeparturetime()) + "'" +
            "," + "'" + experience.getLeaving() + "'" +
            "," + "'" + experience.getCardid() + "'" +
            "," + "'" + experience.getCompanyname() + "'" +
            "," + "'" + experience.getSecurityid() + "'"
            + ")";
         myAsyncService.FTP(s);
      }
   }
   /**
    * 保安员信息
    *
    * @param user
    * @return
    */
   @GetMapping("/getUserDetails")
   public R getUserDetails(User user) {
      return R.data(userService.getUserDetails(user));
   }
   /**
    * @param type         1:保安 2:公安
    * @param deptid
    * @param jurisdiction
    * @return
    */
   @GetMapping("/seleL")
   public R seleL(String type, String deptid, String jurisdiction, Long userId) {
      List<Map<String, Object>> list = userService.seleL(type, deptid, jurisdiction, userId);
      return R.data(list);
   }
   /**
    * 用户详情
    *
    * @param user
    * @return
    */
   @GetMapping("/details")
   public R details(User user) {
      User user1 = userService.getById(user.getId());
      if (null != user1.getFingerprint() && !user1.getFingerprint().equals("")) {
         //url 转base64
         String base64Url = ImageUtils.imageUrlToBase64(user1.getFingerprint());
         user1.setFingerprint(base64Url);
      }
      return R.data(user1);
   }
   /**
    * 保安员导出
    *
    * @param response
    * @param user     查询条件
    */
   @GetMapping("export-security-info")
   public void exportSecurityInfo(HttpServletResponse response, UserVO user) throws IOException {
      List<ExportSecurityExcel> list = userService.exportSecurityInfo(user);
      String fileName = null;
      try {
         response.setContentType("application/vnd.ms-excel");
         response.setCharacterEncoding(org.apache.commons.codec.Charsets.UTF_8.name());
         fileName = URLEncoder.encode("保安员数据导出" + DateUtil.time(), Charsets.UTF_8.name());
         response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
         //修改单元格格式为文本格式
         EasyExcel.write(response.getOutputStream(), ExportSecurityExcel.class).sheet("保安员数据表").registerWriteHandler(new RowWriteHandler()).doWrite(list);
      } catch (Throwable var6) {
         throw var6;
      }
//      ExcelUtil.export(response, "保安员导入数据模板", "保安员数据表", list, UserExcel.class);
   }
   /**
    * 保安员账号校验
    *
    * @param user
    * @return
    */
   @GetMapping("/checkAccount")
   public void checkAccount(User user) {
      //根据身份证号查询用户
      User user1 = new User();
      user1.setAccount(user.getCardid());
      user1.setIsDeleted(0);
      user1.setStatus(1);
      User user2 = userService.getOne(Condition.getQueryWrapper(user1));
      if (null != user2) {
         //判断是单位否一致
         if (null != user.getDeptId() && !user.getDeptId().equals("")) {
            if (!user2.getDeptId().equals(user.getDeptId())) {
               throw new ServiceException(StringUtil.format("当前用户 [{}] 已在其他单位录入!", user.getCardid()));
            } else {
               throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getCardid()));
            }
         } else {
            //没有传 deptId 的情况
            throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getCardid()));
         }
      }
   }
   /**
    * 年龄分布查询
    *
    * @param user
    * @return
    */
   @PostMapping("/getAgeStatistics")
   public R getAgeStatistics(UserVO user) {
      return R.data(userService.getAgeStatistics(user));
   }
   /**
    * 查询登录密码还是 123456 的单位信息
    *
    * @return
    */
   @GetMapping("/getNotUpdatePwdInfo")
   public R getNotUpdatePwdInfo() {
      return R.data(userService.getNotUpdatePwdInfo());
   }
   /**
    * 用户手动离职(用户数据未同步成功的)
    * @param user
    * @return
    */
   @GetMapping("/leave")
   public void leave(User user){
      user.setStatus(2);
      String s1 =
         "update blade_user set status = " + "'" + user.getStatus() + "'"
            + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "'"
            + " " + "where cardid = " + "'" + user.getCardid() + "'";
      myAsyncService.FTP(s1);
   }
}