Administrator
2022-05-18 644ed3e30bbee9a417dfbe649f2a72df25a7efb1
src/main/java/org/springblade/modules/FTP/DataHanlder.java
@@ -1,20 +1,23 @@
package org.springblade.modules.FTP;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import liquibase.pro.packaged.M;
import org.springblade.common.utils.DesensitizedUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.tool.api.R;
import org.springblade.modules.dispatcher.entity.Dispatcher;
import org.springblade.modules.dispatcher.service.IDispatcherService;
import org.springblade.modules.experience.entity.Experience;
import org.springblade.modules.experience.service.IExperienceService;
import org.springblade.modules.securitypaper.entity.SecurityPaper;
import org.springblade.modules.securitypaper.service.SecurityPaperService;
import org.springblade.modules.system.entity.Dept;
import org.springblade.modules.system.entity.User;
import org.springblade.modules.system.service.IDeptService;
import org.springblade.modules.system.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.text.SimpleDateFormat;
import java.util.*;
@Component
public class DataHanlder {
@@ -25,6 +28,24 @@
   //声明对象
   private static DataHanlder hanlder;
   @Autowired
   private SecurityPaperService securityPaperService;
   @Autowired
   private IExperienceService experienceService;
   @Autowired
   private IDispatcherService dispatcherService;
   @Autowired
   private MyAsyncService myAsyncService;
   @Autowired
   private IDeptService iDeptService;
   /**
    * 初始化
    */
@@ -32,8 +53,154 @@
   public void init(){
      hanlder = this;
      hanlder.userService = this.userService;
      hanlder.securityPaperService = this.securityPaperService;
      hanlder.experienceService = this.experienceService;
      hanlder.myAsyncService = this.myAsyncService;
      hanlder.dispatcherService = this.dispatcherService;
      hanlder.iDeptService = this.iDeptService;
   }
   /**
    * 获取保安员证编号
    * @param json
    */
   public static void handlerSecurityNumerBit(String json) {
      Map map = JSON.parseObject(json, Map.class);
      //取出 key(uuid)
      String key = map.keySet().toArray()[0].toString();
      //编号前缀
      String pre = map.get(key).toString();
      Integer max = hanlder.userService.getSecurityPaperCount(pre);
      Result result = new Result(200, null, max.toString(),null);
      Map<String, Object> map1 = new HashMap<>(1);
      map1.put(key, result);
      //向外网发送数据
      FtpUtil.objectFileUploadSecurityNumberCount(map1);
   }
   /**
    * 培训报名数据处理
    * @param json
    */
   public static void handlerListTrain(String json) {
      Map map = JSON.parseObject(json, Map.class);
      //取出 key(uuid)
      String key = map.keySet().toArray()[0].toString();
      Object users = map.get(key);
      List<String > userList = JSON.parseArray(users.toString(), String.class);
      //遍历
      if (userList.size()>0) {
         List<Result> resultList = new ArrayList<>();
         //开始遍历
         for (String userId : userList) {
            //校验用户年龄
            int age = hanlder.userService.getUserAge(Long.parseLong(userId));
            //创建返回对象
            Result result1 = new Result();
            result1.setUserId(Long.parseLong(userId));
            if (age>=18 && age<=60) {
               //年龄符合要求
               result1.setCode(200);
            } else {
               //年龄不符合要求
               result1.setCode(201);
            }
            //存入结果集
            resultList.add(result1);
         }
         Result result = new Result(200, "", resultList);
         Map<String, Object> map1 = new HashMap<>(1);
         map1.put(key, result);
         //向外网发送数据
         FtpUtil.objectFileUploadListTrain(map1);
      }
   }
   /**
    * 数据处理(集合)
    * @param json
    */
   public static void handlerList(String json) {
      Map map = JSON.parseObject(json, Map.class);
      //取出 key(uuid)
      String key = map.keySet().toArray()[0].toString();
      Object users = map.get(key);
      List<User> userList = JSON.parseArray(users.toString(), User.class);
      //遍历
      if (userList.size()>0) {
         List<Result> resultList = new ArrayList<>();
         //创建更新用户集合对象
         List<User> updateUser = new ArrayList<>();
         //开始遍历
         for (User user : userList) {
            //取出 uuid
            String uuid = user.getReasonForLeav();
            //用户数据校验,是否已导入(本单位或其他单位)
            Result result = userCheckOut(user);
            //创建返回对象
            Result result1 = new Result();
            if (result.getCode() == 200) {
               user.setReasonForLeav("");
               //校验保安员证编号
               Result result2 = hanlder.checkSecurityNumber(user);
               User user1 = result2.getUser();
               //去新增
               boolean save = hanlder.userService.save(user1);
               if (save) {
                  //异步新增从业记录
                  hanlder.myAsyncService.insertExperience(user1);
                  //异步审查
                  hanlder.myAsyncService.checkUserExamineByCardNo(user1);
               }
               if (result2.getCode() == 200) {
                  //设置返回结果
                  result1.setCode(200);
                  result1.setUserId(user1.getId());
               } else {
                  //设置返回结果
                  result1.setCode(203);
                  result1.setUserId(user1.getId());
               }
            } else if (result.getCode() == 201) {
               //去修改
               user.setReasonForLeav("");
               User data = result.getUser();
               user.setId(data.getId());
               user.setCreateTime(data.getCreateTime());
               //校验保安员证编号
               Result result2 = hanlder.checkSecurityNumber(user);
               User user2 = result2.getUser();
               user2.setId(data.getId());
               hanlder.userService.updateById(user2);
               //设置返回结果
               if (result2.getCode() == 200) {
                  result1.setCode(201);
                  result1.setUserId(user.getId());
               } else {
                  //设置返回结果
                  result1.setCode(203);
                  result1.setUserId(user.getId());
               }
            } else {
               //不新增,不修改
               //设置返回结果,以在其他单位存在
               result1.setCode(202);
               result1.setUserId(null);
            }
            result1.setMsg(uuid);
            //存入结果集
            resultList.add(result1);
         }
         Result result = new Result(200, "", resultList);
         Map<String, Object> map1 = new HashMap<>(1);
         map1.put(key, result);
         System.out.println("map1 = " + map1);
         //向外网发送数据
         FtpUtil.objectFileUploadList(map1);
      }
   }
   /**
    * 数据处理
@@ -47,31 +214,64 @@
         Map map = JSON.parseObject(s, Map.class);
         Object user = map.get("user");
         User user1 = JSON.parseObject(user.toString(), User.class);
         System.out.println("user1 = " + user1);
         //获取 uuid
         String uuid = user1.getReasonForLeav();
         //用户数据校验
         Result result = userCheckOut(user1);
         System.out.println("result = " + result);
         //创建返回对象
         Result result1 = new Result();
         if (result.getCode()==200){
            user1.setReasonForLeav("");
            //校验保安员证编号
            Result result2 = hanlder.checkSecurityNumber(user1);
            User user2 = result2.getUser();
            //去新增
            hanlder.userService.save(user1);
            //设置返回结果
            result1.setCode(200);
            result1.setUserId(user1.getId());
            result1.setMsg("新增成功");
            boolean save = hanlder.userService.save(user2);
            if (save){
               //异步新增从业记录
               hanlder.myAsyncService.insertExperience(user2);
               //异步审查
               hanlder.myAsyncService.checkUserExamineByCardNo(user2);
            }
            if (result2.getCode()==200){
               //设置返回结果
               result1.setCode(200);
               result1.setUserId(user1.getId());
               result1.setMsg("新增成功");
            }else {
               //设置返回结果
               result1.setCode(203);
               result1.setUserId(user1.getId());
               result1.setMsg(result2.getMsg());
            }
         }else if (result.getCode()==201){
            //去修改
            user1.setReasonForLeav("");
            User data = result.getUser();
            user1.setId(data.getId());
            hanlder.userService.updateById(user1);
            user1.setCreateTime(data.getCreateTime());
            //校验保安员证编号
            Result result2 = hanlder.checkSecurityNumber(user1);
            User user2 = result2.getUser();
            user2.setId(data.getId());
            hanlder.userService.updateById(user2);
            //设置返回结果
            result1.setCode(201);
            result1.setUserId(user1.getId());
            result1.setMsg("修改成功");
            if (result2.getCode()==200) {
               result1.setCode(201);
               result1.setUserId(user1.getId());
               result1.setMsg("修改成功");
            }else {
               //设置返回结果
               result1.setCode(204);
               result1.setUserId(user1.getId());
               result1.setMsg(result2.getMsg());
            }
         }else {
            //不新增,不修改
            //设置返回结果
@@ -79,9 +279,9 @@
            result1.setUserId(null);
            result1.setMsg(result.getMsg());
         }
         System.out.println("result1 = " + result1);
         Map<String, Object> map1 = new HashMap<>(1);
         map1.put(uuid,result1);
         System.out.println("用户新增:开始向外网推送数据............");
         //向外网发送数据
         FtpUtil.objectFileUpload(map1);
      }
@@ -91,7 +291,7 @@
    * 用户校验
    * @param user
    */
   private static Result userCheckOut(User user) {
   public static Result userCheckOut(User user) {
      //1. 校验是否有重复导入
      User user1 = new User();
      user1.setCardid(user.getCardid());
@@ -101,18 +301,154 @@
      if (null!=one){
         //判断单位是否一致
         if (!one.getDeptId().equals(user.getDeptId())){
            //判断是否为机读身份证录入
            if (null!=user.getCell() && !user.getCell().equals("")){
               if (user.getCell().equals("2")){
                  // cell 2为机读录入
                  //先将原有人员离职
                  one.setStatus(2);
                  one.setUpdateTime(new Date());
                  //离职
                  hanlder.userService.updateById(one);
                  //内网同步
                  String s1 = "update blade_user set status = " + one.getStatus() +
                     ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(one.getUpdateTime()) + "'" +
                     " where id = " + "'" + one.getId() + "'";
                  hanlder.myAsyncService.FTP(s1);
                  //人员离职后修改派遣记录,修改从业记录
                  hanlder.updateUserDispatcherExp(one);
               }
            }
            return new Result(400,null,user.getRealName() + "已在其他单位导入");
         }else {
            return new Result(201,"已在本单位导入",one);
         }
      }
      //2.保安证编号校验
      return new Result(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() + "'";
            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() + "'";
         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 cardid = DesensitizedUtil.desensitizedIdNumberBy4(user.getCardid());
         //内网同步
         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() + "'" +
            "," + "'" + cardid + "'" +
            "," + "'" + experience.getCompanyname() + "'" +
            "," + "'" + experience.getSecurityid() + "'"
            + ")";
         myAsyncService.FTP(s);
      }
   }
   /**
    * 保安员证编号校验
    * @param user
    * @return
    */
   public Result checkSecurityNumber(User user){
      //2.保安证编号校验
      //判断是否持证
      boolean states = false;
      if (null!= user.getHold()
         && user.getHold().equals("1")
         && null!=user.getSecuritynumber()
         && !user.getSecuritynumber().equals("")){
         //持证,校验保安证编号是否合法
         SecurityPaper securityPaper = new SecurityPaper();
         securityPaper.setIdCardNo(user.getCardid());
         List<SecurityPaper> securityPaperList = hanlder.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");
            }
         }else {
            states = false;
            user.setHold("2");
         }
      }else {
         states = true;
      }
      if (!states) {
         return new Result(201,null,"保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请!",user);
      }
      return new Result(200,null,"",user);
   }
}