/**
 * @date 2019年11月15日
 * @author 翁东州
 * @方法中文名称:
 */
package cn.timer.api.controller.yggl;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;

import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.Transactional;

import cn.timer.api.bean.insure.InsurePolicy;
import cn.timer.api.bean.yggl.*;
import cn.timer.api.bean.zzgl.ZzglLogDgjl;
import cn.timer.api.dao.zzgl.ZzglLogDgjlMapper;
import cn.timer.api.dao.yggl.YgglAttaHtxxbMapper;
import cn.timer.api.dao.yggl.YgglPersonnelFormMapper;
import cn.timer.api.dto.yggl.*;
import cn.timer.api.utils.redis.RedisUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.util.StringUtil;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.BetweenFormater.Level;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.timer.api.bean.clazz.CommonArea;
import cn.timer.api.bean.clazz.SysRegion;
import cn.timer.api.bean.kqgl.UserEquiRelation;
import cn.timer.api.bean.kqmk.KqglAssoKqj;
import cn.timer.api.bean.kqmk.KqglAssoKqzdkfs;
import cn.timer.api.bean.kqmk.KqglAssoLeaveEmployeeBalance;
import cn.timer.api.bean.kqmk.KqglAssoLeaveRules;
import cn.timer.api.bean.kqmk.KqglAssoYhkqz;
import cn.timer.api.bean.kqmk.KqglAssoYhsb;
import cn.timer.api.bean.qyzx.QyzxEmpEntAsso;
import cn.timer.api.bean.qyzx.QyzxEmpLogin;
import cn.timer.api.bean.zzgl.ZzglBmgwM;
import cn.timer.api.config.annotation.CurrentUser;
import cn.timer.api.config.annotation.UserBean;
import cn.timer.api.config.enuminterface.YgEnumInterface;
import cn.timer.api.config.enuminterface.YgEnumInterface.jobStatus;
import cn.timer.api.config.enums.CommonEnum;
import cn.timer.api.config.enums.SysRoleType;
import cn.timer.api.config.exception.Regular;
import cn.timer.api.config.validation.ValidList;
import cn.timer.api.controller.kqgl.ClockInTool;
import cn.timer.api.controller.kqgl.atttimer.RealTimeUpdate;
import cn.timer.api.controller.zzgl.service.ZzglBmgwMService;
import cn.timer.api.dao.clazz.CommonAreaMapper;
import cn.timer.api.dao.kqgl.UserEquiRelationMapper;
import cn.timer.api.dao.kqmk.KqglAssoKqzdkfsMapper;
import cn.timer.api.dao.kqmk.KqglAssoLeaveBalanceMapper;
import cn.timer.api.dao.qyzx.QyzxEmpEntAssoMapper;
import cn.timer.api.dao.qyzx.QyzxEmpLoginMapper;
import cn.timer.api.dao.clazz.NationClassMapper;
import cn.timer.api.dao.yggl.YgglMainEmpMapper;
import cn.timer.api.dao.yggl.YgglMainLzbMapper;
import cn.timer.api.dao.zzgl.ZzglBmgwMMapper;
import cn.timer.api.dto.kqmk.AdditionalDto;
import cn.timer.api.dto.yggl.AddygdaDto;
import cn.timer.api.dto.yggl.EmpQuery;
import cn.timer.api.dto.yggl.ImportEmpDto;
import cn.timer.api.dto.yggl.LoginInfoDto;
import cn.timer.api.dto.yggl.LoginerChargeDto;
import cn.timer.api.dto.yggl.LzbQueryDto;
import cn.timer.api.dto.yggl.LzygQueryDto;
import cn.timer.api.dto.yggl.ModifyAvatarDto;
import cn.timer.api.dto.yggl.UserInfo;
import cn.timer.api.dto.yggl.YgCartogramDto;
import cn.timer.api.dto.yggl.YgKVDto;
import cn.timer.api.dto.yggl.YgQueryDto;
import cn.timer.api.dto.yggl.YgbintuDto;
import cn.timer.api.dto.yggl.YgglCartogramDto;
import cn.timer.api.bean.clazz.NationClass;
import cn.timer.api.dto.yggl.YgzzDto;
import cn.timer.api.utils.DateFormatUtils;
import cn.timer.api.utils.Md5;
import cn.timer.api.utils.Result;
import cn.timer.api.utils.ResultUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

/**
 * @author 翁东州
 * @date 2019年11月15日
 * @方法中文名称:
 */
@Api(tags = "3.员工管理")
@RestController
@Transactional(rollbackOn = Exception.class)
@RequestMapping(value = "/yggl", produces = {"application/json"})
public class YgglController {

    @Value(value = "${config-8timer.init-password}")
    private String pwd;

    @Autowired
    private YgglMainEmpMapper ygglMainEmpMapper;

    @Autowired
    private QyzxEmpEntAssoMapper qyzxEmpEntAssoMapper;

    @Autowired
    private QyzxEmpLoginMapper qyzxEmpLoginMapper;

    @Autowired
    private YgglMainLzbMapper ygglMainLzbMapper;

    @Autowired
    private ZzglBmgwMMapper zzglBmgwMMapper;

    // weng(民族)
    @Autowired
    private NationClassMapper nationClassMapper;

    @Autowired
    private ZzglLogDgjlMapper zzglLogDgjlMapper;

    @Resource
    private RedisUtil redisUtil;

    @Value("${server.servlet.session.timeout}")
    public Integer session_timeout;

    @Autowired
    private YgglAttaHtxxbMapper ygglAttaHtxxbMapper;

    @Autowired
    private YgglPersonnelFormMapper ygglPersonnelFormMapper;

    /**
     * 获取员工档案
     *
     * @param
     * @return
     */
    @GetMapping(value = "/ygda")
    @ApiOperation(value = "1.获取员工档案", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 1)
    public Result<YgglMainEmp> selectygda(@CurrentUser UserBean userBean) {
        Integer empNum = userBean.getEmpNum();
        Integer orgCode = userBean.getOrgCode();
        YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda()
                .eq(YgglMainEmp::getOrgCode, orgCode).eq(YgglMainEmp::getEmpNum, empNum));
        Date rz = ygglMainEmp.getRzTime();
        if (rz != null) {
            ygglMainEmp.setWorkTime(DateUtil.formatBetween(rz, new Date(), Level.DAY));
        }
        return ResultUtil.data(ygglMainEmp);
    }

    // 获取员工档案
    @GetMapping(value = "/ygda/{empNum}")
    @ApiOperation(value = "2.获取员工档案(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 2)
    public Result<YgglMainEmp> selectygda(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        Integer orgCode = userBean.getOrgCode();
        YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda()
                .eq(YgglMainEmp::getOrgCode, orgCode).eq(YgglMainEmp::getEmpNum, empNum));
        Date rz = ygglMainEmp.getRzTime();
        QyzxEmpLogin login = QyzxEmpLogin.builder().build().selectOne(new QueryWrapper<QyzxEmpLogin>().select("phone").eq("id", empNum));
        if (rz != null) {
            ygglMainEmp.setWorkTime(DateUtil.formatBetween(ygglMainEmp.getRzTime(), new Date(), Level.DAY));
        }
        if (!StringUtils.isEmpty(login) && !StringUtils.isEmpty(login.getPhone())) {
            ygglMainEmp.setEmpLoginPhone(login.getPhone());
        }
        return ResultUtil.data(ygglMainEmp);
    }

    /**
     * 根据岗位id获取员工档案部门岗位名称
     *
     * @param
     * @return
     */
    @GetMapping(value = "/ygdabm/{gwid}")
    @ApiOperation(value = "3.获取员工档案部门岗位名称", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 3)
    public Result<String> selectbmgw(@CurrentUser UserBean userBean, @PathVariable Integer gwid) {
        if (gwid == null || gwid == 0) {
            return ResultUtil.data("岗位不存在");
        }
        Integer orgCode = userBean.getOrgCode();
        ZzglBmgwM zzglBmgwM = ZzglBmgwM.builder().build().selectOne(
                new QueryWrapper<ZzglBmgwM>().lambda().eq(ZzglBmgwM::getOrgCode, orgCode).eq(ZzglBmgwM::getId, gwid));
        String gw = null;
        Integer bmid = null;
        if (zzglBmgwM != null) {
            gw = zzglBmgwM.getName();
            bmid = zzglBmgwM.getUpId();
        }
        ZzglBmgwM z = ZzglBmgwM.builder().build().selectOne(
                new QueryWrapper<ZzglBmgwM>().lambda().eq(ZzglBmgwM::getOrgCode, orgCode).eq(ZzglBmgwM::getId, bmid));
        String bm = null;
        if (z != null) {
            bm = z.getName();
        }
        String bmgw = bm + "/" + gw;
        return ResultUtil.data(bmgw);
    }


    @Autowired
    private RealTimeUpdate realtimeupdate;
    @Autowired
    private KqglAssoKqzdkfsMapper kqglassokqzdkfsmapper;

    @Value("${config-8timer.machine8timerUrl}")
    public String mac_command; // 回调地址

    @Autowired
    private UserEquiRelationMapper userequirelationmapper;

    /**
     * 添加员工档案
     *
     * @param userBean
     * @param addygdaDto
     * @return
     */
    @PostMapping(value = "/addygda")
    @ApiOperation(value = "4.添加员工档案", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 4)
    public Result<Object> addygda(@CurrentUser UserBean userBean, @Validated @RequestBody AddygdaDto addygdaDto)
            throws Exception {
        Integer orgCode = userBean.getOrgCode();
        String customNum = addygdaDto.getCustomNum();//自定义工号
        String name = addygdaDto.getName();
        String phone = addygdaDto.getPhone();
        Integer zjType = addygdaDto.getZjType();
        String zjNum = addygdaDto.getZjNum();
        Integer attgroupid = addygdaDto.getAttgroupid();//考勤组id
        boolean isvalid = true;
        if (zjType != null) {
            switch (zjType) {
                case 0:
                    isvalid = IdcardUtil.isValidCard15(zjNum) || IdcardUtil.isValidCard18(zjNum);
                    break;
                case 1:
                    String[] strs = IdcardUtil.isValidCard10(zjNum);
                    if (strs == null) {
                        isvalid = false;
                        break;
                    }
                    String str2 = strs != null && strs.length > 2 ? strs[2] : "false";
                    isvalid = "澳门/香港".contains(strs[0]) && "true".equals(str2);
                    break;
                case 2:
                    isvalid = IdcardUtil.isValidTWCard(zjNum);
                    break;
                case 3:
                    isvalid = ReUtil.isMatch(Regular.PASSPORT1, zjNum) || ReUtil.isMatch(Regular.PASSPORT2, zjNum);
                    break;
                default:
                    break;
            }
        }
//		if (!isvalid) {
//			return ResultUtil.error("证件格式不对!");
//		}

        Integer jobType = addygdaDto.getJobType();
        Date rzTime = addygdaDto.getRzTime() == null ? new Date() : addygdaDto.getRzTime();
        Integer syq = addygdaDto.getSyq();
        Integer sex = addygdaDto.getSex();
        Integer bmgwId = addygdaDto.getBmgwId();


        QyzxEmpLogin login = new LambdaQueryChainWrapper<QyzxEmpLogin>(qyzxEmpLoginMapper)
                .eq(!StrUtil.hasBlank(phone), QyzxEmpLogin::getPhone, phone).one();
        if (login == null) {
            // 初始化密码 pwd
            login = QyzxEmpLogin.builder().phone(phone).pw(Md5.md5(pwd))
                    .sts(CommonEnum.U_STS_ON.getType()).orgId(userBean.getOrgCode()).username(name).build();
            if (!login.insert()) {
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return ResultUtil.error("添加员工登录表失败,请检查输入信息");
            }
        }

        YgglMainEmp ygglMainEmp = ygglMainEmpMapper.selectOne(new QueryWrapper<YgglMainEmp>().lambda()
                .eq(YgglMainEmp::getPhone, phone).eq(YgglMainEmp::getOrgCode, orgCode));

        if (ygglMainEmp == null) {
            QyzxEmpEntAsso.builder().empNum(login.getId()).orgCode(orgCode).userType(SysRoleType.U_TYPE_EMP.getType())
                    .status(CommonEnum.U_STS_ON.getType()).build().insert();
            ygglMainEmp = YgglMainEmp.builder().name(name).phone(phone).zjType(zjType).zjNum(zjNum).jobType(jobType)
                    .jobStatus(jobStatus.SHIYONG.getType()).rzTime(rzTime).syq(syq).sex(sex)
                    .empNum(login.getId()).orgCode(orgCode).bmgwId(bmgwId).customNum(customNum).build();

            if (addygdaDto.getAttgroupid() != null) {
                KqglAssoYhkqz.builder().kqzid(attgroupid).userid(login.getId()).qyid(userBean.getOrgCode()).build().insert();

                List<KqglAssoKqzdkfs> kqjs = kqglassokqzdkfsmapper.selectList(new QueryWrapper<KqglAssoKqzdkfs>().lambda().eq(KqglAssoKqzdkfs::getKqzId, addygdaDto.getAttgroupid()).eq(KqglAssoKqzdkfs::getType, 1));

                for (KqglAssoKqzdkfs abp : kqjs) {
                    KqglAssoKqj kqj = KqglAssoKqj.builder().id(abp.getDkfsid()).build().selectById();
                    KqglAssoYhsb kqjry = KqglAssoYhsb.builder().build().selectOne(new QueryWrapper<KqglAssoYhsb>().lambda().eq(KqglAssoYhsb::getUserId, login.getId()).eq(KqglAssoYhsb::getKqjid, kqj.getId()));
                    if (kqjry == null) {

//						YgglMainEmp yggluser = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()).eq(YgglMainEmp::getEmpNum, login.getId()));
                        String url = mac_command + "/addUserName";
                        HttpHeaders headers = new HttpHeaders();
                        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
                        params.add("devId", kqj.getCode());
                        params.add("userId", login.getId());
                        params.add("userName", ygglMainEmp.getName());
                        RestTemplate restTemplate = new RestTemplate();
                        HttpEntity httpEntity = new HttpEntity(params, headers);
                        ResponseEntity<String> request = restTemplate.postForEntity(url, httpEntity, String.class);

                        KqglAssoYhsb.builder().build().delete(new QueryWrapper<KqglAssoYhsb>().lambda().eq(KqglAssoYhsb::getUserId, login.getId()).eq(KqglAssoYhsb::getKqjid, kqj.getId()));

                        KqglAssoYhsb uskqj = KqglAssoYhsb.builder().userId(login.getId()).kqjid(kqj.getId()).type(1).build();

                        UserEquiRelation isgly = userequirelationmapper.selectByuserId(login.getId());
                        if (isgly != null) {
                            uskqj.setIsGly(isgly.getIsGly());
                        } else {
                            uskqj.setIsGly(0);
                        }
                        if (!uskqj.insert())
                            return ResultUtil.error("操作失败--新增用户与设备关系");
                    }
                }

            }
            if (syq != null) {
                if (syq == 0) {
                    ygglMainEmp.setZzTime(rzTime);
                } else {

                    String sdf = new SimpleDateFormat("yyyy-MM-dd").format(rzTime);

                    String zztime = ClockInTool.requires_extra_times(sdf, syq, 4, 1);

                    ygglMainEmp.setZzTime(ClockInTool.strToDateLong(zztime));
                }
            }

            ygglMainEmp.insert();

            //假期规则初始化
            String current_time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
            List<KqglAssoLeaveRules> rul = KqglAssoLeaveRules.builder().build().selectList(new QueryWrapper<KqglAssoLeaveRules>().lambda().eq(KqglAssoLeaveRules::getOrgCode, orgCode));
            for (KqglAssoLeaveRules r : rul) {
                if (r.getLeaveBalance() == 0) {
                    KqglAssoLeaveEmployeeBalance.builder().leaveRulesId(r.getId()).userid(ygglMainEmp.getEmpNum()).balanceDays(-1).modifyUserid(userBean.getEmpNum()).modifyTimer(current_time).orgCode(userBean.getOrgCode()).build().insert();
                } else {
                    KqglAssoLeaveEmployeeBalance.builder().leaveRulesId(r.getId()).userid(ygglMainEmp.getEmpNum()).balanceDays(0.0).modifyUserid(userBean.getEmpNum()).modifyTimer(current_time).orgCode(userBean.getOrgCode()).build().insert();
                }
            }


            try {
                realtimeupdate.AttendanceTask(userBean.getOrgCode(), ygglMainEmp.getEmpNum(), 2, null);
            } catch (ParseException e) {
                e.printStackTrace();
            }

            return ResultUtil.data(ygglMainEmp, "添加员工成功!");
        } else {
            return ResultUtil.error("该手机号已被使用,请输入正确手机号");
        }

    }

    /**
     * 修改员工档案
     *
     * @param
     * @return
     */
    @PostMapping(value = "/updateygda")
    @ApiOperation(value = "5.修改员工档案", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 5)
    public Result<Object> updateygda(@CurrentUser UserBean userBean, @RequestBody YgglMainEmp ygglMainEmp)
            throws Exception {

        if (ObjectUtil.isAllNotEmpty(ygglMainEmp.getRzTime(), ygglMainEmp.getZzTime())
                && !DateFormatUtils.getCompareDate(ygglMainEmp.getRzTime(), ygglMainEmp.getZzTime())) {
            return ResultUtil.error("入职日期 不可以大于 转正日期");
        }
        //修改 员工登陆账号 检测账号是否重复
        if (!StringUtils.isEmpty(ygglMainEmp.getEmpLoginPhone())) {
            QyzxEmpLogin login = new LambdaQueryChainWrapper<QyzxEmpLogin>(qyzxEmpLoginMapper)
                    .eq(!StrUtil.hasBlank(ygglMainEmp.getEmpLoginPhone()), QyzxEmpLogin::getPhone, ygglMainEmp.getEmpLoginPhone()).one();
            YgglMainEmp emp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getPhone, ygglMainEmp.getEmpLoginPhone())
                    .eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()));
            if (StringUtils.isEmpty(login) && StringUtils.isEmpty(emp)) {
                QyzxEmpLogin.builder().phone(ygglMainEmp.getEmpLoginPhone()).build().update(new QueryWrapper<QyzxEmpLogin>().lambda().eq(QyzxEmpLogin::getId, ygglMainEmp.getEmpNum()));
            } else {
                return ResultUtil.error("该号码已存在,请更换员工登陆账号");
            }
        }

        if (ygglMainEmp.getEmpNum() != null) {
            ygglMainEmp.update(new UpdateWrapper<YgglMainEmp>().lambda()
                    .eq(YgglMainEmp::getOrgCode, userBean.getOrgCode())
                    .eq(YgglMainEmp::getEmpNum, ygglMainEmp.getEmpNum()));

            return ResultUtil.data(ygglMainEmp, "修改成功");
        }
        return ResultUtil.data(ygglMainEmp, "修改成功");
    }

    /**
     * 员工搜索
     *
     * @param
     * @return
     */
    @PostMapping(value = "/ygquery")
    @ApiOperation(value = "6.员工搜索/分页", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 6)
    public Result<Object> ygquery(@CurrentUser UserBean userBean, @RequestBody YgQueryDto ygQueryDto) {
        Integer orgCode = userBean.getOrgCode();
        Integer b = ygQueryDto.getBmgwid();
        ArrayList<Integer> bList = new ArrayList<Integer>();
        List<ZzglBmgwM> zzglBmgwMs = new LambdaQueryChainWrapper<ZzglBmgwM>(zzglBmgwMMapper)
                .eq(ZzglBmgwM::getOrgCode, orgCode).list();
        ZzglBmgwM.getDepts(bList, b, zzglBmgwMs);

        Integer j = ygQueryDto.getJobStatus();
        Integer t = ygQueryDto.getJobType();
        String q = ygQueryDto.getQuery();
        Page<YgglMainEmp> page = new Page<YgglMainEmp>(ygQueryDto.getCurrentPage(), ygQueryDto.getTotalPage());
        QueryWrapper<YgglMainEmp> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda()
                .select(YgglMainEmp::getName, YgglMainEmp::getEmpNum, YgglMainEmp::getBmgwId, YgglMainEmp::getRzTime,
                        YgglMainEmp::getJobType, YgglMainEmp::getPhone, YgglMainEmp::getJobStatus)
                .ne(YgglMainEmp::getJobStatus, jobStatus.YILIZHI.getType())
                .eq(YgglMainEmp::getOrgCode, orgCode).eq(t != null && t > -1, YgglMainEmp::getJobType, t)
                .eq(j != null && j > -1, YgglMainEmp::getJobStatus, j)
                .in(!bList.isEmpty(), YgglMainEmp::getBmgwId, bList)
                .and(!StrUtil.hasBlank(q), wq -> wq.like(YgglMainEmp::getName, q).or().like(YgglMainEmp::getPhone, q));

        IPage<YgglMainEmp> ygglMainEmpPage = YgglMainEmp.builder().build().selectPage(page, queryWrapper);

        return ResultUtil.data(ygglMainEmpPage);
    }

    @Autowired
    private ZzglBmgwMService zzglBmgwMService;

    /**
     * 员工列表-分页
     *
     * @param
     * @return
     */
    @PostMapping(value = "/selects_emp")
    @ApiOperation(value = "6.员工列表-分页", httpMethod = "POST", notes = "员工列表-分页")
    @ApiOperationSupport(order = 6)
    public Result<Object> selectsEmp(@CurrentUser UserBean userBean, @RequestBody EmpQuery empQuery) {
        Integer orgCode = userBean.getOrgCode();
        Integer bmgwId = empQuery.getBmgwid();
        Page<YgglMainEmp> page = new Page<YgglMainEmp>(empQuery.getCurrentPage(), empQuery.getTotalPage());
        List<Integer> empNums = CollUtil.toList();

        if (bmgwId != null) {
            List<YgglMainEmp> usersQuery = zzglBmgwMService.selectOtherlistent(userBean.getOrgCode(), bmgwId);
            if (CollectionUtil.isNotEmpty(usersQuery)) {
                empNums = usersQuery.stream().map(YgglMainEmp::getEmpNum).collect(Collectors.toList());
            } else {
                return ResultUtil.data(null);
            }

            if (CollectionUtil.isEmpty(empNums)) {
                return ResultUtil.data(null);
            }
        }
        empQuery.setOrgCode(orgCode);
        empQuery.setEmpNums(empNums);
        IPage<YgglMainEmp> ygglMainEmpPage = ygglMainEmpMapper.selectME(page, empQuery);

        Map<String, Object> map = new HashMap<>(9);
        // 在职
        map.put("list", ygglMainEmpPage.getRecords());
        // 在职
        map.put("zaizhi", ygglMainEmpMapper.selectEmpCount(orgCode, 1));
        // 全职
        map.put("quanzhi", ygglMainEmpMapper.selectEmpCount(orgCode, 2));
        // 试用期
        map.put("shiyongqi", ygglMainEmpMapper.selectEmpCount(orgCode, 3));
        // 正式
        map.put("zhengshi", ygglMainEmpMapper.selectEmpCount(orgCode, 4));
        // 待离职
        map.put("dailizhi", ygglMainEmpMapper.selectEmpCount(orgCode, 5));
        // 已离职
        map.put("yilizhi", ygglMainEmpMapper.selectEmpCount(orgCode, 6));

        return ResultUtil.data(ygglMainEmpPage, map);
    }

    /**
     * 导入员工档案
     */
    @PostMapping(value = "/import_emp_record")
    @ApiOperation(value = "7.导入员工档案", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 7)
    public Result<JSONObject> importEmpRecord(@CurrentUser UserBean userBean,
                                              @Validated @RequestBody ValidList<AddygdaDto> listAddygdaDto) throws Exception {

        Integer orgCode = userBean.getOrgCode();
        // 查询所有员工手机号
//		List<QyzxEmpLogin> listEl = qyzxEmpLoginMapper
//				.selectList(new QueryWrapper<QyzxEmpLogin>().lambda()
//						.select(QyzxEmpLogin::getPhone));

        List<YgglMainEmp> listMe = ygglMainEmpMapper.selectList(new QueryWrapper<YgglMainEmp>().lambda()
                .eq(YgglMainEmp::getOrgCode, orgCode).select(YgglMainEmp::getPhone, YgglMainEmp::getZjNum));

        listMe = listMe != null
                ? listMe.stream().filter(o -> o != null && o.getPhone() != null).collect(Collectors.toList())
                : null;

        // 抽取 登录表 的phone的集合
        List<String> listPhone = listMe.stream().map(YgglMainEmp::getPhone).collect(Collectors.toList());
        // 抽取 登录表 的zjNum的集合
        List<String> listzjNum = listMe.stream().map(YgglMainEmp::getZjNum).collect(Collectors.toList());

        List<YgglMainEmp> listYmp = new ArrayList<YgglMainEmp>();

        // 过滤掉 导入数据中, listPhone已存在 的 phone 的对象集合和证件号码
//		List<AddygdaDto> list = listAddygdaDto.stream()
//				.filter(o -> o != null && !listPhone.contains(o.getPhone()) && !listzjNum.contains(o.getZjNum()))
//				.collect(Collectors.toList());

        // 过滤掉 导入数据中, listPhone已存在 的 phone 的对象集合
        List<AddygdaDto> list = listAddygdaDto.stream()
                .filter(o -> o != null && !listPhone.contains(o.getPhone())).collect(Collectors.toList());

        // 过滤出 导入数据中, listPhone已存在 的 phone 的对象集合
        List<AddygdaDto> phoneRepetitions = listAddygdaDto.stream()
                .filter(o -> o != null && listPhone.contains(o.getPhone())).collect(Collectors.toList());

        // 过滤出 导入数据中, listzjNum 已存在 的 ZjNum 的对象集合
        List<AddygdaDto> idCardRepetitions = listAddygdaDto.stream()
                .filter(o -> o != null && listzjNum.contains(o.getZjNum())).collect(Collectors.toList());

        List<YgglMainEmp> insertErrors = new ArrayList<YgglMainEmp>();

        YgglMainEmp yme;
        for (AddygdaDto ad : list) {

            String name = ad.getName();
            String phone = ad.getPhone();
            Integer zjType = ad.getZjType();
            String zjNum = ad.getZjNum();
            boolean isvalid = true;
            switch (zjType) {
                case 0:
                    isvalid = IdcardUtil.isValidCard15(zjNum) || IdcardUtil.isValidCard18(zjNum);
                    break;
                case 1:
                    String[] strs = IdcardUtil.isValidCard10(zjNum);
                    if (strs == null) {
                        isvalid = false;
                        break;
                    }
                    String str2 = strs != null && strs.length > 2 ? strs[2] : "false";
                    isvalid = "澳门/香港".contains(strs[0]) && "true".equals(str2);
                    break;
                case 2:
                    isvalid = IdcardUtil.isValidTWCard(zjNum);
                    break;
                case 3:
                    isvalid = ReUtil.isMatch(Regular.PASSPORT1, zjNum) || ReUtil.isMatch(Regular.PASSPORT2, zjNum);
                    break;
                default:
                    break;
            }
			/*if (!isvalid) {
				return ResultUtil.error("证件格式不对!");
			}*/
            Integer jobType = ad.getJobType();
            Date rzTime = ad.getRzTime() == null ? new Date() : ad.getRzTime();
            Integer syq = ad.getSyq();
            Integer sex = ad.getSex();
            Integer bmgwId = ad.getBmgwId();

            QyzxEmpLogin login = new LambdaQueryChainWrapper<QyzxEmpLogin>(qyzxEmpLoginMapper)
                    .eq(!StrUtil.hasBlank(phone), QyzxEmpLogin::getPhone, phone).one();
            if (login == null) {
                // 初始化密码 pwd
                login = QyzxEmpLogin.builder().phone(phone).pw(Md5.md5(pwd)).sts(CommonEnum.U_STS_ON.getType())
                        .orgId(userBean.getOrgCode()).username(name).build();
                if (!login.insert()) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return ResultUtil.error("添加员工登录表失败,请检查输入信息");
                }
            }

            QyzxEmpEntAsso.builder().empNum(login.getId()).orgCode(orgCode).userType(SysRoleType.U_TYPE_EMP.getType())
                    .status(CommonEnum.U_STS_ON.getType()).build().insert();// usertype2普通员工 status1正常
            yme = YgglMainEmp.builder().name(name).phone(phone).zjType(zjType).zjNum(zjNum).jobType(jobType)
                    .jobStatus(YgEnumInterface.jobStatus.SHIYONG.getType()).rzTime(rzTime).syq(syq).sex(sex)
                    .empNum(login.getId()).orgCode(orgCode).bmgwId(bmgwId).build();
            if (yme.insert()) {
                /*员工状态为离职*/
                Integer jobStatus = ad.getJobStatus();
                yme.setJobStatus(jobStatus);
                if (jobStatus == 2 || jobStatus == 3) {
                    yme.updateById();
                    YgglMainLzb ygglMainLzb = YgglMainLzb.builder().empNum(yme.getEmpNum()).build();
                    ygglMainLzb.setLzTime(ad.getLzTime());
                    BeanUtil.copyProperties(yme, ygglMainLzb, "before_leaving_sts");
                    ygglMainLzb.insert();
                }

                listYmp.add(yme);
            } else {
                // 存放 插入失败的 数据
                insertErrors.add(yme);
            }
            //假期规则初始化
            String current_time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
            List<KqglAssoLeaveRules> rul = KqglAssoLeaveRules.builder().build().selectList(new QueryWrapper<KqglAssoLeaveRules>().lambda().eq(KqglAssoLeaveRules::getOrgCode, orgCode));
            for (KqglAssoLeaveRules r : rul) {
                if (r.getLeaveBalance() == 0) {
                    KqglAssoLeaveEmployeeBalance.builder().leaveRulesId(r.getId()).userid(login.getId()).balanceDays(-1).modifyUserid(userBean.getEmpNum()).modifyTimer(current_time).orgCode(userBean.getOrgCode()).build().insert();
                } else {
                    KqglAssoLeaveEmployeeBalance.builder().leaveRulesId(r.getId()).userid(login.getId()).balanceDays(0.0).modifyUserid(userBean.getEmpNum()).modifyTimer(current_time).orgCode(userBean.getOrgCode()).build().insert();
                }
            }


        }
        YgglMainImportLog.builder().userId(userBean.getEmpNum())
                .createTime(new Date())
                .orgCode(userBean.getOrgCode())
                .errNum(insertErrors.size())
                .successNum(listYmp.size()).build().insert();

        JSONObject obj = JSONUtil.createObj();
        obj.set("empList", listYmp);
        obj.set("phoneRepetitions", phoneRepetitions);
        obj.set("idCardRepetitions", idCardRepetitions);
        obj.set("insertErrors", insertErrors);

        // listEl.stream().filter(i -> i !=
        // null).collect(Collectors.<QyzxEmpLogin>toList());
        return ResultUtil.data(obj, "导入员工档案成功!");
    }

    /**
     * 获取导入模板
     *
     * @param
     * @return
     * @throws IOException
     */
    @GetMapping(value = "/impoet_template")
    @ApiOperation(value = "8.获取导入模板", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 8)
    public Result<Object> getImpoetTemplate(HttpServletResponse response) throws IOException {
        ImportEmpDto ied = ImportEmpDto.builder().name("张三").phone("15219671123")
                // 证件类型 0:身份证;1:港澳居民来往内地通行证;2:台湾居民来往大陆通行证;3:外国护照;4:其他
                .zjType(0).zjNum("445381199611063586")
                // 工作性质 0全职、1实习生、2兼职、3劳务派遣、4劳务、5派遣、6外包、7退休返聘
                .jobType(0).rzTime("2010-10-10 10:10:10")
                // 试用期 0:无试用期;1:1个月;2:2个月;3:3个月;4:4个月;5:5个月;6:6个月(有试用期显示选项)
                .syq(1)
                // 性别 0:男;1:女
                .sex(0).build();
        List<ImportEmpDto> listAd = CollUtil.newArrayList(ied);
        // 通过工具类创建writer
        ExcelWriter writer = ExcelUtil.getWriter(true);

        // 自定义标题别名
        writer.addHeaderAlias("name", "姓名");
        writer.addHeaderAlias("phone", "手机号");
        writer.addHeaderAlias("sex", "性别");
        writer.addHeaderAlias("zjType", "证件类型 0:身份证;1:港澳居民来往内地通行证;2:台湾居民来往大陆通行证;3:外国护照;4:其他");
        writer.addHeaderAlias("zjNum", "证件号");
        writer.addHeaderAlias("jobType", "工作性质 0全职、1实习生、2兼职、3劳务派遣、4劳务、5派遣、6外包、7退休返聘");
        writer.addHeaderAlias("syq", "试用期 0:无试用期;1:1个月;2:2个月;3:3个月;4:4个月;5:5个月;6:6个月(有试用期显示选项)");
        writer.addHeaderAlias("rzTime", "入职日期");

        // 合并单元格后的标题行,使用默认标题样式
        writer.merge(7, "员工导入模板");
        writer.setFreezePane(2);
        writer.setColumnWidth(1, 15);
        writer.setColumnWidth(4, 22);
        writer.setColumnWidth(7, 20);
        // 一次性写出内容,使用默认样式,强制输出标题
        writer.write(listAd, true);

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=8timer_emp_import.xlsx");
        ServletOutputStream out = response.getOutputStream();
        writer.flush(out, true);

        // 关闭writer,释放内存
        writer.close();
        // 此处记得关闭输出Servlet流
        IoUtil.close(out);

        return ResultUtil.data(null, "获取模板成功");

    }

    /**
     * 导出员工
     *
     * @param
     * @return
     */
    @GetMapping(value = "/ygdas")
    @ApiOperation(value = "9.导出员工", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 9)
    public Result<List<YgglMainEmp>> selectygdas(@CurrentUser UserBean userBean) {
        List<YgglMainEmp> list = new LambdaQueryChainWrapper<YgglMainEmp>(ygglMainEmpMapper)
                .eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()).in(YgglMainEmp::getJobStatus, jobStatus.SHIYONG.getType(), jobStatus.ZHENSHI.getType(), jobStatus.LIZHIZHONG.getType()).list();
        return ResultUtil.data(list, "导出员工成功");
    }

    /**
     * 获取员工教育经历表
     *
     * @param
     * @return
     */
    @GetMapping(value = "/jyjlb")
    @ApiOperation(value = "10.获取员工教育经历表", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 10)
    public Result<List<YgglAttaJyjlb>> selectjyjlb(@CurrentUser UserBean userBean) {
        List<YgglAttaJyjlb> ygglAttaJyjlbss = YgglAttaJyjlb.builder().build().selectList(
                new QueryWrapper<YgglAttaJyjlb>().lambda().eq(YgglAttaJyjlb::getOrgCode, userBean.getOrgCode())
                        .eq(YgglAttaJyjlb::getEmpNum, userBean.getEmpNum()));
        return ResultUtil.data(ygglAttaJyjlbss);
    }

    // 获取员工教育经历表
    @GetMapping(value = "/jyjlb/{empNum}")
    @ApiOperation(value = "11.获取员工教育经历表(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 11)
    public Result<List<YgglAttaJyjlb>> selectjyjlb(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        List<YgglAttaJyjlb> ygglAttaJyjlbs = YgglAttaJyjlb.builder().build()
                .selectList(new QueryWrapper<YgglAttaJyjlb>().lambda()
                        .eq(YgglAttaJyjlb::getOrgCode, userBean.getOrgCode()).eq(YgglAttaJyjlb::getEmpNum, empNum));
        return ResultUtil.data(ygglAttaJyjlbs);
    }

    /**
     * 添加/修改员工教育经历表
     *
     * @param
     * @return
     */
    @PostMapping(value = "/jyjlb")
    @ApiOperation(value = "12.添加/修改员工教育经历表", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 12)
    public Result<YgglAttaJyjlb> addjyjlb(@CurrentUser UserBean userBean, @RequestBody YgglAttaJyjlb ygglAttaJyjlb) {
        ygglAttaJyjlb.setEmpNum(ygglAttaJyjlb.getEmpNum());
        ygglAttaJyjlb.setOrgCode(userBean.getOrgCode());
        ygglAttaJyjlb.insertOrUpdate();
        return ResultUtil.data(ygglAttaJyjlb, "修改员工教育经历表成功");
    }

    /**
     * 删除员工教育经历表
     *
     * @param
     * @return
     */
    @DeleteMapping(value = "/jyjlb/{id}")
    @ApiOperation(value = "13.删除员工教育经历表", httpMethod = "DELETE", notes = "接口发布说明")
    @ApiOperationSupport(order = 13)
    public Result<Boolean> deljyjlb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
        Integer orgCode = userBean.getOrgCode();
        return ResultUtil.data(YgglAttaJyjlb.builder().build().delete(new QueryWrapper<YgglAttaJyjlb>().lambda()
                .eq(YgglAttaJyjlb::getOrgCode, orgCode).eq(YgglAttaJyjlb::getId, id)), "删除员工教育经历表成功");
    }

    /**
     * 获取员工培训经历信息表
     *
     * @param
     * @return
     */
    @GetMapping(value = "/pxjlxxb")
    @ApiOperation(value = "14.获取员工培训经历信息表", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 14)
    public Result<List<YgglAttaPxjlxxb>> selectpxjlxxb(@CurrentUser UserBean userBean) {
        List<YgglAttaPxjlxxb> ygglAttaPxjlxxbs = YgglAttaPxjlxxb.builder().build()
                .selectList(new QueryWrapper<YgglAttaPxjlxxb>().lambda()
                        .eq(YgglAttaPxjlxxb::getOrgCode, userBean.getOrgCode())
                        .eq(YgglAttaPxjlxxb::getEmpNum, userBean.getEmpNum()));
        return ResultUtil.data(ygglAttaPxjlxxbs);
    }

    // 获取员工培训经历信息表
    @GetMapping(value = "/pxjlxxb/{empNum}")
    @ApiOperation(value = "15.获取员工培训经历信息表(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 15)
    public Result<List<YgglAttaPxjlxxb>> selectpxjlxxb(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        List<YgglAttaPxjlxxb> ygglAttaPxjlxxbs = YgglAttaPxjlxxb.builder().build()
                .selectList(new QueryWrapper<YgglAttaPxjlxxb>().lambda()
                        .eq(YgglAttaPxjlxxb::getOrgCode, userBean.getOrgCode()).eq(YgglAttaPxjlxxb::getEmpNum, empNum));
        return ResultUtil.data(ygglAttaPxjlxxbs);
    }

    /**
     * 添加/修改员工培训经历信息表
     *
     * @param
     * @return
     */
    @PostMapping(value = "/pxjlxxb")
    @ApiOperation(value = "16.添加/修改员工培训经历信息表", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 16)
    public Result<YgglAttaPxjlxxb> addpxjlxxb(@CurrentUser UserBean userBean,
                                              @RequestBody YgglAttaPxjlxxb ygglAttaPxjlxxb) {
        ygglAttaPxjlxxb.setEmpNum(ygglAttaPxjlxxb.getEmpNum());
        ygglAttaPxjlxxb.setOrgCode(userBean.getOrgCode());
        ygglAttaPxjlxxb.insertOrUpdate();
        return ResultUtil.data(ygglAttaPxjlxxb, "修改员工培训经历信息表成功");
    }

    /**
     * 删除员工培训经历信息表
     *
     * @param
     * @return
     */
    @DeleteMapping(value = "/pxjlxxb/{id}")
    @ApiOperation(value = "17.删除员工培训经历信息表", httpMethod = "DELETE", notes = "接口发布说明")
    @ApiOperationSupport(order = 17)
    public Result<Boolean> delpxjlxxb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
        Integer orgCode = userBean.getOrgCode();
        return ResultUtil.data(YgglAttaPxjlxxb.builder().build().delete(new QueryWrapper<YgglAttaPxjlxxb>().lambda()
                .eq(YgglAttaPxjlxxb::getOrgCode, orgCode).eq(YgglAttaPxjlxxb::getId, id)), "删除员工培训经历信息表成功");
    }

    /**
     * 获取员工工作经历表
     *
     * @param
     * @return
     */
    @GetMapping(value = "/gzjlb")
    @ApiOperation(value = "18.获取员工工作经历表", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 18)
    public Result<List<YgglAttaGzjlb>> selectgzjlb(@CurrentUser UserBean userBean) {
        List<YgglAttaGzjlb> ygglAttaGzjlbs = YgglAttaGzjlb.builder().build().selectList(
                new QueryWrapper<YgglAttaGzjlb>().lambda().eq(YgglAttaGzjlb::getOrgCode, userBean.getOrgCode())
                        .eq(YgglAttaGzjlb::getEmpNum, userBean.getEmpNum()));
        return ResultUtil.data(ygglAttaGzjlbs);
    }

    // 获取员工工作经历表
    @GetMapping(value = "/gzjlb/{empNum}")
    @ApiOperation(value = "19.获取员工工作经历表(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 19)
    public Result<List<YgglAttaGzjlb>> selectgzjlb(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        List<YgglAttaGzjlb> ygglAttaGzjlbs = YgglAttaGzjlb.builder().build()
                .selectList(new QueryWrapper<YgglAttaGzjlb>().lambda()
                        .eq(YgglAttaGzjlb::getOrgCode, userBean.getOrgCode()).eq(YgglAttaGzjlb::getEmpNum, empNum));
        return ResultUtil.data(ygglAttaGzjlbs);
    }

    /**
     * 添加/修改员工工作经历表
     *
     * @param
     * @return
     */
    @PostMapping(value = "/gzjlb")
    @ApiOperation(value = "20.添加/修改员工工作经历表", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 20)
    public Result<YgglAttaGzjlb> addgzjlb(@CurrentUser UserBean userBean, @RequestBody YgglAttaGzjlb ygglAttaGzjlb) {
        ygglAttaGzjlb.setEmpNum(ygglAttaGzjlb.getEmpNum());
        ygglAttaGzjlb.setOrgCode(userBean.getOrgCode());
        ygglAttaGzjlb.insertOrUpdate();
        return ResultUtil.data(ygglAttaGzjlb, "修改员工工作经历表成功");
    }

    /**
     * 删除员工工作经历表
     *
     * @param
     * @return
     */
    @DeleteMapping(value = "/gzjlb/{id}")
    @ApiOperation(value = "21.删除员工工作经历表", httpMethod = "DELETE", notes = "接口发布说明")
    @ApiOperationSupport(order = 21)
    public Result<Boolean> delgzjlb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
        Integer orgCode = userBean.getOrgCode();
        return ResultUtil.data(YgglAttaGzjlb.builder().build().delete(new QueryWrapper<YgglAttaGzjlb>().lambda()
                .eq(YgglAttaGzjlb::getOrgCode, orgCode).eq(YgglAttaGzjlb::getId, id)), "删除员工工作经历表成功");
    }

    /**
     * 获取员工职称信息表
     *
     * @param
     * @return
     */
    @GetMapping(value = "/zcxxb")
    @ApiOperation(value = "22.获取员工职称信息表", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 22)
    public Result<List<YgglAttaZcxxb>> selectzcxxb(@CurrentUser UserBean userBean) {
        List<YgglAttaZcxxb> ygglAttaZcxxbs = YgglAttaZcxxb.builder().build().selectList(
                new QueryWrapper<YgglAttaZcxxb>().lambda().eq(YgglAttaZcxxb::getOrgCode, userBean.getOrgCode())
                        .eq(YgglAttaZcxxb::getEmpNum, userBean.getEmpNum()));
        return ResultUtil.data(ygglAttaZcxxbs);
    }

    // 获取员工职称信息表
    @GetMapping(value = "/zcxxb/{empNum}")
    @ApiOperation(value = "23.获取员工职称信息表(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 23)
    public Result<List<YgglAttaZcxxb>> selectzcxxb(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        List<YgglAttaZcxxb> ygglAttaZcxxbs = YgglAttaZcxxb.builder().build()
                .selectList(new QueryWrapper<YgglAttaZcxxb>().lambda()
                        .eq(YgglAttaZcxxb::getOrgCode, userBean.getOrgCode()).eq(YgglAttaZcxxb::getEmpNum, empNum));
        return ResultUtil.data(ygglAttaZcxxbs);
    }

    /**
     * 添加/修改员工职称信息表
     *
     * @param
     * @return
     */
    @PostMapping(value = "/zcxxb")
    @ApiOperation(value = "24.添加/修改员工职称信息表", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 24)
    public Result<YgglAttaZcxxb> addzcxxb(@CurrentUser UserBean userBean, @RequestBody YgglAttaZcxxb ygglAttaZcxxb) {
        ygglAttaZcxxb.setEmpNum(ygglAttaZcxxb.getEmpNum());
        ygglAttaZcxxb.setOrgCode(userBean.getOrgCode());
        ygglAttaZcxxb.insertOrUpdate();
        return ResultUtil.data(ygglAttaZcxxb, "修改员工职称信息表成功");
    }

    /**
     * 删除员工职称信息表
     *
     * @param
     * @return
     */
    @DeleteMapping(value = "/zcxxb/{id}")
    @ApiOperation(value = "25.删除员工职称信息表", httpMethod = "DELETE", notes = "接口发布说明")
    @ApiOperationSupport(order = 25)
    public Result<Boolean> delzcxxb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
        Integer orgCode = userBean.getOrgCode();
        return ResultUtil.data(YgglAttaZcxxb.builder().build().delete(new QueryWrapper<YgglAttaZcxxb>().lambda()
                .eq(YgglAttaZcxxb::getOrgCode, orgCode).eq(YgglAttaZcxxb::getId, id)), "删除员工职称信息表成功");
    }

    /**
     * 获取员工证书证件表
     *
     * @param
     * @return
     */
    @GetMapping(value = "/zszjb")
    @ApiOperation(value = "26.获取员工证书证件表", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 26)
    public Result<List<YgglAttaZszjb>> selectzszjb(@CurrentUser UserBean userBean) {
        List<YgglAttaZszjb> ygglAttaZszjbs = YgglAttaZszjb.builder().build().selectList(
                new QueryWrapper<YgglAttaZszjb>().lambda().eq(YgglAttaZszjb::getOrgCode, userBean.getOrgCode())
                        .eq(YgglAttaZszjb::getEmpNum, userBean.getEmpNum()));
        return ResultUtil.data(ygglAttaZszjbs);
    }

    // 获取员工证书证件表
    @GetMapping(value = "/zszjb/{empNum}")
    @ApiOperation(value = "27.获取员工证书证件表(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 27)
    public Result<List<YgglAttaZszjb>> selectzszjb(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        List<YgglAttaZszjb> ygglAttaZszjbs = YgglAttaZszjb.builder().build()
                .selectList(new QueryWrapper<YgglAttaZszjb>().lambda()
                        .eq(YgglAttaZszjb::getOrgCode, userBean.getOrgCode()).eq(YgglAttaZszjb::getEmpNum, empNum));
        return ResultUtil.data(ygglAttaZszjbs);
    }

    /**
     * 添加/修改员工证书证件表
     *
     * @param
     * @return
     */
    @PostMapping(value = "/zszjb")
    @ApiOperation(value = "28.添加/修改员工证书证件表", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 28)
    public Result<YgglAttaZszjb> addzszjb(@CurrentUser UserBean userBean, @RequestBody YgglAttaZszjb ygglAttaZszjb) {
        ygglAttaZszjb.setEmpNum(ygglAttaZszjb.getEmpNum());
        ygglAttaZszjb.setOrgCode(userBean.getOrgCode());
        ygglAttaZszjb.insertOrUpdate();
        return ResultUtil.data(ygglAttaZszjb, "修改员工证书证件表成功");
    }

    /**
     * 删除员工证书证件表
     *
     * @param
     * @return
     */
    @DeleteMapping(value = "/zszjb/{id}")
    @ApiOperation(value = "29.删除员工证书证件表", httpMethod = "DELETE", notes = "接口发布说明")
    @ApiOperationSupport(order = 29)
    public Result<Boolean> delzszjb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
        Integer orgCode = userBean.getOrgCode();
        return ResultUtil.data(YgglAttaZszjb.builder().build().delete(new QueryWrapper<YgglAttaZszjb>().lambda()
                .eq(YgglAttaZszjb::getOrgCode, orgCode).eq(YgglAttaZszjb::getId, id)), "删除员工证书证件表成功");
    }

    /**
     * 获取员工联系信息表
     *
     * @param
     * @return
     */
    @GetMapping(value = "/lxxxb")
    @ApiOperation(value = "30.获取员工联系信息表", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 30)
    public Result<List<YgglAttaLxxxb>> selectlxxxb(@CurrentUser UserBean userBean) {
        List<YgglAttaLxxxb> ygglAttaLxxxbs = YgglAttaLxxxb.builder().build().selectList(
                new QueryWrapper<YgglAttaLxxxb>().lambda().eq(YgglAttaLxxxb::getOrgCode, userBean.getOrgCode())
                        .eq(YgglAttaLxxxb::getEmpNum, userBean.getEmpNum()));
        return ResultUtil.data(ygglAttaLxxxbs);
    }

    // 获取员工联系信息表
    @GetMapping(value = "/lxxxb/{empNum}")
    @ApiOperation(value = "31.获取员工联系信息表(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 31)
    public Result<List<YgglAttaLxxxb>> selectlxxxb(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        List<YgglAttaLxxxb> ygglAttaLxxxbs = YgglAttaLxxxb.builder().build()
                .selectList(new QueryWrapper<YgglAttaLxxxb>().lambda()
                        .eq(YgglAttaLxxxb::getOrgCode, userBean.getOrgCode()).eq(YgglAttaLxxxb::getEmpNum, empNum));
        return ResultUtil.data(ygglAttaLxxxbs);
    }

    /**
     * 添加/修改员工联系信息表
     *
     * @param
     * @return
     */
    @PostMapping(value = "/lxxxb")
    @ApiOperation(value = "32.添加/修改员工联系信息表", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 32)
    public Result<YgglAttaLxxxb> addlxxxb(@CurrentUser UserBean userBean, @RequestBody YgglAttaLxxxb ygglAttaLxxxb) {
        ygglAttaLxxxb.setEmpNum(ygglAttaLxxxb.getEmpNum());
        ygglAttaLxxxb.setOrgCode(userBean.getOrgCode());
        ygglAttaLxxxb.insertOrUpdate();
        return ResultUtil.data(ygglAttaLxxxb, "修改员工联系信息表成功");
    }

    /**
     * 删除员工联系信息表
     *
     * @param
     * @return
     */
    @DeleteMapping(value = "/lxxxb/{id}")
    @ApiOperation(value = "33.删除员工联系信息表", httpMethod = "DELETE", notes = "接口发布说明")
    @ApiOperationSupport(order = 33)
    public Result<Boolean> dellxxxb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
        Integer orgCode = userBean.getOrgCode();
        return ResultUtil.data(YgglAttaLxxxb.builder().build().delete(new QueryWrapper<YgglAttaLxxxb>().lambda()
                .eq(YgglAttaLxxxb::getOrgCode, orgCode).eq(YgglAttaLxxxb::getId, id)), "删除员工联系信息表成功");
    }

    /**
     * 获取员工紧急联系人表
     *
     * @param
     * @return
     */
    @GetMapping(value = "/jjlxr")
    @ApiOperation(value = "34.获取员工紧急联系人表", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 34)
    public Result<List<YgglAttaJjlxr>> selectjjlxr(@CurrentUser UserBean userBean) {
        List<YgglAttaJjlxr> ygglAttaJjlxrs = YgglAttaJjlxr.builder().build().selectList(
                new QueryWrapper<YgglAttaJjlxr>().lambda().eq(YgglAttaJjlxr::getOrgCode, userBean.getOrgCode())
                        .eq(YgglAttaJjlxr::getEmpNum, userBean.getEmpNum()));
        return ResultUtil.data(ygglAttaJjlxrs);
    }

    // 获取员工紧急联系人表
    @GetMapping(value = "/jjlxr/{empNum}")
    @ApiOperation(value = "35.获取员工紧急联系人表(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 35)
    public Result<List<YgglAttaJjlxr>> selectjjlxr(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        List<YgglAttaJjlxr> ygglAttaJjlxrs = YgglAttaJjlxr.builder().build()
                .selectList(new QueryWrapper<YgglAttaJjlxr>().lambda()
                        .eq(YgglAttaJjlxr::getOrgCode, userBean.getOrgCode()).eq(YgglAttaJjlxr::getEmpNum, empNum));
        return ResultUtil.data(ygglAttaJjlxrs);
    }

    /**
     * 添加/修改员工紧急联系人表
     *
     * @param
     * @return
     */
    @PostMapping(value = "/jjlxr")
    @ApiOperation(value = "36.添加/修改员工紧急联系人表", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 36)
    public Result<YgglAttaJjlxr> addjjlxr(@CurrentUser UserBean userBean, @RequestBody YgglAttaJjlxr ygglAttaJjlxr) {
        ygglAttaJjlxr.setEmpNum(ygglAttaJjlxr.getEmpNum());
        ygglAttaJjlxr.setOrgCode(userBean.getOrgCode());
        ygglAttaJjlxr.insertOrUpdate();
        return ResultUtil.data(ygglAttaJjlxr, "修改员工紧急联系人表成功");
    }

    /**
     * 删除员工紧急联系人表
     *
     * @param
     * @return
     */
    @DeleteMapping(value = "/jjlxr/{id}")
    @ApiOperation(value = "37.删除员工紧急联系人表", httpMethod = "DELETE", notes = "接口发布说明")
    @ApiOperationSupport(order = 37)
    public Result<Boolean> deljjlxr(@CurrentUser UserBean userBean, @PathVariable Integer id) {
        Integer orgCode = userBean.getOrgCode();
        return ResultUtil.data(YgglAttaJjlxr.builder().build().delete(new QueryWrapper<YgglAttaJjlxr>().lambda()
                .eq(YgglAttaJjlxr::getOrgCode, orgCode).eq(YgglAttaJjlxr::getId, id)), "删除员工紧急联系人表成功");
    }

    // 获取工资卡信息

    /**
     * 获取员工工资卡信息
     *
     * @param
     * @return
     */
    @GetMapping(value = "/gzk")
    @ApiOperation(value = "38.获取员工工资卡信息", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 38)
    public Result<List<YgglAttaGzk>> selectgzk(@CurrentUser UserBean userBean) {
        List<YgglAttaGzk> ygglAttaGzks = YgglAttaGzk.builder().build()
                .selectList(new QueryWrapper<YgglAttaGzk>().lambda().eq(YgglAttaGzk::getOrgCode, userBean.getOrgCode())
                        .eq(YgglAttaGzk::getEmpNum, userBean.getEmpNum()));
        return ResultUtil.data(ygglAttaGzks);
    }

    // 获取工资卡信息
    @GetMapping(value = "/gzk/{empNum}")
    @ApiOperation(value = "39.获取员工工资卡信息(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 39)
    public Result<List<YgglAttaGzk>> selectgzk(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        List<YgglAttaGzk> ygglAttaGzks = YgglAttaGzk.builder().build().selectList(new QueryWrapper<YgglAttaGzk>()
                .lambda().eq(YgglAttaGzk::getOrgCode, userBean.getOrgCode()).eq(YgglAttaGzk::getEmpNum, empNum));
        return ResultUtil.data(ygglAttaGzks);
    }

    /**
     * 添加/修改工资卡信息
     *
     * @param
     * @return
     */
    @PostMapping(value = "/gzk")
    @ApiOperation(value = "40.添加/修改工资卡信息", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 40)
    public Result<YgglAttaGzk> addgzk(@CurrentUser UserBean userBean, @RequestBody YgglAttaGzk ygglAttaGzk) {
        ygglAttaGzk.setEmpNum(ygglAttaGzk.getEmpNum());
        ygglAttaGzk.setOrgCode(userBean.getOrgCode());
        ygglAttaGzk.insertOrUpdate();
        return ResultUtil.data(ygglAttaGzk, "修改工资卡信息成功");
    }

    /**
     * 删除工资卡信息
     *
     * @param
     * @return
     */
    @DeleteMapping(value = "/gzk/{id}")
    @ApiOperation(value = "41.删除工资卡信息", httpMethod = "DELETE", notes = "接口发布说明")
    @ApiOperationSupport(order = 41)
    public Result<Boolean> delgzk(@CurrentUser UserBean userBean, @PathVariable Integer id) {
        Integer orgCode = userBean.getOrgCode();
        return ResultUtil.data(YgglAttaGzk.builder().build().delete(new QueryWrapper<YgglAttaGzk>().lambda()
                .eq(YgglAttaGzk::getOrgCode, orgCode).eq(YgglAttaGzk::getId, id)), "删除工资卡信息成功");
    }

    /**
     * 获取员工合同信息表
     *
     * @param
     * @return
     */
    @GetMapping(value = "/htxxb")
    @ApiOperation(value = "42.获取员工合同信息表", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 42)
    public Result<List<YgglAttaHtxxb>> selecthtxxb(@CurrentUser UserBean userBean) {
        List<YgglAttaHtxxb> ygglAttaHtxxbs = YgglAttaHtxxb.builder().build().selectList(
                new QueryWrapper<YgglAttaHtxxb>().lambda().eq(YgglAttaHtxxb::getOrgCode, userBean.getOrgCode())
                        .eq(YgglAttaHtxxb::getEmpNum, userBean.getEmpNum()));
        return ResultUtil.data(ygglAttaHtxxbs);
    }

    // 获取员工合同信息表
    @GetMapping(value = "/htxxb/{empNum}")
    @ApiOperation(value = "43.获取员工合同信息表(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 43)
    public Result<List<YgglAttaHtxxb>> selecthtxxb(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        List<YgglAttaHtxxb> ygglAttaHtxxbs = YgglAttaHtxxb.builder().build()
                .selectList(new QueryWrapper<YgglAttaHtxxb>().lambda().eq(YgglAttaHtxxb::getDeleteFlag, 0)
                        .eq(YgglAttaHtxxb::getOrgCode, userBean.getOrgCode()).eq(YgglAttaHtxxb::getEmpNum, empNum));
        return ResultUtil.data(ygglAttaHtxxbs);
    }

    /**
     * 添加/修改员工合同信息表
     *
     * @param
     * @return
     */
    @PostMapping(value = "/htxxb")
    @ApiOperation(value = "44.添加/修改员工合同信息表", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 44)
    public Result<YgglAttaHtxxb> addhtxxb(@CurrentUser UserBean userBean, @RequestBody YgglAttaHtxxb ygglAttaHtxxb) {
        ygglAttaHtxxb.setEmpNum(ygglAttaHtxxb.getEmpNum());
        ygglAttaHtxxb.setOrgCode(userBean.getOrgCode());
        ygglAttaHtxxb.insertOrUpdate();
        return ResultUtil.data(ygglAttaHtxxb, "修改员工合同信息表成功");
    }

    /**
     * 删除员工合同信息表
     *
     * @param
     * @return
     */
    @DeleteMapping(value = "/htxxb/{id}")
    @ApiOperation(value = "45.删除员工合同信息表", httpMethod = "DELETE", notes = "接口发布说明")
    @ApiOperationSupport(order = 45)
    public Result<Boolean> delhtxxb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
        Integer orgCode = userBean.getOrgCode();
        return ResultUtil.data(YgglAttaHtxxb.builder().build().delete(new QueryWrapper<YgglAttaHtxxb>().lambda()
                .eq(YgglAttaHtxxb::getOrgCode, orgCode).eq(YgglAttaHtxxb::getId, id)), "删除员工合同信息表成功");
    }

    /**
     * 获取员工材料附件表
     *
     * @param
     * @return
     */
    @GetMapping(value = "/clfjb")
    @ApiOperation(value = "46.获取员工材料附件表", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 46)
    public Result<List<YgglAttaClfjb>> selectclfjb(@CurrentUser UserBean userBean) {
        List<YgglAttaClfjb> ygglAttaClfjbs = YgglAttaClfjb.builder().build().selectList(
                new QueryWrapper<YgglAttaClfjb>().lambda().eq(YgglAttaClfjb::getOrgCode, userBean.getOrgCode())
                        .eq(YgglAttaClfjb::getEmpNum, userBean.getEmpNum()));
        return ResultUtil.data(ygglAttaClfjbs);
    }

    // 获取员工材料附件表
    @GetMapping(value = "/clfjb/{empNum}")
    @ApiOperation(value = "47.获取员工材料附件表(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 47)
    public Result<List<YgglAttaClfjb>> selectclfjb(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        List<YgglAttaClfjb> ygglAttaClfjbs = YgglAttaClfjb.builder().build()
                .selectList(new QueryWrapper<YgglAttaClfjb>().lambda()
                        .eq(YgglAttaClfjb::getOrgCode, userBean.getOrgCode()).eq(YgglAttaClfjb::getEmpNum, empNum));
        return ResultUtil.data(ygglAttaClfjbs);
    }

    /**
     * 添加/修改员工材料附件表
     *
     * @param
     * @return
     */
    @PostMapping(value = "/clfjb")
    @ApiOperation(value = "48.添加/修改员工材料附件表", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 48)
    public Result<YgglAttaClfjb> addclfjb(@CurrentUser UserBean userBean, @RequestBody YgglAttaClfjb ygglAttaClfjb) {
        ygglAttaClfjb.setOrgCode(userBean.getOrgCode());
        ygglAttaClfjb.setEmpNum(ygglAttaClfjb.getEmpNum());
        ygglAttaClfjb.insertOrUpdate();
        return ResultUtil.data(ygglAttaClfjb, "修改员工材料附件表成功");
    }

    /**
     * 删除员工材料附件表
     *
     * @param
     * @return
     */
    @DeleteMapping(value = "/clfjb/{id}")
    @ApiOperation(value = "49.删除员工材料附件表", httpMethod = "DELETE", notes = "接口发布说明")
    @ApiOperationSupport(order = 49)
    public Result<Boolean> delclfjb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
        Integer orgCode = userBean.getOrgCode();
        return ResultUtil.data(YgglAttaClfjb.builder().build().delete(new QueryWrapper<YgglAttaClfjb>().lambda()
                .eq(YgglAttaClfjb::getOrgCode, orgCode).eq(YgglAttaClfjb::getId, id)), "删除员工材料附件表成功");
    }

    /**
     * 获取成长记录表
     *
     * @param
     * @return
     */
    @GetMapping(value = "/czjlb")
    @ApiOperation(value = "50.获取成长记录表", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 50)
    public Result<List<YgglAttaCzjlb>> selectczjlb(@CurrentUser UserBean userBean) {
        List<YgglAttaCzjlb> ygglAttaCzjlbs = YgglAttaCzjlb.builder().build().selectList(
                new QueryWrapper<YgglAttaCzjlb>().lambda().eq(YgglAttaCzjlb::getOrgCode, userBean.getOrgCode())
                        .eq(YgglAttaCzjlb::getEmpNum, userBean.getEmpNum()));
        return ResultUtil.data(ygglAttaCzjlbs);
    }

    // 获取成长记录表
    @GetMapping(value = "/czjlb/{empNum}")
    @ApiOperation(value = "51.获取成长记录表(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 51)
    public Result<List<YgglAttaCzjlb>> selectczjlb(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        List<YgglAttaCzjlb> ygglAttaCzjlbs = YgglAttaCzjlb.builder().build()
                .selectList(new QueryWrapper<YgglAttaCzjlb>().lambda()
                        .eq(YgglAttaCzjlb::getOrgCode, userBean.getOrgCode()).eq(YgglAttaCzjlb::getEmpNum, empNum));
        return ResultUtil.data(ygglAttaCzjlbs);
    }

    /**
     * 添加/修改成长记录表
     *
     * @param
     * @return
     */
    @PostMapping(value = "/czjlb")
    @ApiOperation(value = "52.添加/修改成长记录表", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 52)
    public Result<YgglAttaCzjlb> addczjlb(@CurrentUser UserBean userBean, @RequestBody YgglAttaCzjlb ygglAttaCzjlb) {
        ygglAttaCzjlb.setEmpNum(ygglAttaCzjlb.getEmpNum());
        ygglAttaCzjlb.setOrgCode(userBean.getOrgCode());
        ygglAttaCzjlb.insertOrUpdate();
        return ResultUtil.data(ygglAttaCzjlb, "修改成长记录表成功");
    }

    /**
     * 获取单个离职员工信息(管)
     *
     * @param
     * @return
     */
    @GetMapping(value = "/lzb/{empNum}")
    @ApiOperation(value = "53.获取单个离职员工信息(管)", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 53)
    public Result<YgglMainLzb> selectlzb(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {
        YgglMainLzb lzyg = new LambdaQueryChainWrapper<YgglMainLzb>(ygglMainLzbMapper)
                .eq(YgglMainLzb::getOrgCode, userBean.getOrgCode()).eq(YgglMainLzb::getEmpNum, empNum).one();
        return ResultUtil.data(lzyg);
    }

    /**
     * 员工转正 0-1
     *
     * @param
     * @return
     */
    @PostMapping(value = "/ygzz")
    @ApiOperation(value = "54.员工转正", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 54)
    public Result<Void> ygzz(@CurrentUser UserBean userBean, @RequestBody YgzzDto ygzzDto) {
        Integer ogwid = null;
        YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, ygzzDto.getEmpNum()).eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()));
        if (ygglMainEmp.getBmgwId() != null) {
            ogwid = ygglMainEmp.getBmgwId();
        }
        ygglMainEmp.setJobStatus(jobStatus.ZHENSHI.getType());
        ygglMainEmp.setZzTime(ygzzDto.getZzTime());
        ygglMainEmp.setSjzzTime(ygzzDto.getSjzzTime() == null ? new Date() : ygzzDto.getSjzzTime());
        ygglMainEmp.setZzRemark(ygzzDto.getZzRemark());
        ygglMainEmp.setBmgwId(ygzzDto.getBmgwId());
        ygglMainEmp.updateById();
        /*增加一条调岗记录*/
//		orgCode
        List<Integer> list = Lists.newArrayList();
        list.add(ygzzDto.getEmpNum());
        zzglLogDgjlMapper.insertbyaddemp(list, userBean.getEmpNum(), ygzzDto.getBmgwId(), ogwid, userBean.getOrgCode(),
                ygzzDto.getZzRemark(), 1);

        return ResultUtil.success("转正成功!");
    }

    /**
     * 计划离职 type1-2
     *
     * @param
     * @return
     */
    @PostMapping(value = "/addlzjh")
    @ApiOperation(value = "55.添加离职计划", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 55)
    public Result<YgglMainLzb> addjhlz(@CurrentUser UserBean userBean, @RequestBody LzygQueryDto lzygQueryDto) {

        Integer empNum = lzygQueryDto.getEmpNum();

        YgglMainEmp ygglMainEmp = ygglMainEmpMapper.selectOne(new QueryWrapper<YgglMainEmp>().lambda()
                .eq(YgglMainEmp::getEmpNum, empNum)
                .eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()));

        if (ygglMainEmp.getJobStatus() == jobStatus.LIZHIZHONG.getType()) {
            return ResultUtil.success("你已在离职中");
        }

        YgglMainLzb ygglMainLzb = YgglMainLzb.builder().empNum(lzygQueryDto.getEmpNum()).build();
        // 移动员工表数据到离职表
        BeanUtil.copyProperties(ygglMainEmp, ygglMainLzb, "before_leaving_sts");
        ygglMainLzb.insert();

        YgglMainEmp.builder().empNum(lzygQueryDto.getEmpNum()).jobStatus(jobStatus.LIZHIZHONG.getType())
                .beforeLeavingSts(ygglMainEmp.getJobStatus()).build()
                .update(new UpdateWrapper<YgglMainEmp>().lambda()
                        .eq(YgglMainEmp::getEmpNum, empNum)
                        .eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()));
        //设置员工自定义工号工号
        String jobNum = StringUtils.isEmpty(ygglMainEmp.getCustomNum()) ? ygglMainEmp.getEmpNum().toString() : ygglMainEmp.getCustomNum();
        YgglMainLzb.builder().jobStatus(jobStatus.LIZHIZHONG.getType()).lzTime(lzygQueryDto.getLzTime())
                .lzyy(lzygQueryDto.getLzyy()).lzbz(lzygQueryDto.getLzbz()).jobNum(jobNum).build()
                .update(new UpdateWrapper<YgglMainLzb>().lambda()
                        .eq(YgglMainLzb::getEmpNum, empNum)
                        .eq(YgglMainLzb::getOrgCode, userBean.getOrgCode()));
        List<Integer> list = Lists.newArrayList();
        list.add(empNum);
        zzglLogDgjlMapper.insertbyaddemp(list, userBean.getEmpNum(), null, null, userBean.getOrgCode(),
                lzygQueryDto.getLzyy(), 3);
        return ResultUtil.data(ygglMainLzb, "添加待离职员工成功");
    }

    /**
     * 确认离职 type2-3
     *
     * @param
     * @return
     */
    @PostMapping(value = "/qrlz")
    @ApiOperation(value = "56.确认离职", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 56)
    public Result<Void> addlzb(@CurrentUser UserBean userBean, @RequestBody LzygQueryDto lzygQueryDto) {
        Integer empNum = lzygQueryDto.getEmpNum();
        // 删除员工档案表
        ygglMainEmpMapper.delete(new QueryWrapper<YgglMainEmp>().lambda()
                .eq(YgglMainEmp::getEmpNum, empNum)
                .eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()));

        YgglMainLzb.builder().empNum(empNum).jobStatus(YgEnumInterface.jobStatus.YILIZHI.getType()).sjlzTime(new Date())
                .build().update(new UpdateWrapper<YgglMainLzb>().lambda()
                .eq(YgglMainLzb::getEmpNum, empNum)
                .eq(YgglMainLzb::getOrgCode, userBean.getOrgCode()));

        LambdaQueryWrapper<QyzxEmpEntAsso> queryWrapper = new QueryWrapper<QyzxEmpEntAsso>().lambda()
                .eq(QyzxEmpEntAsso::getEmpNum, empNum)
                .eq(QyzxEmpEntAsso::getOrgCode, userBean.getOrgCode());

        // 确认离职 删除员工关联表
        qyzxEmpEntAssoMapper.delete(queryWrapper);

        // 初始化 部门主管
        zzglBmgwMMapper.update(ZzglBmgwM.builder().leader(null).build(),
                new UpdateWrapper<ZzglBmgwM>().lambda()
                        .eq(ZzglBmgwM::getOrgCode, userBean.getOrgCode())
                        .eq(ZzglBmgwM::getLeader, empNum));

        // 更新当前企业
        List<QyzxEmpEntAsso> listEEA = qyzxEmpEntAssoMapper.selectList(new QueryWrapper<QyzxEmpEntAsso>().lambda()
                .eq(QyzxEmpEntAsso::getEmpNum, empNum));
        if (listEEA != null && listEEA.size() > 0) {
            QyzxEmpLogin.builder().id(empNum).orgId(CollUtil.getFirst(listEEA).getOrgCode()).build().updateById();
        }

        QyzxEmpLogin.builder().build().delete(new QueryWrapper<QyzxEmpLogin>().lambda().eq(QyzxEmpLogin::getOrgId, userBean.getOrgCode()).eq(QyzxEmpLogin::getId, empNum));

        KqglAssoYhkqz.builder().build().delete(new QueryWrapper<KqglAssoYhkqz>().lambda().eq(KqglAssoYhkqz::getUserid, empNum).eq(KqglAssoYhkqz::getQyid, userBean.getOrgCode()));

        try {
            realtimeupdate.AttendanceTask(userBean.getOrgCode(), empNum, 2, null);

            redisUtil.set("BlockUser" + empNum, "BlockUser", session_timeout);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return ResultUtil.success("确认离职员工成功");
    }

    /**
     * 放弃离职 type 2-1
     *
     * @param
     * @return
     */
    @PostMapping(value = "/fqlz")
    @ApiOperation(value = "57.放弃离职", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 57)
    public Result<Void> fqlz(@CurrentUser UserBean userBean, @RequestBody LzygQueryDto lzygQueryDto) {

        YgglMainEmp ygglMainEmp = ygglMainEmpMapper
                .selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, lzygQueryDto.getEmpNum())
                        .eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()));

        YgglMainEmp.builder().jobStatus(ygglMainEmp.getBeforeLeavingSts()).build()
                .update(new UpdateWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, lzygQueryDto.getEmpNum()));
        // 删除离职表
        YgglMainLzb.builder().id(lzygQueryDto.getEmpNum()).build()
                .delete(new QueryWrapper<YgglMainLzb>().lambda().eq(YgglMainLzb::getEmpNum, lzygQueryDto.getEmpNum()));

        return ResultUtil.success("放弃成功");
    }

    @PostMapping(value = "/tzlzyy")
    @ApiOperation(value = "58.调整离职", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 58)
    public Result<YgglMainLzb> tzlzyy(@CurrentUser UserBean userBean, @RequestBody YgglMainLzb ygglMainLzb) {

        if (ygglMainLzb.getEmpNum() != null) {
            ygglMainLzb
                    .update(new UpdateWrapper<YgglMainLzb>().lambda().eq(YgglMainLzb::getOrgCode, userBean.getOrgCode())
                            .eq(YgglMainLzb::getEmpNum, ygglMainLzb.getEmpNum()));
            return ResultUtil.data(ygglMainLzb, "修改成功");
        }
        return ResultUtil.error("请确认该员工是否存在!");

    }

    /**
     * 查询离职员工列表
     *
     * @param
     * @return
     */
    @PostMapping(value = "/querylzyg")
    @ApiOperation(value = "59.查询离职员工列表", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 59)
    public Result<Object> querylzyg(@CurrentUser UserBean userBean, @RequestBody LzbQueryDto lzygQueryDto) {
        lzygQueryDto.setOrgCode(userBean.getOrgCode());

        IPage<YgglMainLzb> page = new Page<YgglMainLzb>(
                lzygQueryDto.getCurrentPage() == null ? 1 : lzygQueryDto.getCurrentPage(),
                lzygQueryDto.getTotalPage() == null ? 10 : lzygQueryDto.getTotalPage());
        List<YgglMainLzb> lzb = ygglMainLzbMapper.queryLzb(page, lzygQueryDto);
        return ResultUtil.data(page, lzb, "离职员工搜索成功");
    }

    /**
     * 展示民族/展示所有民族
     *
     * @param
     * @return
     */
    @PostMapping(value = "/mz/{id}")
    @ApiOperation(value = "60.展示民族/展示所有民族", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 60)
    public Result<List<NationClass>> selectmzs(@PathVariable Integer id) {
        if (id == null || id == 0) {
            List<NationClass> allmz = new LambdaQueryChainWrapper<NationClass>(nationClassMapper).list();
            return ResultUtil.data(allmz, "展示所有民族");
        }
        List<NationClass> mz = new LambdaQueryChainWrapper<NationClass>(nationClassMapper).eq(NationClass::getNumber, id).list();
        return ResultUtil.data(mz, "展示该民族");
    }

    @Autowired
    CommonAreaMapper commonAreaMapper;

    /**
     * 籍贯树
     *
     * @param
     * @return
     */
    @GetMapping(value = "/native_place")
    @ApiOperation(value = "61.籍贯树", httpMethod = "GET", notes = "籍贯树")
    @ApiOperationSupport(order = 61)
    public Result<List<CommonArea>> selectNativePlace() {

        List<CommonArea> listCommonArea = commonAreaMapper.AllAreaForTree();
        return ResultUtil.data(listCommonArea);

    }

    /**
     * 查询员工列表
     *
     * @param
     * @return
     */
    @GetMapping(value = "/queryemp")
    @ApiOperation(value = "62.查询员工列表", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 62)
    public Result<List<YgQueryDto>> queryEmpMessage(@CurrentUser UserBean userBean) {
        List<YgQueryDto> ygQueryDto = ygglMainEmpMapper.queryEmpMessage(userBean.getOrgCode(), 0);
        for (YgQueryDto yg : ygQueryDto) {
            if (StringUtil.isEmpty(yg.getHeadUrl())) {
                yg.setHeadUrl("");
            }
        }
        return ResultUtil.data(ygQueryDto);
    }

    /*************** 统计图 ***************/
    /**
     * 查询统计图
     *
     * @return 成功信息
     */
    @GetMapping("/yggl")
    @ApiOperation(value = "63.获取员工管理统计图信息", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 63)
    public Result<Map<String, Object>> queryYgglCartogram(@CurrentUser UserBean userBean) {

        Map<String, Object> map = new HashMap<String, Object>();
        YgglCartogramDto ygglCartogramDto1 = ygglMainEmpMapper.queryPositive(userBean);
        YgglCartogramDto ygglCartogramDto2 = ygglMainEmpMapper.queryAvgAge(userBean);
        YgglCartogramDto ygglCartogramDto3 = ygglMainEmpMapper.queryInduction(userBean);
        YgglCartogramDto ygglCartogramDto4 = ygglMainEmpMapper.queryInservice(userBean);
        YgglCartogramDto ygglCartogramDto5 = ygglMainLzbMapper.queryDeparture(userBean);

        List<YgglCartogramDto> ygglCartogramDto6 = ygglMainEmpMapper.queryDepartmentNum(userBean);
        List<YgglCartogramDto> ygglCartogramDto7 = ygglMainEmpMapper.queryEducation(userBean);
        List<YgglCartogramDto> ygglCartogramDto8 = ygglMainEmpMapper.queryJobsNum(userBean);
        List<YgglCartogramDto> ygglCartogramDto9 = ygglMainEmpMapper.queryEmpAge(userBean);
        List<YgglCartogramDto> ygglCartogramDto10 = ygglMainEmpMapper.queryNativeplace(userBean);
        List<YgglCartogramDto> ygglCartogramDto11 = ygglMainEmpMapper.queryWorkingAge(userBean);

        map.put("positive", ygglCartogramDto1.getPositive());
        if (ygglCartogramDto2 != null) {
            map.put("avgAge", ygglCartogramDto2.getAvgAge());
        }
        map.put("induction", ygglCartogramDto3.getInduction());
        map.put("probation", ygglCartogramDto4.getProbation());
        map.put("regular", ygglCartogramDto4.getRegular());
        map.put("departure", ygglCartogramDto5.getDepartureNum());

        map.put("department", ygglCartogramDto6);
        map.put("education", ygglCartogramDto7);
        map.put("jobs", ygglCartogramDto8);
        map.put("empAge", ygglCartogramDto9);
        map.put("nativeplace", ygglCartogramDto10);
        map.put("workingAge", ygglCartogramDto11);

        return ResultUtil.data(map);
    }

    /**
     * 员工信息统计图
     *
     * @return 成功信息(weng)
     */
    @GetMapping("/Cartogram")
    @ApiOperation(value = "64.获取员工管理统计图信息", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 64)
    public Result<YgCartogramDto> ygCartogram(@CurrentUser UserBean userBean) {
        Integer orgCode = userBean.getOrgCode();
        List<YgbintuDto> bintu = ygglMainEmpMapper.rsybp(orgCode);

        Map<String, Long> gw = bintu.stream().collect(Collectors.groupingBy(YgbintuDto::getGw, Collectors.counting()));
        List<YgKVDto> gwList = new ArrayList<YgKVDto>();
        for (Map.Entry<String, Long> entry : gw.entrySet()) {
            gwList.add(new YgKVDto(entry.getKey(), entry.getValue().toString()));
        }
        Map<String, Long> bm = bintu.stream().collect(Collectors.groupingBy(YgbintuDto::getBm, Collectors.counting()));
        List<YgKVDto> bmList = new ArrayList<YgKVDto>();
        for (Map.Entry<String, Long> entry : bm.entrySet()) {
            bmList.add(new YgKVDto(entry.getKey(), entry.getValue().toString()));
        }
        Map<String, Long> edu = bintu.stream()
                .collect(Collectors.groupingBy(YgbintuDto::getEduname, Collectors.counting()));
        List<YgKVDto> eduList = new ArrayList<YgKVDto>();
        for (Map.Entry<String, Long> entry : edu.entrySet()) {
            eduList.add(new YgKVDto(entry.getKey(), entry.getValue().toString()));
        }
        Map<Integer, Long> jobStatus = bintu.stream()
                .collect(Collectors.groupingBy(YgbintuDto::getJobStatus, Collectors.counting()));
        List<YgKVDto> jobStatusList = new ArrayList<YgKVDto>();
        for (Entry<Integer, Long> entry : jobStatus.entrySet()) {
            jobStatusList.add(new YgKVDto(entry.getKey().toString(), entry.getValue().toString()));
        }
        Map<String, Long> proname = bintu.stream()
                .collect(Collectors.groupingBy(YgbintuDto::getProname, Collectors.counting()));
        List<YgKVDto> pronameList = new ArrayList<YgKVDto>();
        for (Entry<String, Long> entry : proname.entrySet()) {
            pronameList.add(new YgKVDto(entry.getKey().toString(), entry.getValue().toString()));
        }
        Map<String, Integer> workage = YgEnumInterface.workage.choose(bintu);
        List<YgKVDto> workageList = new ArrayList<YgKVDto>();
        for (Entry<String, Integer> entry : workage.entrySet()) {
            workageList.add(new YgKVDto(entry.getKey().toString(), entry.getValue().toString()));
        }
        Map<String, Integer> age = YgEnumInterface.age.choose(bintu);
        List<YgKVDto> ageList = new ArrayList<YgKVDto>();
        for (Entry<String, Integer> entry : age.entrySet()) {
            ageList.add(new YgKVDto(entry.getKey().toString(), entry.getValue().toString()));
        }
        // 在职
        Integer zaizhi = jobStatus.get(YgEnumInterface.jobStatus.ZHENSHI.getType()).intValue()
                + jobStatus.get(YgEnumInterface.jobStatus.SHIYONG.getType()).intValue();
        // 本月新入职
        Integer xinruzhi = workage.get("本月新入职").intValue();
        // 本月离职
        Integer lizhi = ygglMainEmpMapper.benyueLz(orgCode);
        // 本月转正
        Integer zhuanzhen = ygglMainEmpMapper.benyueZz(orgCode);
        // 平均年龄
        Integer nianlin = age.get("平均年龄").intValue();
        YgCartogramDto ybp = new YgCartogramDto();
        ybp.setOnTheJob(zaizhi);
        ybp.setNewRecruits(xinruzhi);
        ybp.setDimission(lizhi);
        ybp.setRegularization(zhuanzhen);
        ybp.setAverageAge(nianlin);

        ybp.setDepartment(bmList);
        ybp.setPosition(gwList);
        ybp.setEdu(eduList);
        ybp.setJobStatus(jobStatusList);
        ybp.setProname(pronameList);
        ybp.setWorkage(workageList);
        ybp.setAge(ageList);
        return ResultUtil.data(ybp);
    }

    /**
     * 获取员工社保公积金
     *
     * @param
     * @return
     */
    @GetMapping(value = "/ygsbgjj")
    @ApiOperation(value = "65.获取员工社保公积金", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 65)
    public Result<YgglAttaSbgjj> selectygsbgjj(@CurrentUser UserBean userBean) {
        YgglAttaSbgjj ygglAttaSbgjj = YgglAttaSbgjj.builder().build().selectOne(
                new QueryWrapper<YgglAttaSbgjj>().lambda().eq(YgglAttaSbgjj::getOrgCode, userBean.getOrgCode())
                        .eq(YgglAttaSbgjj::getEmpNum, userBean.getEmpNum()));
        return ResultUtil.data(ygglAttaSbgjj);
    }

    /**
     * 获取员工社保公积金
     *
     * @param
     * @return
     */
    @GetMapping(value = "/ygsbgjj/{empNum}")
    @ApiOperation(value = "66.获取员工社保公积金", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 66)
    public Result<YgglAttaSbgjj> selectygsbgjj(@CurrentUser UserBean userBean, @PathVariable Integer empNum) {

        YgglAttaSbgjj ygglAttaSbgjj = YgglAttaSbgjj.builder().build()
                .selectOne(new QueryWrapper<YgglAttaSbgjj>().lambda().eq(YgglAttaSbgjj::getEmpNum, empNum));

        return ResultUtil.data(ygglAttaSbgjj);
    }

    /**
     * 添加/修改员工社保公积金
     *
     * @param
     * @return
     */
    @PostMapping(value = "/ygsbgjj")
    @ApiOperation(value = "67.添加/修改员工社保公积金", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 67)
    public Result<YgglAttaSbgjj> addygsbgjj(@CurrentUser UserBean userBean, @RequestBody YgglAttaSbgjj ygglAttaSbgjj) {
        Integer empNum = ygglAttaSbgjj.getEmpNum();
        if (empNum == null) {
            return ResultUtil.error();
        }
        YgglAttaSbgjj AttaSbgjj = YgglAttaSbgjj.builder().build()
                .selectOne(new QueryWrapper<YgglAttaSbgjj>().lambda().eq(YgglAttaSbgjj::getEmpNum, empNum));
        if (AttaSbgjj != null) {
            ygglAttaSbgjj.update(new UpdateWrapper<YgglAttaSbgjj>().lambda().eq(YgglAttaSbgjj::getEmpNum, empNum));
        } else {
            ygglAttaSbgjj.insert();
        }

        return ResultUtil.data(ygglAttaSbgjj);
    }

    /**
     * 删除员工社保公积金
     *
     * @param
     * @return
     */
    @DeleteMapping(value = "/ygsbgjj/{id}")
    @ApiOperation(value = "68.删除员工社保公积金", httpMethod = "DELETE", notes = "接口发布说明")
    @ApiOperationSupport(order = 68)
    public Result<Boolean> delygsbgjj(@CurrentUser UserBean userBean, @PathVariable Integer id) {
        Integer orgCode = userBean.getOrgCode();
        return ResultUtil.data(YgglAttaSbgjj.builder().build().delete(new QueryWrapper<YgglAttaSbgjj>().lambda()
                .eq(YgglAttaSbgjj::getOrgCode, orgCode).eq(YgglAttaSbgjj::getId, id)));
    }

    @GetMapping(value = "/sysRegion")
    @ApiOperation(value = "省市区字典(贼全)", httpMethod = "GET", notes = "接口发布说明")
    public Result<List<Tree<String>>> sysRegion() {
        List<SysRegion> nodeList = SysRegion.builder().build()
                .selectList(new LambdaQueryWrapper<SysRegion>().select(SysRegion::getKeyId, SysRegion::getRegionCode,
                        SysRegion::getRegionName, SysRegion::getMerName, SysRegion::getLevel, SysRegion::getZipCode));

        // 配置
        TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
        // 自定义属性名 都要默认值的
        treeNodeConfig.setIdKey("key_id");
        treeNodeConfig.setParentIdKey("region_code");
        // 最大递归深度
        treeNodeConfig.setDeep(4);

        List<Tree<String>> treeNodes = TreeUtil.build(nodeList, "0", treeNodeConfig, (treeNode, tree) -> {
            tree.setId(treeNode.getKeyId().toString());
            tree.setParentId(treeNode.getRegionCode().toString());
            tree.setName(treeNode.getRegionName());
            // 扩展属性 ...
            tree.putExtra("mer_name", treeNode.getMerName());
            tree.putExtra("zip_code", treeNode.getZipCode());
        });

        return ResultUtil.data(treeNodes);
    }

    /**
     * 获取登录人的相关信息
     *
     * @param
     * @return
     */
    @GetMapping(value = "/loginmessage")
    @ApiOperation(value = "69.获取登录人的相关信息", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 69)
    public Result<LoginInfoDto> loginmessage(@CurrentUser UserBean userBean) {
        Integer empNum = userBean.getEmpNum();
        Integer orgCode = userBean.getOrgCode();
        LoginInfoDto loginInfo = LoginInfoDto.builder().build();
        YgglMainEmp ygglMainEmp = new LambdaQueryChainWrapper<YgglMainEmp>(ygglMainEmpMapper)
                .select(YgglMainEmp::getBmgwId, YgglMainEmp::getName, YgglMainEmp::getRzTime, YgglMainEmp::getZzTime, YgglMainEmp::getSyq,
                        YgglMainEmp::getEmpNum)
                .eq(YgglMainEmp::getEmpNum, empNum).eq(YgglMainEmp::getOrgCode, orgCode).one();
        if (ygglMainEmp != null) {
            Integer gw = ygglMainEmp.getBmgwId();

            ZzglBmgwM gwObj = new LambdaQueryChainWrapper<ZzglBmgwM>(zzglBmgwMMapper)
                    .select(ZzglBmgwM::getUpId, ZzglBmgwM::getName).eq(ZzglBmgwM::getId, gw)
                    .eq(ZzglBmgwM::getOrgCode, orgCode).one();

            if (gwObj != null) {
                ZzglBmgwM bmObj = new LambdaQueryChainWrapper<ZzglBmgwM>(zzglBmgwMMapper)
                        .select(ZzglBmgwM::getId, ZzglBmgwM::getName).eq(ZzglBmgwM::getId, gwObj.getUpId())
                        .eq(ZzglBmgwM::getOrgCode, orgCode).one();
                loginInfo.setBmId(bmObj != null ? bmObj.getId() : null);
                loginInfo.setBmName(bmObj != null ? bmObj.getName() : null);
            }

            loginInfo.setEmpNum(ygglMainEmp.getEmpNum());
            loginInfo.setName(ygglMainEmp.getName());
            loginInfo.setGwId(gw);
            loginInfo.setGwName(gwObj != null ? gwObj.getName() : "");
            loginInfo.setEntryTime(ygglMainEmp.getRzTime());

            if (ygglMainEmp.getSyq() != null) {
//				System.out.println(ygglMainEmp.getSyq());
                Date expireDate = DateUtil.offsetMonth(ygglMainEmp.getRzTime(), ygglMainEmp.getSyq()); // 时间偏移
                loginInfo.setRegularTime(expireDate);
            } else {
                loginInfo.setRegularTime(new Date());
            }

        }
        return ResultUtil.data(loginInfo);
    }

    /**
     * 获取登录人和上级主管的empNum和名称
     *
     * @param
     * @return
     */
    @GetMapping(value = "/loginerChargers")
    @ApiOperation(value = "70.获取登录人和上级主管的empNum和名称", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 70)
    public Result<List<LoginerChargeDto>> loginerChargers(@CurrentUser UserBean userBean) {

        List<LoginerChargeDto> loginerChargeDtos = new ArrayList<LoginerChargeDto>();

        Integer orgCode = userBean.getOrgCode();
        ArrayList<Integer> list = new ArrayList<Integer>();
        Integer empNum = userBean.getEmpNum();
        Integer gw = empNumConfirm(orgCode, empNum).getBmgwId();
        if (gw != null && gw > 0) {
            ZzglBmgwM buid = ZzglBmgwM.builder().id(gw).build().selectById();

            List<ZzglBmgwM> zzglBmgwMs = new LambdaQueryChainWrapper<ZzglBmgwM>(zzglBmgwMMapper)
                    .eq(ZzglBmgwM::getOrgCode, orgCode).eq(ZzglBmgwM::getType, 0).list();
            // 获取该员工的上级部门id 的数组list
            ZzglBmgwM.getUpDepts(list, buid.getUpId(), zzglBmgwMs);
            List<Integer> leaderList = new ArrayList<Integer>();
            for (Integer zzglId : list) {
                for (ZzglBmgwM zzglBmgwM : zzglBmgwMs) {
                    if (zzglId.equals(zzglBmgwM.getId()) && zzglBmgwM.getLeader() != null) {

                        leaderList.add(zzglBmgwM.getLeader());
                    }
                }
            }
            List<YgglMainEmp> ygglMainEmps = empNumsConfirm(orgCode, leaderList);
//			List<LoginerChargeDto> loginerChargeDtos = new ArrayList<LoginerChargeDto>();

            for (Integer leaderId : leaderList) {
                for (YgglMainEmp m : ygglMainEmps) {
                    if (leaderId.equals(m.getEmpNum())) {
                        if (m.getHeadUrl() == null) {
                            m.setHeadUrl(CommonEnum.NULL_STR.getDesc());
                        }
                        loginerChargeDtos.add(new LoginerChargeDto(m.getEmpNum(), m.getName(), m.getHeadUrl()));
                    }
                }

            }


            Collections.reverse(loginerChargeDtos);
            if (loginerChargeDtos.size() > 0) {
                if ((userBean.getEmpNum()).equals(loginerChargeDtos.get(loginerChargeDtos.size() - 1).getLeaderEmpNum())) {
                    loginerChargeDtos.remove(loginerChargeDtos.size() - 1);
                }
            }
            return ResultUtil.data(loginerChargeDtos);
        }
        return ResultUtil.data(loginerChargeDtos);

    }

    // 根据传来的empNum获取该人员信息,没有则传全部
    public List<YgglMainEmp> empNumsConfirm(Integer orgCode, List<Integer> empNumList) {
        List<YgglMainEmp> all = new LambdaQueryChainWrapper<YgglMainEmp>(ygglMainEmpMapper)
                .eq(YgglMainEmp::getOrgCode, orgCode).list();
        List<YgglMainEmp> ygglMainEmps = new ArrayList<YgglMainEmp>();
        if (empNumList.size() != 0) {
            for (Integer empNum : empNumList) {
                all.stream().filter(item -> empNum.equals(item.getEmpNum())).forEach(action -> {
                    ygglMainEmps.add(action);
                });
            }
        } else {
            ygglMainEmps.addAll(all);
        }

        return ygglMainEmps;
    }

    // 根据传来的empNum获取该人员信息
    public YgglMainEmp empNumConfirm(Integer orgCode, Integer empNum) {
        YgglMainEmp one = new LambdaQueryChainWrapper<YgglMainEmp>(ygglMainEmpMapper)
                .eq(YgglMainEmp::getOrgCode, orgCode).eq(YgglMainEmp::getEmpNum, empNum).one();
        return one;
    }

    /**
     * 获取用户头像
     *
     * @param
     * @return
     */
    @PostMapping(value = "/headphotos")
    @ApiOperation(value = "71.获取用户头像", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 71)
    public Result<List<YgglMainEmp>> headphotos(@CurrentUser UserBean userBean, @RequestBody List<Integer> empNumList) {
        if (empNumList == null || empNumList.size() == 0) {
            return ResultUtil.error("存在未设置的审批人");
        }
        List<YgglMainEmp> yglList = YgglMainEmp.builder().build()
                .selectList(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getOrgCode, userBean.getOrgCode())
                        .in(YgglMainEmp::getEmpNum, empNumList)
                        .select(YgglMainEmp::getId, YgglMainEmp::getEmpNum, YgglMainEmp::getName, YgglMainEmp::getHeadUrl).orderByDesc(YgglMainEmp::getId));
        for (YgglMainEmp yg : yglList) {
            if (StringUtil.isEmpty(yg.getHeadUrl())) {
                yg.setHeadUrl(CommonEnum.NULL_STR.getDesc());
            }
        }
        return ResultUtil.data(yglList);
    }


    @Autowired
    private KqglAssoLeaveBalanceMapper kqglassoleavebalancemapper;

    @GetMapping(value = "/address_book")
    @ApiOperation(value = "APP 获取通讯录", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 70)
    public Result<Object> Getaddressbook(@CurrentUser UserBean userBean) {

        List<AdditionalDto> userlist = kqglassoleavebalancemapper.selectAdditionalList(userBean.getOrgCode());

        return ResultUtil.data(userlist);
    }


    @PostMapping(value = "/modify_avatar")
    @ApiOperation(value = "APP_修改头像", httpMethod = "POST", notes = "接口发布说明")
    public Result<YgglAttaSbgjj> Modify_Avatar(@CurrentUser UserBean userBean, @RequestBody ModifyAvatarDto modifyavatardto) {

        YgglMainEmp.builder().headUrl(modifyavatardto.getAvatar_path()).build().update(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getOrgCode, userBean.getOrgCode())
                .eq(YgglMainEmp::getEmpNum, userBean.getEmpNum()));

        QyzxEmpLogin.builder().headUrl(modifyavatardto.getAvatar_path()).build().update(new QueryWrapper<QyzxEmpLogin>().lambda().eq(QyzxEmpLogin::getOrgId, userBean.getOrgCode())
                .eq(QyzxEmpLogin::getPhone, userBean.getQyzxEmpLogin().getPhone()));

        return ResultUtil.success("上传成功");
    }

    @PostMapping(value = "/new_account")
    @ApiOperation(value = "修改账号", httpMethod = "POST", notes = "接口发布说明")
    public Result<Object> New_account(@CurrentUser UserBean userBean, @RequestBody UserInfo userinfo) {

        YgglMainEmp sjhpd = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getPhone, userinfo.getPhone())
                .eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()));
        if (sjhpd == null) {
            YgglMainEmp.builder().phone(userinfo.getPhone()).build().update(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, userinfo.getName()).eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()));

            QyzxEmpLogin.builder().phone(userinfo.getPhone()).build().update(new QueryWrapper<QyzxEmpLogin>().lambda().eq(QyzxEmpLogin::getId, userinfo.getName()).eq(QyzxEmpLogin::getOrgId, userBean.getOrgCode()));

            return ResultUtil.success("修改成功");
        } else {
            return ResultUtil.error("该号码已存在");
        }

    }

    @GetMapping(value = "/getUserList")
    @ApiOperation(value = "62-1.运营后台--查询员工列表", httpMethod = "GET", notes = "接口发布说明")
    @ApiOperationSupport(order = 62)
    public Result<List<YgQueryDto>> getUserList(@RequestParam("companyId") String companyId,@RequestParam("policyId")Integer policyId) {
         SimpleDateFormat dtf3 = new SimpleDateFormat("yyyy-MM");
        List<YgQueryDto> ygQueryDto=Lists.newArrayList();
         if(policyId!=null && policyId>0){
             InsurePolicy insurePolicy = InsurePolicy.builder().id(policyId).build().selectById();
             insurePolicy.getPolicyDateStart();
              ygQueryDto = ygglMainEmpMapper.getInusrtUser(Integer.parseInt(companyId), null,dtf3.format(insurePolicy.getPolicyDateEnd()));
         }else {
             ygQueryDto = ygglMainEmpMapper.queryEmpMessage(Integer.parseInt(companyId), null);
         }
        for (YgQueryDto yg : ygQueryDto) {
            if (StringUtil.isEmpty(yg.getHeadUrl())) {
                yg.setHeadUrl("");
            }
        }
        return ResultUtil.data(ygQueryDto);
    }

    @PostMapping(value = "/addLzyy")
    @ApiOperation(value = "离职原因", httpMethod = "POST", notes = "离职原因")
    public Result<Object> addLzyy(@CurrentUser UserBean userBean, @RequestBody YgglEmpLzyy data) {
        if (StringUtils.isEmpty(data.getValue())) {
            return ResultUtil.error("请输入离职原因");
        }
        YgglEmpLzyy ygglEmpLzyy = YgglEmpLzyy.builder().build().selectOne(new QueryWrapper<YgglEmpLzyy>().lambda()
                .eq(YgglEmpLzyy::getValue, data.getValue()).eq(YgglEmpLzyy::getOrgCode, userBean.getOrgCode()));
        if (ygglEmpLzyy != null) {
            return ResultUtil.error("离职原因已存在");
        }
        YgglEmpLzyy.builder().value(data.getValue()).orgCode(userBean.getOrgCode()).build().insert();
        return ResultUtil.data("添加成功");
    }

    @GetMapping(value = "/allLzyyList")
    @ApiOperation(value = "获取所有离职原因", httpMethod = "GET", notes = "获取所有离职原因")
    public Result<Object> allLzyyList(@CurrentUser UserBean userBean) {
        List<YgglEmpLzyy> ygglEmpLzyyList = YgglEmpLzyy.builder().build().selectList(new QueryWrapper<YgglEmpLzyy>().lambda().eq(YgglEmpLzyy::getOrgCode, userBean.getOrgCode()));
        return ResultUtil.data(ygglEmpLzyyList);
    }

    @PostMapping(value = "/getContract")
    @ApiOperation(value = "72.运营后台--合同概况列表", httpMethod = "POST", notes = "接口发布说明")
    @ApiOperationSupport(order = 72)
    public Result<Object> getContract(@CurrentUser UserBean userBean, @RequestBody HtgkDto htgkDto) {
        List<HtgkDto> htgkDtos = Lists.newArrayList();
        Map map = Maps.newHashMap();
        if (htgkDto.getType() != 2) {
            htgkDtos = ygglAttaHtxxbMapper.selectListByType(htgkDto.getType(), htgkDto.getPage(), userBean.getOrgCode());
            map.put("totalNum", ygglAttaHtxxbMapper.selectTotalByType(htgkDto.getType(), userBean.getOrgCode()));
        } else {
            htgkDtos = ygglAttaHtxxbMapper.queryContract(userBean.getOrgCode());
            map.put("totalNum", 0);
        }
        map.put("list", htgkDtos);

        return ResultUtil.data(map);
    }

    @GetMapping(value = "/getPersonnelForm")
    @ApiOperation(value = "人事--人事表格列表", httpMethod = "GET", notes = "接口发布说明")
    public Result<List<YgglPersonnelForm>> getPersonnelForm(@CurrentUser UserBean userBean, String query) {
        List<YgglPersonnelForm> personnelForms = ygglPersonnelFormMapper.selectList(new QueryWrapper<YgglPersonnelForm>().lambda()
                .eq(YgglPersonnelForm::getDeleteFlag, 0)
                .like(!StrUtil.isEmpty(query), YgglPersonnelForm::getFileName, query)
                .and(QueryWrapper -> QueryWrapper.eq(YgglPersonnelForm::getOrgCode, userBean.getOrgCode())
                        .or().isNull(YgglPersonnelForm::getOrgCode)));
        return ResultUtil.data(personnelForms);
    }

    @GetMapping(value = "/updateFormFileName")
    @ApiOperation(value = "人事--修改人事表格文件名", httpMethod = "GET", notes = "接口发布说明")
    public Result<Object> updateFormFileName(@CurrentUser UserBean userBean, @RequestParam("fileName") String fileName, @RequestParam("id") Long id) {
        try {
            YgglPersonnelForm.builder().id(id).fileName(fileName).build().updateById();
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.error();
        }
        return ResultUtil.success();
    }

    @GetMapping(value = "/removePersonnelForm")
    @ApiOperation(value = "人事--删除人事表格文件", httpMethod = "GET", notes = "接口发布说明")
    public Result<Object> removeFormFileName(@CurrentUser UserBean userBean, @RequestParam("id") Long id) {
        try {
            YgglPersonnelForm.builder().id(id).deleteFlag(1).build().updateById();
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.error();
        }
        return ResultUtil.success();
    }

    @PostMapping(value = "/addPersonnelForm")
    @ApiOperation(value = "人事--新增人事表格文件", httpMethod = "POST", notes = "接口发布说明")
    public Result<Object> addPersonnelForm(@CurrentUser UserBean userBean, @RequestBody PersonnelFormDto personnelFormDto) {
        try {
            YgglPersonnelForm.builder().fileName(personnelFormDto.getFileName())
                    .fileUrl(personnelFormDto.getFileUrl())
                    .orgCode(userBean.getOrgCode())
                    .type(personnelFormDto.getType()).build().insert();
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.error();
        }
        return ResultUtil.success();
    }
    @GetMapping(value = "/importLog")
    @ApiOperation(value = "获取人员导入记录", httpMethod = "GET", notes = "获取人员导入记录")
    public Result<Object> importLog(@CurrentUser UserBean userBean) {
        try {
            List<YgglMainImportLog> ygglMainImportlogList=YgglMainImportLog.builder().build().selectList(new QueryWrapper<YgglMainImportLog>().lambda().eq(YgglMainImportLog::getOrgCode,userBean.getOrgCode()));
            return ResultUtil.data(ygglMainImportlogList);
        } catch (Exception e) {
            e.printStackTrace();
            return ResultUtil.error();
        }
    }


}