智慧保安后台管理-外网
Administrator
2022-04-28 3255066de97dc0ca7086b91c214e7ae94c0af859
保安员批量导入修改
8 files modified
1038 ■■■■ changed files
src/main/java/org/springblade/modules/FTP/DataHandler.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/FTP/FtpUtil.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/FTP/Monitor.java 75 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/FTP/Result.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/mapper/UserMapper.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/mapper/UserMapper.xml 30 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/MyAsyncService.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java 871 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/FTP/DataHandler.java
@@ -31,6 +31,8 @@
    @Autowired
    private RedisTemplate redisTemplate;
    /**
     * 初始化
     */
@@ -42,6 +44,25 @@
    }
    /**
     * 读取数据
     * @param json
     * @param uuid
     * @return
     */
    public static Result handlerList(String json, String uuid) {
        Map map = JSON.parseObject(json, Map.class);
        //获取结果
        Object o = map.get(uuid);
        if (null== o || o.equals("")){
            return new Result(400,null,"uuid 不匹配",null);
        }else {
            //转换
            List<Result> results = JSON.parseArray(o.toString(), Result.class);
            return new Result(200,"成功响应数据",results);
        }
    }
    /**
     * 数据处理
     * @param json json 字符串
     * @param uuid 随机字符串
src/main/java/org/springblade/modules/FTP/FtpUtil.java
@@ -9,6 +9,8 @@
import java.io.*;
import java.net.SocketException;
import java.util.Date;
import java.util.Map;
import static org.springblade.common.config.FtpConfig.*;
/**
@@ -321,4 +323,17 @@
        MysqlCenlint.deletess("o"+response1+".json");
    }
    public static void objectFileUploadList(Map<String, Object> map) {
        String json1 = JSON.toJSONString(map);
        String response1 = String.valueOf((new Date()).getTime());
        OutJson.createJsonFile(json1, localPath, "ol"+response1);
        FileInputStream in1 = null;
        try {
            in1 = new FileInputStream(new File(localPath + "ol"+response1+".json"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        FtpUtil.uploadFile(ftpHost, ftpPort, ftpUserName, ftpPassword, ftpPath, "/",  "ol"+response1+".json", in1);
        MysqlCenlint.deletess("ol"+response1+".json");
    }
}
src/main/java/org/springblade/modules/FTP/Monitor.java
@@ -10,6 +10,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import static org.springblade.common.config.FtpConfig.*;
@@ -107,6 +108,80 @@
    }
    /**
     * 读取文件(对象)
     * @param uuid 随机数
     * @return
     */
    public static Result getFtpDataByUuidList(String uuid) {
        //创建 ftp 对象
        FTPClient ftp = new FTPClient();
        boolean flag = false;
        try {
            //连接
            ftp.connect(ftpHost, ftpPort);
            // 登陆
            ftp.login(ftpUserName, ftpPassword);
            // 检验登陆操作的返回码是否正确
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                ftp.disconnect();
                return new Result(400,null,"ftp 连接失败",null);
            }
            ftp.enterLocalActiveMode();
            // 设置文件类型为二进制,与ASCII有区别
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            // 设置编码格式
            ftp.setControlEncoding("GBK");
            // 检验文件是否存在
            ftp.changeWorkingDirectory(ftpPath);
            FTPFile[] files = ftp.listFiles();
            if (files.length==0){
                return new Result(400,null,"未读取到文件",null);
            } else {
                for (FTPFile file : files){
                    String fileName = file.getName();
                    InputStream is = ftp.retrieveFileStream(new String(fileName.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING));
                    String substring1 = fileName.substring(0, 2);
                    if (substring1.equals("nl")){
                        //把文件下载到本地
                        FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName);
                        // 解析数据
                        String s = OutJson.TestJson(fileName);
                        //数据处理
                        Result result = DataHandler.handlerList(s,uuid);
                        //删除本地文件
                        MysqlCenlint.deletess(fileName);
                        //删除 ftp 文件
                        FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, ftpPath, fileName);
                        if (result.getCode()==200) {
                            //返回
                            return new Result(200,"成功响应数据",result.getData());
                        }
                        is.close();
                        ftp.completePendingCommand();
                    }
                }
                return new Result(400,null,"未读取到对应的文件",null);
            }
        } catch (Exception e) {
            System.out.println("ftp连接失败");
            e.printStackTrace();
        } finally {
            if (ftp != null) {
                try {
                    ftp.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return new Result(400,null,"失败",null);
    }
    /**
     * 读取内外推送的文件,每30秒读取一次
     * @return
     */
src/main/java/org/springblade/modules/FTP/Result.java
@@ -3,6 +3,8 @@
import lombok.Data;
import org.springblade.modules.system.entity.User;
import java.util.List;
/**
 * ftp 返回结果
 * @author zhongrj
@@ -19,6 +21,14 @@
    private User user;
    private List<Result> data;
    public Result(Integer code, String msg, List<Result> data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public Result() {
    }
src/main/java/org/springblade/modules/system/mapper/UserMapper.java
@@ -278,4 +278,11 @@
     * @return
     */
    int insertUser(@Param("user") User user);
    /**
     * 批量更新用户信息
     * @param updateList
     * @return
     */
    void batchUpdateUserList(@Param("list") List<User> updateList);
}
src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
@@ -1068,6 +1068,36 @@
        </foreach>
    </insert>
    <!-- 批量更新用户数据 -->
    <update id="batchUpdateUserList" parameterType="java.util.List">
        <foreach collection="list" item="user" index="index" open="" close="" separator=";">
            update blade_user
          <set>
            account=${user.account}
          </set>
            <set>
            password=${user.password}
          </set>
            <set>
            real_name=${user.realName}
          </set>
            <set>
            phone=${user.phone}
          </set>
            <set>
            registered=${user.registered}
          </set>
            <set>
            securitynumber=${user.securitynumber}
          </set>
            <set>
            hold=${user.hold}
          </set>
          where id = ${user.id}
        </foreach>
    </update>
    <!--查询学历统计信息-->
    <select id="getAgeStatistics" resultType="java.lang.Integer">
        select count(*) c from (
src/main/java/org/springblade/modules/system/service/MyAsyncService.java
@@ -10,6 +10,7 @@
import java.io.IOException;
import java.util.List;
import java.util.Map;
import static org.springblade.common.config.FtpConfig.qfqkBaseApiUrl;
@@ -166,4 +167,12 @@
            }
        }
    }
    /**
     * 存入集合
     * @param map
     */
    public void FTPObjectList(Map<String, Object> map) {
        FtpUtil.objectFileUploadList(map);
    }
}
src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -17,6 +17,7 @@
package org.springblade.modules.system.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -27,6 +28,7 @@
import org.springblade.common.constant.AgeUtil;
import org.springblade.common.constant.CommonConstant;
import org.springblade.common.constant.TenantConstant;
import org.springblade.common.utils.DesensitizedUtil;
import org.springblade.common.utils.IdCardNoUtil;
import org.springblade.common.utils.ImageUtils;
import org.springblade.common.utils.QRCodeUtil;
@@ -36,11 +38,14 @@
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tenant.BladeTenantProperties;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.jackson.JsonUtil;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.*;
import org.springblade.modules.FTP.FtpUtil;
import org.springblade.modules.FTP.Monitor;
import org.springblade.modules.FTP.Result;
import org.springblade.modules.auth.enums.UserEnum;
import org.springblade.modules.dispatcher.entity.Dispatcher;
import org.springblade.modules.dispatcher.vo.DispatcherVO;
@@ -63,6 +68,7 @@
import org.springblade.modules.system.service.*;
import org.springblade.modules.system.vo.UserVO;
import org.springblade.modules.system.wrapper.UserWrapper;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.FileNotFoundException;
@@ -97,6 +103,7 @@
    private final IExperienceService experienceService;
    private final MyAsyncService myAsyncService;
    private final SecurityPaperService securityPaperService;
    private final RedisTemplate redisTemplate;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -833,15 +840,414 @@
        return baseMapper.selectUser();
    }
//    /**
//     * 导入保安员(备份)
//     *
//     * @param data
//     * @param isCovered
//     */
//    @Override
//    public void importSecurity(List<SecurityExcel> data, Boolean isCovered, String deptId) {
//        long time = System.currentTimeMillis();
//        //将不能导入的保安员账号存起来
//        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);
//        AtomicBoolean securityInvalidStatus = new AtomicBoolean(true);
//        //遍历
//        for (SecurityExcel userExcel : data) {
//            User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class));
//            //设置部门id
//            String deptIds = userDeptService.selectIn(user.getDeptId());
//            if (null!=deptIds && !deptIds.equals("")) {
//                if (null != deptId && !deptId.equals("")) {
//                    if (!deptId.equals(deptIds)) {
//                        throw new ServiceException("导入失败!不能导入不是本公司的保安员数据!");
//                    }
//                }
//                user.setDeptId(deptIds);
//            }else {
//                //如果deptIds 为空,则说明还没有改公司
//                throw new ServiceException("导入失败!公司名:["+user.getDeptId()+"]不存在!");
//            }
//
//            //身份证校验
//            if (null==user.getCardid() || user.getCardid().equals("")){
//                throw new ServiceException("导入失败!身份证号码不能为空!");
//            }
//            //身份证住址校验
//            if (null==user.getRegistered() || user.getRegistered().equals("")){
//                throw new ServiceException("导入失败!身份证住址不能为空!");
//            }
//            if (null!=user.getCardid() && !user.getCardid().equals("")){
//                //去除所有空格
//                String cardid = user.getCardid().replaceAll(" ", "");
//                //校验
//                boolean b = IdCardNoUtil.checkIdCardNo(cardid);
//                if(b){
//                    user.setCardid(cardid);
//                }else {
//                    agetStatus.set(false);
//                    ageErrorList.add(user.getCardid());
////                    throw new ServiceException("导入失败!身份证号码[ "+user.getCardid()+" ]不正确,请核对!");
//                    //forEach 只能使用 return 跳出本次循环
////                    return;
//                    continue;
//                }
//            }
//
//            //判断当前用户是否已在本单位,如果是的更新数据
//            User user1 = new User();
//            user1.setAccount(user.getCardid());
//            user1.setIsDeleted(0);
//            user1.setStatus(1);
//            User user2 = this.getOne(Condition.getQueryWrapper(user1));
//            if (null==user2){
//                //用户不存在,去新增
//                // 设置租户ID
//                user.setTenantId("000000");
//                //默认在职
//                user.setStatus(1);
//                user.setIsDeleted(0);
//                //判断是否持证
//                if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") {
//                    user.setHold("1");
//                    //校验保安员证编号是否合规
//                    SecurityPaper securityPaper = new SecurityPaper();
//                    securityPaper.setIdCardNo(userExcel.getCardid());
//                    List<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(userExcel.getCardid());
//                            securityInvalidStatus.set(false);
//                        }
//                    }else {
//                        user.setHold("2");
//                        user.setSecuritynumber(null);
//                        securityInvalidList.add(userExcel.getCardid());
//                        securityInvalidStatus.set(false);
//                    }
//                }else {
//                    user.setHold("2");
//                }
//                //判断年龄,超过60岁的不入
////                if (AgeUtil.idCardToAge(user.getCardid())<60) {
//                //分配保安角色
//                Role role = new Role();
//                role.setRoleAlias("保安");
//                Role oneRole = roleService.getOne(Condition.getQueryWrapper(role));
//                user.setRoleId(oneRole.getId().toString());
//
//                //性别
//                if (null != userExcel.getSex()) {
//                    if (userExcel.getSex().equals("男")) {
//                        user.setSex(1);
//                    }
//                    if (userExcel.getSex().equals("女")) {
//                        user.setSex(2);
//                    }
//                }
//
//                //设置账号
//                user.setAccount(user.getCardid());
//                //获取默认密码配置
//                user.setPassword(user.getCardid().substring(user.getCardid().length() - 6));
//                //加密
//                if (Func.isNotEmpty(user.getPassword())) {
//                    user.setPassword(DigestUtil.encrypt(user.getPassword()));
//                }
//                Integer userCount = baseMapper.selectCountAccount(user.getAccount());
//                if (userCount > 0 && Func.isEmpty(user.getId())) {
//                    throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
//                }
//                user.setCreateTime(new Date());
//                user.setDispatch("1");
//                user.setExaminationType("0");
//                //新增
////                this.save(user);
//                //加入集合
//                userList.add(user);
//                //从业记录新增
//                Experience experience = new Experience();
//                experience.setCardid(user.getCardid());
////                experience.setSecurityid(user.getId().toString());
//                experience.setCompanyname(userExcel.getDeptId());
//                experience.setName(user.getRealName());
//                experience.setPost("保安员");
//                experience.setEntrytime(new Date());
////                experienceService.save(experience);
//                //加入集合
//                experienceList.add(experience);
//
//            }else {
//                //匹配组织机构是否一致,如果不一致
//                if(!user2.getDeptId().equals(user.getDeptId())){
//                    Dept dept = deptService.getById(user2.getDeptId());
//                    Dept dept1 = deptService.getById(user.getDeptId());
//                    //如果是南昌总公司分公司导入的
//                    if (dept.getId().equals(1432626178757275649L) && dept1.getParentId().equals(1432626178757275649L)){
//                        user2.setDeptId(dept1.getId().toString());
//                        //判断是否持证
//                        if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") {
//                            user2.setHold("1");
//                            user2.setSecuritynumber(user.getSecuritynumber());
//                            //校验保安员证编号是否合规
//                            SecurityPaper securityPaper = new SecurityPaper();
//                            securityPaper.setIdCardNo(userExcel.getCardid());
//                            List<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);
//                            }
//                        }else {
//                            user2.setHold("2");
//                        }
//                        //更新用户数据
//                        user2.setUpdateTime(new Date());
//                        this.updateById(user2);
//                        //qfqk异步推送
//                        myAsyncService.updateUserByQfqk(user2);
//                        String s1 =
//                            "update blade_user set hold = " + "'" + user2.getHold() + "'"
//                                + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'"
//                                + ",dept_id = " + "'" + user2.getDeptId() + "'"
//                                + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'"
//                                + ",registered = " + "'" + user2.getRegistered() + "'"
//                                + " " + "where id = " + "'" + user2.getId() + "'";
//                        //FtpUtil.sqlFileUpload(s1);
//                        myAsyncService.FTP(s1);
//                    }else {
//                        status.set(false);
//                        //加入集合
//                        errorList.add(user.getCardid());
//                        //forEach 只能使用 return 跳出本次循环
////                        return;
//                        continue;
//                    }
//                }else {
//                    //如果是一致,则更新用户数据
//                    //判断是否持证
//                    if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") {
//                        user2.setHold("1");
//                        user2.setSecuritynumber(user.getSecuritynumber());
//                        //校验保安员证编号是否合规
//                        SecurityPaper securityPaper = new SecurityPaper();
//                        securityPaper.setIdCardNo(userExcel.getCardid());
//                        List<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);
//                        }
//                    }else {
//                        user2.setHold("2");
//                    }
//                    if (null!=userExcel.getRegistered()){
//                        user2.setRegistered(userExcel.getRegistered());
//                    }else {
//                        user2.setRegistered("");
//                    }
//                    user2.setUpdateTime(new Date());
//                    //更新用户数据
//                    this.updateById(user2);
//                    //qfqk异步推送
//                    myAsyncService.updateUserByQfqk(user2);
//                    //内网数据sql
//                    String s1 =
//                        "update blade_user set hold = " + "'" + user2.getHold() + "'"
//                            + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'"
//                            + ",registered = " + "'" + user2.getRegistered() + "'"
//                            + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'"
//                            + " " + "where id = " + "'" + user2.getId() + "'";
//                    //FtpUtil.sqlFileUpload(s1);
//                    myAsyncService.FTP(s1);
//                }
//            }
//        }
//        //批量插入
//        //用户批量插入
//        if (userList.size()>0) {
//            baseMapper.batchUserList(userList);
//            //用户批量插入异步推送
//            myAsyncService.batchUserList(userList);
//            //sql 拼接
//            StringBuilder builder = new StringBuilder();
//            StringBuilder builder1 = new StringBuilder();
//            //遍历
//            for (User user : userList) {
//                //内网同步,sql 拼接
//                String sql = "insert into blade_user(" +
//                    "id,tenant_id,account,password,name,real_name,avatar,email,phone,sex," +
//                    "role_id,dept_id,cardid,nativePlace,nation,fingerprint,education," +
//                    "politicaloutlook,healstats,height,address,registered," +
//                    "securitynumber,hold,jurisdiction,examination_type,status,is_deleted,dispatch,create_time) " +
//                    "values(" + "'" + user.getId() + "'" +
//                    "," + "'" + user.getTenantId() + "'" +
//                    "," + "'" + user.getAccount() + "'" +
//                    "," + "'" + user.getPassword() + "'" +
//                    "," + "'" + user.getName() + "'" +
//                    "," + "'" + user.getRealName() + "'" +
//                    "," + "'" + user.getAvatar() + "'" +
//                    "," + "'" + user.getEmail() + "'" +
//                    "," + "'" + user.getPhone() + "'" +
//                    "," + "'" + user.getSex() + "'" +
//                    "," + "'" + user.getRoleId() + "'" +
//                    "," + "'" + user.getDeptId() + "'" +
//                    "," + "'" + user.getCardid() + "'" +
//                    "," + "'" + user.getNativeplace() + "'" +
//                    "," + "'" + user.getNation() + "'" +
//                    "," + "'" + user.getFingerprint() + "'" +
//                    "," + "'" + user.getEducation() + "'" +
//                    "," + "'" + user.getPoliticaloutlook() + "'" +
//                    "," + "'" + user.getHealstats() + "'" +
//                    "," + "'" + user.getHeight() + "'" +
//                    "," + "'" + user.getAddress() + "'" +
//                    "," + "'" + user.getRegistered() + "'" +
//                    "," + "'" + user.getSecuritynumber() + "'" +
//                    "," + "'" + user.getHold() + "'" +
//                    "," + "'" + user.getJurisdiction() + "'" +
//                    "," + "'" + user.getExaminationType() + "'" +
//                    "," + "'" + user.getStatus() + "'" +
//                    "," + "'" + user.getIsDeleted() + "'" +
//                    "," + "'" + user.getDispatch() + "'" +
//                    "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateTime()) + "'" + ")";
//                //拼接
//                builder  = builder.append(sql).append(";");
//                List<String> list = Arrays.asList(builder.toString().split(";"));
//                //判断list.size 大小
//                if (list.size()==1000){
//                    //执行
//                    //FtpUtil.sqlFileUpload(builder.toString());
//                    myAsyncService.FTP(builder.toString());
//                    //清空
//                    builder.delete(0,builder.length());
//                }
//            }
//
//            //装换成map
//            Map<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);
//            //遍历,拼接sql ,同步数据到内网
//            for (Experience experience : experienceList) {
//                String sql1  = "insert into sys_experience(id,name,post,entryTime,cardId,companyname,securityId) " +
//                    "values(" + "'" + experience.getId() + "'" + "," +
//                    "'" + experience.getName() + "'" + "," +
//                    "'" + experience.getPost() + "'" + "," +
//                    "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getEntrytime()) + "'" +
//                    "," + "'" + experience.getCardid() + "'" +
//                    "," + "'" + experience.getCompanyname() + "'" +
//                    "," + "'" + experience.getSecurityid() + "'" + ")";
//                //拼接
//                builder1  = builder1.append(sql1).append(";");
//                String[] split1 = builder.toString().split(";");
//                //判断list.size 大小
//                if (split1.length==1000){
//                    //执行
//                    //FtpUtil.sqlFileUpload(builder1.toString());
//                    myAsyncService.FTP(builder1.toString());
//                    //清空
//                    builder1.delete(0,builder1.length());
//                }
//            }
//            //剩余的继续执行
//            //FtpUtil.sqlFileUpload(builder.toString());
//            myAsyncService.FTP(builder.toString());
//            //FtpUtil.sqlFileUpload(builder1.toString());
//            myAsyncService.FTP(builder1.toString());
//        }
////        System.out.println("导入时间: = " + (System.currentTimeMillis()-time));
//
//        //如果所有数据导入有一个异常
//        StringBuilder errorBuilder = new StringBuilder();
//        if (!status.get()){
//            String errorAccount = StringUtils.join(errorList, "\\\n");
//            errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!");
//        }
//        if (!agetStatus.get()){
//            String errorAccount = StringUtils.join(ageErrorList, "\\\n");
//            errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!");
//        }
//        if (!securityInvalidStatus.get()){
//            String errorAccount = StringUtils.join(securityInvalidList, "\\\n");
//            errorBuilder.append("用户:[" + errorAccount + "]保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!");
//        }
//        //抛出异常
//        if (errorBuilder.length()>0){
//            throw new ServiceException(errorBuilder.toString());
//        }
//    }
    /**
     * 导入保安员
     *
     * 导入保安员(需加密,部分字段需要脱敏处理)
     * @since 修改时间 : 2022-04-28
     * @author: 修改人 zhongrj
     * @param data
     * @param isCovered
     */
    @Override
    public void importSecurity(List<SecurityExcel> data, Boolean isCovered, String deptId) {
        long time = System.currentTimeMillis();
        //uuidList
        List<String> uuidList = new ArrayList<>();
        //将不能导入的保安员账号存起来
        List<String> errorList = new ArrayList<>();
        //年龄不符的保安员信息存入集合
@@ -850,8 +1256,10 @@
        List<String> securityInvalidList = new ArrayList<>();
        //将需要更新的保安员信息存入集合
        List<User> updateList = new ArrayList<>();
        //需要新增的保安员集合
        //需要推送内网的保安员信息集合
        List<User> userList = new ArrayList<>();
        //需要新增的保安员集合
        List<User> addList = new ArrayList<>();
        //需要新增的从业记录集合
        List<Experience> experienceList = new ArrayList<>();
        //导入状态,默认为true ,如果有一个出现问题则为 false
@@ -900,314 +1308,126 @@
                }
            }
            //判断当前用户是否已在本单位,如果是的更新数据
            User user1 = new User();
            user1.setAccount(user.getCardid());
            user1.setIsDeleted(0);
            user1.setStatus(1);
            User user2 = this.getOne(Condition.getQueryWrapper(user1));
            if (null==user2){
                //用户不存在,去新增
                // 设置租户ID
                user.setTenantId("000000");
                //默认在职
                user.setStatus(1);
                user.setIsDeleted(0);
                //判断是否持证
                if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") {
                    user.setHold("1");
                    //校验保安员证编号是否合规
                    SecurityPaper securityPaper = new SecurityPaper();
                    securityPaper.setIdCardNo(userExcel.getCardid());
                    List<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(userExcel.getCardid());
                            securityInvalidStatus.set(false);
                        }
                    }else {
                        user.setHold("2");
                        user.setSecuritynumber(null);
                        securityInvalidList.add(userExcel.getCardid());
                        securityInvalidStatus.set(false);
                    }
            // 设置租户ID
            user.setTenantId("000000");
            //默认在职
            user.setStatus(1);
            user.setIsDeleted(0);
            //分配保安角色
            Role role = new Role();
            role.setRoleAlias("保安");
            Role oneRole = roleService.getOne(Condition.getQueryWrapper(role));
            user.setRoleId(oneRole.getId().toString());
            //性别
            if (null != userExcel.getSex()) {
                if (userExcel.getSex().equals("男")) {
                    user.setSex(1);
                }else if (userExcel.getSex().equals("女")) {
                    user.setSex(2);
                }else {
                    user.setHold("2");
                    user.setSex(1);
                }
                //判断年龄,超过60岁的不入
//                if (AgeUtil.idCardToAge(user.getCardid())<60) {
                //分配保安角色
                Role role = new Role();
                role.setRoleAlias("保安");
                Role oneRole = roleService.getOne(Condition.getQueryWrapper(role));
                user.setRoleId(oneRole.getId().toString());
                //性别
                if (null != userExcel.getSex()) {
                    if (userExcel.getSex().equals("男")) {
                        user.setSex(1);
                    }
                    if (userExcel.getSex().equals("女")) {
                        user.setSex(2);
                    }
                }
                //设置账号
                user.setAccount(user.getCardid());
                //获取默认密码配置
                user.setPassword(user.getCardid().substring(user.getCardid().length() - 6));
                //加密
                if (Func.isNotEmpty(user.getPassword())) {
                    user.setPassword(DigestUtil.encrypt(user.getPassword()));
                }
                Integer userCount = baseMapper.selectCountAccount(user.getAccount());
                if (userCount > 0 && Func.isEmpty(user.getId())) {
                    throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
                }
                user.setCreateTime(new Date());
                user.setDispatch("1");
                user.setExaminationType("0");
                //新增
//                this.save(user);
                //加入集合
                userList.add(user);
                //从业记录新增
                Experience experience = new Experience();
                experience.setCardid(user.getCardid());
//                experience.setSecurityid(user.getId().toString());
                experience.setCompanyname(userExcel.getDeptId());
                experience.setName(user.getRealName());
                experience.setPost("保安员");
                experience.setEntrytime(new Date());
//                experienceService.save(experience);
                //加入集合
                experienceList.add(experience);
            }else {
                //匹配组织机构是否一致,如果不一致
                if(!user2.getDeptId().equals(user.getDeptId())){
                    Dept dept = deptService.getById(user2.getDeptId());
                    Dept dept1 = deptService.getById(user.getDeptId());
                    //如果是南昌总公司分公司导入的
                    if (dept.getId().equals(1432626178757275649L) && dept1.getParentId().equals(1432626178757275649L)){
                        user2.setDeptId(dept1.getId().toString());
                        //判断是否持证
                        if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") {
                            user2.setHold("1");
                            user2.setSecuritynumber(user.getSecuritynumber());
                            //校验保安员证编号是否合规
                            SecurityPaper securityPaper = new SecurityPaper();
                            securityPaper.setIdCardNo(userExcel.getCardid());
                            List<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);
                            }
                        }else {
                            user2.setHold("2");
                        }
                        //更新用户数据
                        user2.setUpdateTime(new Date());
                        this.updateById(user2);
                        //qfqk异步推送
                        myAsyncService.updateUserByQfqk(user2);
                        String s1 =
                            "update blade_user set hold = " + "'" + user2.getHold() + "'"
                                + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'"
                                + ",dept_id = " + "'" + user2.getDeptId() + "'"
                                + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'"
                                + ",registered = " + "'" + user2.getRegistered() + "'"
                                + " " + "where id = " + "'" + user2.getId() + "'";
                        //FtpUtil.sqlFileUpload(s1);
                        myAsyncService.FTP(s1);
                    }else {
                        status.set(false);
                        //加入集合
                        errorList.add(user.getCardid());
                        //forEach 只能使用 return 跳出本次循环
//                        return;
                        continue;
                    }
                }else {
                    //如果是一致,则更新用户数据
                    //判断是否持证
                    if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") {
                        user2.setHold("1");
                        user2.setSecuritynumber(user.getSecuritynumber());
                        //校验保安员证编号是否合规
                        SecurityPaper securityPaper = new SecurityPaper();
                        securityPaper.setIdCardNo(userExcel.getCardid());
                        List<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);
                        }
                    }else {
                        user2.setHold("2");
                    }
                    if (null!=userExcel.getRegistered()){
                        user2.setRegistered(userExcel.getRegistered());
                    }else {
                        user2.setRegistered("");
                    }
                    user2.setUpdateTime(new Date());
                    //更新用户数据
                    this.updateById(user2);
                    //qfqk异步推送
                    myAsyncService.updateUserByQfqk(user2);
                    //内网数据sql
                    String s1 =
                        "update blade_user set hold = " + "'" + user2.getHold() + "'"
                            + ",securitynumber = " + "'" + user2.getSecuritynumber() + "'"
                            + ",registered = " + "'" + user2.getRegistered() + "'"
                            + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user2.getUpdateTime()) + "'"
                            + " " + "where id = " + "'" + user2.getId() + "'";
                    //FtpUtil.sqlFileUpload(s1);
                    myAsyncService.FTP(s1);
                }
                user.setSex(1);
            }
            //设置账号
            user.setAccount(user.getRealName());
            //加密
            if (Func.isNotEmpty(user.getPassword())) {
                user.setPassword(DigestUtil.encrypt(user.getCardid().substring(user.getCardid().length() - 6)));
            }
            user.setCreateTime(new Date());
            user.setDispatch("1");
            user.setExaminationType("0");
            //推送内网的数据
            User user0 = user;
            //生成随机数
            String uuid = UUID.randomUUID().toString();
            //将 user 存入 redis
            redisTemplate.opsForValue().set(uuid, JSON.toJSONString(user));
            //user0 临时设置uuid 到 reason_for_leav 离职原因字段
            user0.setReasonForLeav(uuid);
            //加入集合
            userList.add(user0);
            uuidList.add(uuid);
        }
        //批量插入
        Result result = new Result();
        //用户批量插入
        if (userList.size()>0) {
            baseMapper.batchUserList(userList);
            //用户批量插入异步推送
            myAsyncService.batchUserList(userList);
            //sql 拼接
            StringBuilder builder = new StringBuilder();
            StringBuilder builder1 = new StringBuilder();
            //遍历
            for (User user : userList) {
                //内网同步,sql 拼接
                String sql = "insert into blade_user(" +
                    "id,tenant_id,account,password,name,real_name,avatar,email,phone,sex," +
                    "role_id,dept_id,cardid,nativePlace,nation,fingerprint,education," +
                    "politicaloutlook,healstats,height,address,registered," +
                    "securitynumber,hold,jurisdiction,examination_type,status,is_deleted,dispatch,create_time) " +
                    "values(" + "'" + user.getId() + "'" +
                    "," + "'" + user.getTenantId() + "'" +
                    "," + "'" + user.getAccount() + "'" +
                    "," + "'" + user.getPassword() + "'" +
                    "," + "'" + user.getName() + "'" +
                    "," + "'" + user.getRealName() + "'" +
                    "," + "'" + user.getAvatar() + "'" +
                    "," + "'" + user.getEmail() + "'" +
                    "," + "'" + user.getPhone() + "'" +
                    "," + "'" + user.getSex() + "'" +
                    "," + "'" + user.getRoleId() + "'" +
                    "," + "'" + user.getDeptId() + "'" +
                    "," + "'" + user.getCardid() + "'" +
                    "," + "'" + user.getNativeplace() + "'" +
                    "," + "'" + user.getNation() + "'" +
                    "," + "'" + user.getFingerprint() + "'" +
                    "," + "'" + user.getEducation() + "'" +
                    "," + "'" + user.getPoliticaloutlook() + "'" +
                    "," + "'" + user.getHealstats() + "'" +
                    "," + "'" + user.getHeight() + "'" +
                    "," + "'" + user.getAddress() + "'" +
                    "," + "'" + user.getRegistered() + "'" +
                    "," + "'" + user.getSecuritynumber() + "'" +
                    "," + "'" + user.getHold() + "'" +
                    "," + "'" + user.getJurisdiction() + "'" +
                    "," + "'" + user.getExaminationType() + "'" +
                    "," + "'" + user.getStatus() + "'" +
                    "," + "'" + user.getIsDeleted() + "'" +
                    "," + "'" + user.getDispatch() + "'" +
                    "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateTime()) + "'" + ")";
                //拼接
                builder  = builder.append(sql).append(";");
                List<String> list = Arrays.asList(builder.toString().split(";"));
                //判断list.size 大小
                if (list.size()==1000){
                    //执行
                    //FtpUtil.sqlFileUpload(builder.toString());
                    myAsyncService.FTP(builder.toString());
                    //清空
                    builder.delete(0,builder.length());
                }
            }
            //生成随机数
            String uuid = UUID.randomUUID().toString();
            //数据推送
            Map<String, Object> map = new HashMap<>(1);
            map.put(uuid, userList);
            myAsyncService.FTPObjectList(map);
            //装换成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());
            int count = 0;
            //调用ftp获取返回数据
            while (true){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return experience;
            }).collect(Collectors.toList());
            //批量插入从业记录
            baseMapper.batchExperienceList(experienceList);
            //遍历,拼接sql ,同步数据到内网
            for (Experience experience : experienceList) {
                String sql1  = "insert into sys_experience(id,name,post,entryTime,cardId,companyname,securityId) " +
                    "values(" + "'" + experience.getId() + "'" + "," +
                    "'" + experience.getName() + "'" + "," +
                    "'" + experience.getPost() + "'" + "," +
                    "," + "'" + new SimpleDateFormat("yyyy-MM-dd").format(experience.getEntrytime()) + "'" +
                    "," + "'" + experience.getCardid() + "'" +
                    "," + "'" + experience.getCompanyname() + "'" +
                    "," + "'" + experience.getSecurityid() + "'" + ")";
                //拼接
                builder1  = builder1.append(sql1).append(";");
                String[] split1 = builder.toString().split(";");
                //判断list.size 大小
                if (split1.length==1000){
                    //执行
                    //FtpUtil.sqlFileUpload(builder1.toString());
                    myAsyncService.FTP(builder1.toString());
                    //清空
                    builder1.delete(0,builder1.length());
                //调用ftp获取返回数据
                result = Monitor.getFtpDataByUuidList(null);
                //如果返回true,就退处
                if (result.getCode() == 200) {
                    break;
                }else {
                    count++;
                    if (count == 30) {
                        break;
                    }
                }
            }
            //剩余的继续执行
            //FtpUtil.sqlFileUpload(builder.toString());
            myAsyncService.FTP(builder.toString());
            //FtpUtil.sqlFileUpload(builder1.toString());
            myAsyncService.FTP(builder1.toString());
        }
//        System.out.println("导入时间: = " + (System.currentTimeMillis()-time));
        if (null!=result){
            //获取 result
            List<Result> data1 = result.getData();
            if (data1.size()>0){
                for (Result result1 : data1) {
                    // 取出 Msg ,此 msg 存的对应的 uuid
                    String uuid = result1.getMsg();
                    // 从redis 中获取对应的用户信息
                    User user = handlerUserInfo(uuid);
                    if (result1.getCode()==200){
                        user.setId(result1.getUserId());
                        //加入新增集合
                        addList.add(user);
                    }
                    if (result1.getCode()==201){
                        user.setId(result1.getUserId());
                        //加入更新集合
                        updateList.add(user);
                    }
                    if (result1.getCode()==202){
                        status.set(false);
                        //已在其他单位存在
                        errorList.add(user.getCardid());
                    }
                    if (result1.getCode()==203){
                        securityInvalidStatus.set(false);
                        //保安证编号不匹配
                        securityInvalidList.add(user.getCardid());
                    }
                }
                //批量插入
                if (addList.size()>0){
                    baseMapper.batchUserList(addList);
                }
                //批量更新
                if (updateList.size()>0){
                    baseMapper.batchUpdateUserList(updateList);
                }
            }
        }
        //如果所有数据导入有一个异常
        StringBuilder errorBuilder = new StringBuilder();
@@ -1217,10 +1437,11 @@
        }
        if (!agetStatus.get()){
            String errorAccount = StringUtils.join(ageErrorList, "\\\n");
            errorBuilder.append("用户:[" + errorAccount + "]导入失败!已在其他单位存在!");
            errorBuilder.append("用户:[" + errorAccount + "]导入失败!身份证号码不正确,请核对!");
        }
        if (!securityInvalidStatus.get()){
            String errorAccount = StringUtils.join(securityInvalidList, "\\\n");
//            errorBuilder.append("用户:[" + errorAccount + "]保安证编号不匹配,请核实!");
            errorBuilder.append("用户:[" + errorAccount + "]保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!");
        }
        //抛出异常
@@ -1229,6 +1450,45 @@
        }
    }
    /**
     * 用户数据获取和处理
     * @param uuid 随机参数
     * @return
     */
    private User handlerUserInfo(String uuid){
        //从redis 中获取用户数据
        Object o1 = redisTemplate.opsForValue().get(uuid);
        User user = JSON.parseObject(o1.toString(), User.class);
        //取出后将 redis 删除
        redisTemplate.delete(uuid);
        //返回的user,需处理敏感数据
        User user1 = user;
        //敏感数据处理
        user1.setCardid(DesensitizedUtil.desensitizedIdNumberBy4(user.getCardid()));
        user1.setPhone(DesensitizedUtil.desensitizedPhoneNumber(user.getPhone()));
        user1.setRegistered(DesensitizedUtil.desensitizedAddress(user.getRegistered()));
        if (user.getHold().equals("1")) {
            user1.setSecuritynumber(DesensitizedUtil.desensitizedSecurityNumber(user.getSecuritynumber()));
        }else {
            user1.setSecuritynumber("");
        }
        user1.setAvatar("");
        user1.setEmail("");
        user1.setFingerprint("");
        user1.setNation("");
        user1.setNativeplace("");
        user1.setEducation("");
        user1.setPoliticaloutlook("");
        //返回
        return user1;
    }
    /**
     * 保安员导入(押运人员导入)
     * @param data
     * @param isCovered
     * @param deptId
     */
    @Override
    public void importSecurityYy(List<SecurityYyExcel> data, Boolean isCovered, String deptId) {
        //将不能导入的保安员账号存起来
@@ -1488,17 +1748,6 @@
                    }
                }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.getSecuritynumber() && userExcel.getSecuritynumber() != "") {
                        user2.setHold("1");
                        user2.setSecuritynumber(user.getSecuritynumber());