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

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.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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.conditions.update.LambdaUpdateChainWrapper;
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.bean.copier.CopyOptions;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.BetweenFormater.Level;
import cn.hutool.core.date.DateUtil;
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.StrUtil;
import cn.timer.api.bean.clazz.CommonArea;
import cn.timer.api.bean.clazz.SysRegion;
import cn.timer.api.bean.qyzx.QyzxEmpEntAsso;
import cn.timer.api.bean.qyzx.QyzxEmpLogin;
import cn.timer.api.bean.yggl.YgglAttaClfjb;
import cn.timer.api.bean.yggl.YgglAttaCzjlb;
import cn.timer.api.bean.yggl.YgglAttaGzjlb;
import cn.timer.api.bean.yggl.YgglAttaGzk;
import cn.timer.api.bean.yggl.YgglAttaHtxxb;
import cn.timer.api.bean.yggl.YgglAttaJjlxr;
import cn.timer.api.bean.yggl.YgglAttaJyjlb;
import cn.timer.api.bean.yggl.YgglAttaLxxxb;
import cn.timer.api.bean.yggl.YgglAttaPxjlxxb;
import cn.timer.api.bean.yggl.YgglAttaSbgjj;
import cn.timer.api.bean.yggl.YgglAttaZcxxb;
import cn.timer.api.bean.yggl.YgglAttaZszjb;
import cn.timer.api.bean.yggl.YgglMainEmp;
import cn.timer.api.bean.yggl.YgglMainLzb;
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.enums.CommonEnum;
import cn.timer.api.dao.clazz.CommonAreaMapper;
import cn.timer.api.dao.qyzx.QyzxEmpLoginMapper;
import cn.timer.api.dao.yggl.YgAreaDtoMapper;
import cn.timer.api.dao.yggl.YgCityDtoMapper;
import cn.timer.api.dao.yggl.YgMzDtoMapper;
import cn.timer.api.dao.yggl.YgProDtoMapper;
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.yggl.AddygdaDto;
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.YgAreaDto;
import cn.timer.api.dto.yggl.YgCartogramDto;
import cn.timer.api.dto.yggl.YgCityDto;
import cn.timer.api.dto.yggl.YgDrjqbDto;
import cn.timer.api.dto.yggl.YgDrsDto;
import cn.timer.api.dto.yggl.YgKVDto;
import cn.timer.api.dto.yggl.YgProDto;
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.dto.yggl.YgjgDto;
import cn.timer.api.dto.yggl.YgmzDto;
import cn.timer.api.dto.yggl.YgzzDto;
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;

/**
 * @date 2019年11月15日
 * @author 翁东州
 * @方法中文名称:
 */
@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 QyzxEmpLoginMapper qyzxEmpLoginMapper;

	@Autowired
	private YgglMainLzbMapper ygglMainLzbMapper;

	@Autowired
	private ZzglBmgwMMapper zzglBmgwMMapper;

	// weng(籍贯)
	@Autowired
	private YgAreaDtoMapper ygAreaDtoMapper;
	@Autowired
	private YgCityDtoMapper ygCityDtoMapper;
	@Autowired
	private YgProDtoMapper ygProDtoMapper;

	// weng(民族)
	@Autowired
	private YgMzDtoMapper ygMzDtoMapper;

	/**
	 * 获取登录人的相关信息
	 * 
	 * @param
	 * @return
	 */
	@GetMapping(value = "/loginmessage")
	@ApiOperation(value = " 获取登录人的相关信息", httpMethod = "GET", notes = "接口发布说明")
	@ApiOperationSupport(order = 68)
	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::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());
			loginInfo.setRegularTime(ygglMainEmp.getRzTime());
		}
		return ResultUtil.data(loginInfo, "操作成功!");
	}

	/**
	 * 获取登录人和上级主管的empNum和名称
	 * 
	 * @param
	 * @return
	 */
	@GetMapping(value = "/loginerChargers")
	@ApiOperation(value = " 获取登录人和上级主管的empNum和名称", httpMethod = "GET", notes = "接口发布说明")
	@ApiOperationSupport(order = 69)
	public Result<List<LoginerChargeDto>> loginerChargers(@CurrentUser UserBean userBean) {
		Integer orgCode = userBean.getOrgCode();
		ArrayList<Integer> list = new ArrayList<Integer>();
		Integer empNum = userBean.getEmpNum();
		Integer gw = empNumConfirm(orgCode, empNum).getBmgwId();
		List<ZzglBmgwM> zzglBmgwMs = new LambdaQueryChainWrapper<ZzglBmgwM>(zzglBmgwMMapper)
				.eq(ZzglBmgwM::getOrgCode, orgCode).list();
		// 获取该员工的上级部门id 的数组list
		ZzglBmgwM.getUpDepts(list, gw, 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 (YgglMainEmp m : ygglMainEmps) {
			if (m.getHeadUrl() == null) {
				m.setHeadUrl("");
			}
			loginerChargeDtos.add(new LoginerChargeDto(m.getEmpNum(), m.getName(), m.getHeadUrl()));
		}
		Collections.reverse(loginerChargeDtos);
		return ResultUtil.data(loginerChargeDtos, "获取上级部门的部门id");
	}

	// 根据传来的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 = "获取用户头像", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 70)
	public Result<List<YgglMainEmp>> headphotos(@CurrentUser UserBean userBean, @RequestBody List<Integer> empNumList) {
		if (empNumList.size() == 0) {
			return ResultUtil.error("请输入empNum数组");
		}
		List<YgglMainEmp> yglList = YgglMainEmp.builder().build()
				.selectList(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getOrgCode, userBean.getOrgCode())
						.in(YgglMainEmp::getEmpNum, empNumList)
						.select(YgglMainEmp::getEmpNum, YgglMainEmp::getName, YgglMainEmp::getHeadUrl));
		for (YgglMainEmp yg : yglList) {
			if (StringUtil.isEmpty(yg.getHeadUrl())) {
				yg.setHeadUrl("");
			}
		}
		return ResultUtil.data(yglList, "获取用户头像组成功");
	}

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

	/**
	 * 根据岗位id获取员工档案部门岗位名称
	 * 
	 * @param
	 * @return
	 */
	@GetMapping(value = "/ygdabm/{gwid}")
	@ApiOperation(value = "获取员工档案部门岗位名称", 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();
		QueryWrapper<ZzglBmgwM> queryWrapper = new QueryWrapper<>();
		queryWrapper.eq("org_code", orgCode).eq("id", gwid);
		ZzglBmgwM zzglBmgwM = ZzglBmgwM.builder().build().selectOne(queryWrapper);
		String gw = null;
		Integer bmid = null;
		if (zzglBmgwM != null) {
			gw = zzglBmgwM.getName();
			bmid = zzglBmgwM.getUpId();
		}
		ZzglBmgwM z = ZzglBmgwM.builder().build()
				.selectOne(new QueryWrapper<ZzglBmgwM>().eq("org_code", orgCode).eq("id", bmid));
		String bm = null;
		if (z != null) {
			bm = z.getName();
		}
		String bmgw = bm + "/" + gw;
		return ResultUtil.data(bmgw, "获取员工档案部门岗位名称成功");
	}

	/**
	 * 添加员工档案
	 * @param userBean
	 * @param addygdaDto
	 * @return
	 */
	@PostMapping(value = "/addygda")
	@ApiOperation(value = "添加员工档案", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 4)
	public Result<Object> addygda(@CurrentUser UserBean userBean,@Validated @RequestBody AddygdaDto addygdaDto) throws Exception{
		Integer orgCode = userBean.getOrgCode();
		String name = addygdaDto.getName();
		String phone = addygdaDto.getPhone();
		Integer zjType = addygdaDto.getZjType();
		String zjNum = addygdaDto.getZjNum();
		Integer jobType = addygdaDto.getJobType();
		Date rzTime = new Date();
		Integer syq = addygdaDto.getSyq();
		Integer sex = addygdaDto.getSex();
		if (StrUtil.hasBlank(phone) || StrUtil.hasBlank(name) || StrUtil.hasBlank(zjNum)) {
			return ResultUtil.error("请输入员工姓名,手机号和身份证号");
		}
		QyzxEmpLogin login = new LambdaQueryChainWrapper<QyzxEmpLogin>(qyzxEmpLoginMapper)
				.eq(!StrUtil.hasBlank(phone), QyzxEmpLogin::getPhone, phone).one();
		if (login == null) {
			// 初始化密码  pwd
			QyzxEmpLogin qyzxEmpLogin = QyzxEmpLogin.builder().phone(phone).pw(Md5.md5(pwd))
					.sts(CommonEnum.U_STS_ON.getType()).orgId(userBean.getOrgCode()).username(name).build();
			if (!qyzxEmpLogin.insert()) {
				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
				return ResultUtil.error("添加员工登录表失败,请检查输入信息");
			}
			// 添加三张表
			// 员工权限表(未定)
			// 员工企业关联表和员工档案,员工成长表(未定)
			QyzxEmpEntAsso.builder()
				.empNum(qyzxEmpLogin.getId())
				.orgCode(orgCode)
				.userType(CommonEnum.U_TYPE_EMP.getType())
				.status(1)
				.build()
				.insert();// usertype2普通员工 status1正常
			YgglMainEmp ygglMainEmp = YgglMainEmp.builder()
					.name(name)
					.phone(phone)
					.zjType(zjType)
					.zjNum(zjNum)
					.jobType(jobType)
					.jobStatus(YgEnumInterface.jobStatus.SHIYONG.getType())
					.rzTime(rzTime)
					.syq(syq)
					.sex(sex)
					.empNum(qyzxEmpLogin.getId())
					.orgCode(orgCode)
					.build();
			ygglMainEmp.insert();

			if (addygdaDto.getBmgwId() != null) {
				new LambdaUpdateChainWrapper<YgglMainEmp>(ygglMainEmpMapper)
						.set(YgglMainEmp::getBmgwId, addygdaDto.getBmgwId())
						.eq(YgglMainEmp::getOrgCode, orgCode).eq(YgglMainEmp::getId, ygglMainEmp.getId()).update();
			}

			return ResultUtil.data(ygglMainEmp, "新添加员工档案成功!");
		} else {

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

			if (ishad == null) {
				// 添加三张表
				// 员工权限表(未定)
				QyzxEmpEntAsso.builder()
				.empNum(login.getId())
				.orgCode(orgCode)
				.userType(2)
				.status(1)
				.build()
				.insert();// usertype2普通员工
																														// status1正常
				YgglMainEmp ygglMainEmp = 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)
						.build();
				ygglMainEmp.insert();
				if (addygdaDto.getBmgwId() != null) {
					new LambdaUpdateChainWrapper<YgglMainEmp>(ygglMainEmpMapper)
							.set(YgglMainEmp::getBmgwId, addygdaDto.getBmgwId())
							.eq(YgglMainEmp::getOrgCode, orgCode).eq(YgglMainEmp::getId, ygglMainEmp.getId()).update();
				}
				return ResultUtil.data(ygglMainEmp, "添加员工档案成功!");
			} else {
				return ResultUtil.error("该手机号已被使用,请输入正确手机号");
			}
		}
	}

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

		if (ygglMainEmp.getEmpNum() != null) {
			UpdateWrapper<YgglMainEmp> updateWrapper = new UpdateWrapper<YgglMainEmp>();
			updateWrapper.eq("org_code", userBean.getOrgCode()).eq("emp_num", ygglMainEmp.getEmpNum());
			ygglMainEmp.update(updateWrapper);

//			Integer count = qyzxEmpLoginMapper.selectCount(new QueryWrapper<QyzxEmpLogin>().lambda().eq(QyzxEmpLogin::getPhone, ygglMainEmp.getPhone()));
//			if (count >= 1) {
//				return ResultUtil.error("手机号已被使用!");
//			}
//			
//			QyzxEmpLogin.builder().phone(ygglMainEmp.getPhone()).build()
//		     .update(new QueryWrapper<QyzxEmpLogin>().lambda().eq(QyzxEmpLogin::getId, userBean.getEmpNum()));
			return ResultUtil.data(ygglMainEmp, "修改成功");
		}
		return ResultUtil.error("请确认该员工是否存在!");
	}

	/**
	 * 员工搜索
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/ygquery")
	@ApiOperation(value = "员工搜索/分页", 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() == null ? 1 : ygQueryDto.getCurrentPage(),
				ygQueryDto.getTotalPage() == null ? 10 : ygQueryDto.getTotalPage());
		QueryWrapper<YgglMainEmp> queryWrapper = new QueryWrapper<>();
		queryWrapper.select("name", "emp_num", "bmgw_id", "rz_time", "job_type", "phone", "job_status")
				.ne("job_status", YgEnumInterface.jobStatus.YILIZHI.getType()).eq("org_code", orgCode)
				.eq(t != null && t > -1, "job_type", t).eq(j != null && j > -1, "job_status", j)
				.in(!bList.isEmpty(), "bmgw_id", bList)
				.and(!StrUtil.hasBlank(q), wq -> wq.like("name", q).or().like("phone", q));

//		List<YgglMainEmp> lo = YgglMainEmp.builder().build().selectList(queryWrapper);
		IPage<YgglMainEmp> ygglMainEmpPage = YgglMainEmp.builder().build().selectPage(page, queryWrapper);
		// List<YgglMainEmp> ygglMainEmps = ygglMainEmpPage.getRecords();
		return ResultUtil.data(ygglMainEmpPage, "员工搜索成功");
		// return ResultUtil.data(ygglMainEmpPage, ygglMainEmps, "员工搜索成功");
	}

	/**
	 * 导入威力加强版
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/ygdas")
	@ApiOperation(value = "导入威力加强版", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 7)
	public Result<List<YgDrjqbDto>> ygdr(@CurrentUser UserBean userBean, @RequestBody YgDrsDto drList) {
		drList.setErrorList(new ArrayList<YgDrjqbDto>());
		drList.setOrgCode(userBean.getOrgCode());
		YgDrsDto tofList = errorFilter(drList);// 滤嘴,过滤信息
		if (tofList.getDrList().size() == 0)
			return ResultUtil.data(tofList.getErrorList(), "导入发生错误人员名单");
		YgDrsDto tof = optFilter(tofList);// 彻底规范好数据
		List<YgDrjqbDto> trueList = tof.getDrList();// 拿出正确的信息
		List<YgDrjqbDto> errorList = tof.getErrorList();// 拿出错误的信息
		if (trueList.size() == 0)
			return ResultUtil.data(errorList, "导入发生错误人员名单");
		for (YgDrjqbDto e : trueList) {
			QyzxEmpLogin login = new LambdaQueryChainWrapper<QyzxEmpLogin>(qyzxEmpLoginMapper)
					.eq(QyzxEmpLogin::getPhone, e.getPhone()).one();
			// 证件类型为0
			Integer jobType = Integer.valueOf(e.getJobType());// 工作类型
			Integer syq = Integer.valueOf(e.getSyq());// 试用期
			Integer sex = Integer.valueOf(e.getSex());// 性别,还差一个岗位
			Integer gw = e.getHavebmid();
			String jobNum = e.getYgnbgh();
			Integer jg = e.getJg();
			Date birthday = e.getBirthday();
			// 入职日期
			Date rzdate = new Date();
			SimpleDateFormat straight = new SimpleDateFormat("yyyy-MM-dd");// 正杠
			if (e.getRzTime().indexOf("-") != -1) {
				try {
					rzdate = straight.parse(e.getRzTime());
				} catch (ParseException PException) {
					PException.printStackTrace();
					e.setError("请填写正确的时间格式");
					errorList.add(e);
					continue;
				}
			}
			// 判断是否已有员工登录表
			if (login == null) {// 添加三张表
				QyzxEmpLogin qyzxEmpLogin = QyzxEmpLogin.builder().phone(e.getPhone()).pw(Md5.md5("123456"))
						.sts(CommonEnum.U_STS_ON.getType()).orgId(userBean.getOrgCode()).username(e.getName()).build();
				if (!qyzxEmpLogin.insert()) {
					TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
					e.setError("员工无法添加!");
					errorList.add(e);
					continue;
				}
				// 员工权限表(未定)
				// 员工企业关联表和员工档案,员工成长表(未定)
				QyzxEmpEntAsso.builder().empNum(qyzxEmpLogin.getId()).orgCode(userBean.getOrgCode()).userType(2)
						.status(1).build().insert();// userType2普通员工,status1正常
				YgglMainEmp emp = YgglMainEmp.builder().name(e.getName()).phone(e.getPhone()).zjType(0).zjNum(e.getZj())
						.jobType(jobType).rzTime(rzdate).updateTime(new Date()).updateMan(userBean.getEmpNum()).syq(syq)
						.sex(sex).jobNum(jobNum).bmgwId(gw).empNum(qyzxEmpLogin.getId()).orgCode(userBean.getOrgCode())
						.build();
				emp.insert();
				new LambdaUpdateChainWrapper<YgglMainEmp>(ygglMainEmpMapper)
						.eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()).eq(YgglMainEmp::getId, emp.getId())
						.set(birthday != null, YgglMainEmp::getBirthday, birthday)
						.set(jg != null && jg != 0, YgglMainEmp::getJg, jg).update();

				// return ResultUtil.data(ygglMainEmp, "新添加员工档案成功!");
			} else {
				// 添加两张表
				YgglMainEmp ishad = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>()
						.eq("phone", e.getPhone()).eq("org_code", userBean.getOrgCode()));
				if (ishad == null) {
					// 员工权限表(未定)
					QyzxEmpEntAsso.builder().empNum(login.getId()).orgCode(userBean.getOrgCode()).userType(2).status(1)
							.build().insert();// userType2普通员工,status1正常
					YgglMainEmp emp = YgglMainEmp.builder().name(e.getName()).phone(e.getPhone()).zjType(0)
							.zjNum(e.getZj()).jobType(jobType).rzTime(rzdate).updateTime(new Date())
							.updateMan(userBean.getEmpNum()).syq(syq).sex(sex).jobNum(jobNum).empNum(login.getId())
							.orgCode(userBean.getOrgCode()).build();
					emp.insert();
					new LambdaUpdateChainWrapper<YgglMainEmp>(ygglMainEmpMapper)
							.eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()).eq(YgglMainEmp::getId, emp.getId())
							.set(birthday != null, YgglMainEmp::getBirthday, birthday)
							.set(jg != null && jg != 0, YgglMainEmp::getJg, jg).update();
				} else {
					e.setError("该手机号码已被使用");
					errorList.add(e);
					continue;

				}
			}
		}
		if (errorList.size() == 0) {
			return ResultUtil.success("员工全部导入成功!");
		}
		return ResultUtil.data(errorList, "导入发生错误人员名单");
	}

	// 错误选项过滤器
	public YgDrsDto errorFilter(YgDrsDto ygDrsDto) {
		List<YgDrjqbDto> drList = ygDrsDto.getDrList();
		List<YgDrjqbDto> newList = new ArrayList<YgDrjqbDto>(drList);
		List<YgDrjqbDto> errorList = ygDrsDto.getErrorList();
		Integer orgCode = ygDrsDto.getOrgCode();

		Iterator<YgDrjqbDto> itDr = drList.iterator();
		@SuppressWarnings("unused")
		YgDrjqbDto a = drList.get(0);// 一个员工导入
		Integer size = drList.size();
		for (Integer i = 0; i < size; i++) {//
			YgDrjqbDto d = newList.get(i);// 计数器
			if (itDr.hasNext()) {
				a = itDr.next();

			}
			// 请填写必填项
			String name = newList.get(i).getName();
			String phone = newList.get(i).getPhone();
			String sex = newList.get(i).getSex();
			String zj = newList.get(i).getZj();
			if (StrUtil.hasBlank(name) || StrUtil.hasBlank(phone) || StrUtil.hasBlank(sex) || StrUtil.hasBlank(zj)) {
				d.setError("请填写必填项");
				errorList.add(d);
				itDr.remove();
				i++;
				continue;
			}
			// 手机号码格式不对
			String regex = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$";
			if (phone.length() != 11) {
				d.setError("手机号应为11位数");
				errorList.add(d);
				itDr.remove();
				i++;
				continue;
			}
			Pattern p = Pattern.compile(regex);
			Matcher m = p.matcher(phone);
			boolean isMatch = m.matches();
			if (!isMatch) {
				d.setError("手机号格式不对");
				errorList.add(d);
				itDr.remove();
				i++;
				continue;
			}
			// 手机号码已被使用
			QyzxEmpLogin login = new LambdaQueryChainWrapper<QyzxEmpLogin>(qyzxEmpLoginMapper)
					.eq(QyzxEmpLogin::getPhone, phone).eq(QyzxEmpLogin::getOrgId, orgCode).one();
			if (login != null) {
				d.setError("手机号码已被使用");
				errorList.add(d);
				itDr.remove();
				i++;
				continue;
			}
			// 证件号码信息有误
			if (zj == null || "".equals(zj)) {
				d.setError("证件号码信息有误");
				errorList.add(d);
				itDr.remove();
				i++;
				continue;
			}
			String regularExpression = "(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|"
					+ "(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)";
			boolean matches = zj.matches(regularExpression);
			if (!matches) {
				d.setError("证件号码信息有误");
				errorList.add(d);
				itDr.remove();
				i++;
				continue;
			}
			try {
				if (zj.length() == 18) {
					char[] charArray = zj.toCharArray();
					// 前十七位加权因子
					int[] idCardWi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
					// 这是除以11后,可能产生的11位余数对应的验证码
					String[] idCardY = { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" };
					int sum = 0;
					for (Integer j = 0; j < idCardWi.length; j++) {
						int current = Integer.parseInt(String.valueOf(charArray[j]));
						int count = current * idCardWi[j];
						sum += count;
					}
					char idCardLast = charArray[17];
					int idCardMod = sum % 11;
					if (idCardY[idCardMod].toUpperCase().equals(String.valueOf(idCardLast).toUpperCase())) {
						// System.out.println("成功,接着完善员工的个人信息");
						String birth = zj.substring(6, 14);
						String birthday = birth.substring(0, 4) + "-" + birth.substring(4, 6) + "-"
								+ birth.substring(6, 8);
						SimpleDateFormat straight = new SimpleDateFormat("yyyy-MM-dd");
						d.setBirthday(straight.parse(birthday));
						d.setJg(Integer.parseInt(zj.substring(0, 6)));
					} else {
						// System.out.println("身份证最后一位:" + String.valueOf(idCardLast).toUpperCase() +
						// "错误,正确的应该是:" + idCardY[idCardMod].toUpperCase());
						// return false;
						d.setError("证件号码信息有误");
						errorList.add(d);
						itDr.remove();
						i++;
						continue;
					}
				} else {
					// 给15位数的添加生日籍贯
					String birth = zj.substring(6, 12);
					String birthday = "19" + birth.substring(0, 2) + "-" + birth.substring(2, 4) + "-"
							+ birth.substring(4, 6);
					SimpleDateFormat straight = new SimpleDateFormat("yyyy-MM-dd");
					d.setBirthday(straight.parse(birthday));
					d.setJg(Integer.parseInt(zj.substring(0, 6)));
				}
			} catch (Exception e) {
				e.printStackTrace();
				// System.out.println("异常:" + zj);
				// return false;
				d.setError("证件号码信息有误");
				errorList.add(d);
				itDr.remove();
				i++;
				continue;
			}
			// 部门岗位有误
			String oneb = newList.get(i).getOneb();
			String twob = newList.get(i).getTwob();
			String threeb = newList.get(i).getThreeb();
			String fourb = newList.get(i).getFourb();
			String gw = newList.get(i).getGw();
			String[] bms = { oneb, twob, threeb, fourb };
			if (StrUtil.hasBlank(gw) && StrUtil.hasBlank(oneb) && StrUtil.hasBlank(twob) && StrUtil.hasBlank(threeb)
					&& StrUtil.hasBlank(fourb)) { // 没填写岗位,通过~ //
			} else {
				// 填写了部门岗位,办他!
				Integer isHaveBmgw = isHavebmgw(bms, gw, orgCode);
				if (isHaveBmgw == 0) {
					d.setError("部门岗位有误");
					errorList.add(d);
					itDr.remove();
					i++;
					continue;
				} else {
					// 获取到部门岗位id啦!
					d.setHavebmid(isHaveBmgw);
				}
			}

		} // for循环完毕!
		YgDrsDto tofList = new YgDrsDto(drList, errorList, orgCode);
		return tofList;
	}

	// 选填项过滤器
	public YgDrsDto optFilter(YgDrsDto ygDrsDto) {
		List<YgDrjqbDto> drList = ygDrsDto.getDrList();
		List<YgDrjqbDto> newList = new ArrayList<YgDrjqbDto>(drList);
		List<YgDrjqbDto> errorList = ygDrsDto.getErrorList();
		Integer orgCode = ygDrsDto.getOrgCode();

		Iterator<YgDrjqbDto> itDr = drList.iterator();
		@SuppressWarnings("unused")
		YgDrjqbDto a = drList.get(0);// 一个员工导入
		Integer size = drList.size();
		for (Integer i = 0; i < size; i++) {//
			YgDrjqbDto d = newList.get(i);// 计数器
			if (itDr.hasNext()) {
				a = itDr.next();
			}
			// for (YgDrjqbDto d : drList) {
			String ygnbgh = d.getYgnbgh();
			String sex = d.getSex();
			String jobType = d.getJobType();
			String jobStatus = d.getJobStatus();
			String rzTime = d.getRzTime();
			String syq = d.getSyq();

			String zy = d.getZy();
			String address = d.getAddress();
			String hjAddress = d.getHkAddress();
			String qq = d.getQq();
			String weixin = d.getWeixin();
			String email = d.getEmail();
			String[] bathroom = { ygnbgh, sex, jobType, jobStatus, rzTime, syq, zy, address, hjAddress, qq, weixin,
					email };
			boolean child = takeshower(bathroom);
			if (child == false) {
				d.setError("填写内容不要大于50字数");
				errorList.add(d);
				itDr.remove();
				i++;
				continue;
			}
			// 公司内部工号
			if (ygnbgh != null && ygnbgh.length() != 0) {
				d.setYgnbgh(ygnbgh.trim());
			} else {
				SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
				String bh = format.format(new Date()) + orgCode + i + System.currentTimeMillis();
				d.setYgnbgh(bh);
			}
			// 男女(最大优化)
			d.setSex(YgEnumInterface.sex.isMan(sex));
			// 工作性质(最大优化)
			d.setJobType(YgEnumInterface.YgJobType.choose(jobType));
			// 员工状态(最大优化)
			d.setJobStatus(YgEnumInterface.jobStatus.isZhen(jobStatus));
			// 入职日期(最大优化)
			d.setRzTime(
					rzTime != null ? YgEnumInterface.rzTime.tranTime2(YgEnumInterface.rzTime.tranTime(rzTime)) : null);
			// 试用期(最大优化)
			d.setSyq(YgEnumInterface.syq.choose(syq));
		}
		YgDrsDto clear = new YgDrsDto(drList, errorList, orgCode);
		return clear;
	}

	// 浴池,洗去选填项字节大于100的选项
	public boolean takeshower(String[] bathroom) {
		for (String b : bathroom) {
			if (b != null && b.length() > 100) {
				return false;
			}

		}
		return true;
	}

	// 判断是否导入组织部门
	public Integer isHavebmgw(String[] bms, String gw, Integer orgCode) {
		// 将姓名转为部门岗位对象
		List<ZzglBmgwM> gwList = new ArrayList<ZzglBmgwM>();
		// 判断有几个部门,且这几个部门是否属实,里面不包括岗位
		for (String bm : bms) {
			if (!StrUtil.hasBlank(bm)) {
				ZzglBmgwM ibm = new LambdaQueryChainWrapper<ZzglBmgwM>(zzglBmgwMMapper).eq(ZzglBmgwM::getName, bm)
						.eq(ZzglBmgwM::getOrgCode, orgCode).eq(ZzglBmgwM::getType, 0).one(); // 选择部门类型0为部门,1为岗位
				if (ibm == null) {
					return 0;
				} // 找不到有相关名称的部门则报错
				gwList.add(ibm);
			} else {
				break;
			}
		}
		Integer qiantao = qiantao(gwList, gw, 0, orgCode);
		if (qiantao != 0) {
			return qiantao;// 组织部门成立!
		} else {
			return 0;// 失败
		}

	};

	// 判断是否导入组织部门的嵌套并寻找到正确岗位id
	public Integer qiantao(List<ZzglBmgwM> gwList, String gw, Integer upid, Integer orgCode) {
		// 重写
		if (upid != 0 && !gwList.get(0).getUpId().equals(upid)) {
			return 0;
		}
		upid = gwList.get(0).getId();

		if (gwList.size() == 1) {
			ZzglBmgwM igw = new LambdaQueryChainWrapper<ZzglBmgwM>(zzglBmgwMMapper).eq(ZzglBmgwM::getName, gw)
					.eq(ZzglBmgwM::getUpId, upid).eq(ZzglBmgwM::getOrgCode, orgCode).eq(ZzglBmgwM::getType, 1).one();
			if (igw == null) {
				return 0;
			}
			return igw.getId();
		}
		gwList.remove(0);
		Integer q = qiantao(gwList, gw, upid, orgCode);
		return q;
	};

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

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

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

	/**
	 * 添加/修改员工教育经历表
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/jyjlb")
	@ApiOperation(value = "添加/修改员工教育经历表", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 11)
	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 = "删除员工教育经历表", httpMethod = "DELETE", notes = "接口发布说明")
	@ApiOperationSupport(order = 12)
	public Result<Boolean> deljyjlb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
		Integer orgCode = userBean.getOrgCode();
		return ResultUtil.data(YgglAttaJyjlb.builder().build()
				.delete(new QueryWrapper<YgglAttaJyjlb>().eq("org_code", orgCode).eq("id", id)), "删除员工教育经历表成功");
	}

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

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

	/**
	 * 添加/修改员工培训经历信息表
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/pxjlxxb")
	@ApiOperation(value = "添加/修改员工培训经历信息表", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 15)
	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 = "删除员工培训经历信息表", httpMethod = "DELETE", notes = "接口发布说明")
	@ApiOperationSupport(order = 16)
	public Result<Boolean> delpxjlxxb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
		Integer orgCode = userBean.getOrgCode();
		return ResultUtil.data(YgglAttaPxjlxxb.builder().build()
				.delete(new QueryWrapper<YgglAttaPxjlxxb>().eq("org_code", orgCode).eq("id", id)), "删除员工培训经历信息表成功");
	}

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

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

	/**
	 * 添加/修改员工工作经历表
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/gzjlb")
	@ApiOperation(value = "添加/修改员工工作经历表", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 19)
	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 = "删除员工工作经历表", httpMethod = "DELETE", notes = "接口发布说明")
	@ApiOperationSupport(order = 20)
	public Result<Boolean> delgzjlb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
		Integer orgCode = userBean.getOrgCode();
		return ResultUtil.data(YgglAttaGzjlb.builder().build()
				.delete(new QueryWrapper<YgglAttaGzjlb>().eq("org_code", orgCode).eq("id", id)), "删除员工工作经历表成功");
	}

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

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

	/**
	 * 添加/修改员工职称信息表
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/zcxxb")
	@ApiOperation(value = "添加/修改员工职称信息表", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 23)
	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 = "删除员工职称信息表", httpMethod = "DELETE", notes = "接口发布说明")
	@ApiOperationSupport(order = 24)
	public Result<Boolean> delzcxxb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
		Integer orgCode = userBean.getOrgCode();
		return ResultUtil.data(YgglAttaZcxxb.builder().build()
				.delete(new QueryWrapper<YgglAttaZcxxb>().eq("org_code", orgCode).eq("id", id)), "删除员工职称信息表成功");
	}

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

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

	/**
	 * 添加/修改员工证书证件表
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/zszjb")
	@ApiOperation(value = "添加/修改员工证书证件表", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 27)
	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 = "删除员工证书证件表", httpMethod = "DELETE", notes = "接口发布说明")
	@ApiOperationSupport(order = 28)
	public Result<Boolean> delzszjb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
		Integer orgCode = userBean.getOrgCode();
		return ResultUtil.data(YgglAttaZszjb.builder().build()
				.delete(new QueryWrapper<YgglAttaZszjb>().eq("org_code", orgCode).eq("id", id)), "删除员工证书证件表成功");
	}

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

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

	/**
	 * 添加/修改员工联系信息表
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/lxxxb")
	@ApiOperation(value = "添加/修改员工联系信息表", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 31)
	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 = "删除员工联系信息表", httpMethod = "DELETE", notes = "接口发布说明")
	@ApiOperationSupport(order = 32)
	public Result<Boolean> dellxxxb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
		Integer orgCode = userBean.getOrgCode();
		return ResultUtil.data(YgglAttaLxxxb.builder().build()
				.delete(new QueryWrapper<YgglAttaLxxxb>().eq("org_code", orgCode).eq("id", id)), "删除员工联系信息表成功");
	}

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

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

	/**
	 * 添加/修改员工紧急联系人表
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/jjlxr")
	@ApiOperation(value = "添加/修改员工紧急联系人表", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 35)
	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 = "删除员工紧急联系人表", httpMethod = "DELETE", notes = "接口发布说明")
	@ApiOperationSupport(order = 36)
	public Result<Boolean> deljjlxr(@CurrentUser UserBean userBean, @PathVariable Integer id) {
		Integer orgCode = userBean.getOrgCode();
		return ResultUtil.data(YgglAttaJjlxr.builder().build()
				.delete(new QueryWrapper<YgglAttaJjlxr>().eq("org_code", orgCode).eq("id", id)), "删除员工紧急联系人表成功");
	}

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

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

	/**
	 * 添加/修改工资卡信息
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/gzk")
	@ApiOperation(value = "添加/修改工资卡信息", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 39)
	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 = "删除工资卡信息", httpMethod = "DELETE", notes = "接口发布说明")
	@ApiOperationSupport(order = 40)
	public Result<Boolean> delgzk(@CurrentUser UserBean userBean, @PathVariable Integer id) {
		Integer orgCode = userBean.getOrgCode();
		return ResultUtil.data(YgglAttaGzk.builder().build()
				.delete(new QueryWrapper<YgglAttaGzk>().eq("org_code", orgCode).eq("id", id)), "删除工资卡信息成功");
	}

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

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

	/**
	 * 添加/修改员工合同信息表
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/htxxb")
	@ApiOperation(value = "添加/修改员工合同信息表", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 43)
	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 = "删除员工合同信息表", httpMethod = "DELETE", notes = "接口发布说明")
	@ApiOperationSupport(order = 44)
	public Result<Boolean> delhtxxb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
		Integer orgCode = userBean.getOrgCode();
		return ResultUtil.data(YgglAttaHtxxb.builder().build()
				.delete(new QueryWrapper<YgglAttaHtxxb>().eq("org_code", orgCode).eq("id", id)), "删除员工合同信息表成功");
	}

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

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

	/**
	 * 添加/修改员工材料附件表
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/clfjb")
	@ApiOperation(value = "添加/修改员工材料附件表", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 47)
	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 = "删除员工材料附件表", httpMethod = "DELETE", notes = "接口发布说明")
	@ApiOperationSupport(order = 48)
	public Result<Boolean> delclfjb(@CurrentUser UserBean userBean, @PathVariable Integer id) {
		Integer orgCode = userBean.getOrgCode();
		return ResultUtil.data(YgglAttaClfjb.builder().build()
				.delete(new QueryWrapper<YgglAttaClfjb>().eq("org_code", orgCode).eq("id", id)), "删除员工材料附件表成功");
	}

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

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

	/**
	 * 添加/修改成长记录表
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/czjlb")
	@ApiOperation(value = "添加/修改成长记录表", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 51)
	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 = "获取单个离职员工信息(管)", httpMethod = "GET", notes = "接口发布说明")
	@ApiOperationSupport(order = 52)
	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, "获取单个离职员工信息(管)成功");
	}

	/**
	 * 员工转正
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/ygzz")
	@ApiOperation(value = "员工转正", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 53)
	public Result<Void> ygzz(@CurrentUser UserBean userBean, @RequestBody YgzzDto ygzzDto) {
		UpdateWrapper<YgglMainEmp> updateWrapper = new UpdateWrapper<YgglMainEmp>();
		updateWrapper.eq("emp_num", ygzzDto.getEmpNum());
		YgglMainEmp.builder().jobStatus(2).zzTime(ygzzDto.getZzTime()).sjzzTime(new Date())
				.zzRemark(ygzzDto.getZzRemark()).build().update(updateWrapper);
		return ResultUtil.success("转正成功!");
	}

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

		Integer empNum = lzygQueryDto.getEmpNum();

		QueryWrapper<YgglMainEmp> queryWrapper = new QueryWrapper<YgglMainEmp>();
		queryWrapper.eq("emp_num", empNum).eq("org_code", userBean.getOrgCode());
		YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(queryWrapper);
		YgglMainLzb ygglMainLzb = YgglMainLzb.builder().empNum(lzygQueryDto.getEmpNum()).build();
		// 移动员工表数据到离职表
		BeanUtil.copyProperties(ygglMainEmp, ygglMainLzb);
		ygglMainLzb.insert();

		UpdateWrapper<YgglMainEmp> updateWrapper = new UpdateWrapper<YgglMainEmp>();
		updateWrapper.eq("emp_num", empNum);
		UpdateWrapper<YgglMainLzb> updateWrapper1 = new UpdateWrapper<YgglMainLzb>();
		updateWrapper1.eq("emp_num", empNum);
		YgglMainEmp.builder().empNum(lzygQueryDto.getEmpNum()).jobStatus(YgEnumInterface.jobStatus.LIZHIZHONG.getType()).build().update(updateWrapper);
		YgglMainLzb.builder().jobStatus(YgEnumInterface.jobStatus.LIZHIZHONG.getType()).lzTime(lzygQueryDto.getLzTime())
				.lzyy(lzygQueryDto.getLzyy()).lzbz(lzygQueryDto.getLzbz()).build().update(updateWrapper1);

		return ResultUtil.data(ygglMainLzb, "添加待离职员工成功");
	}

	/**
	 * 确认离职 type3-4
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/qrlz")
	@ApiOperation(value = "确认离职", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 55)
	public Result<Void> addlzb(@CurrentUser UserBean userBean, @RequestBody LzygQueryDto lzygQueryDto) {
		Integer empNum = lzygQueryDto.getEmpNum();
		// 删除员工档案表
		ygglMainEmpMapper.delete(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, empNum));
		
		YgglMainLzb.builder().empNum(empNum).jobStatus(YgEnumInterface.jobStatus.YILIZHI.getType()).sjlzTime(new Date())
				.build().update(new UpdateWrapper<YgglMainLzb>().lambda().eq(YgglMainLzb::getEmpNum, empNum));
		
		// 确认离职 删除员工关联表
		QyzxEmpEntAsso.builder().empNum(lzygQueryDto.getEmpNum()).build()
		.delete(new QueryWrapper<QyzxEmpEntAsso>().lambda().eq(QyzxEmpEntAsso::getEmpNum, empNum));

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

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

	/**
	 * 放弃离职 type3-2
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/fqlz")
	@ApiOperation(value = "放弃离职", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 56)
	public Result<Void> fqlz(@CurrentUser UserBean userBean, @RequestBody LzygQueryDto lzygQueryDto) {
		UpdateWrapper<YgglMainEmp> updateWrapper = new UpdateWrapper<YgglMainEmp>();
		updateWrapper.eq("emp_num", lzygQueryDto.getEmpNum());
		YgglMainEmp.builder().jobStatus(YgEnumInterface.jobStatus.ZHENSHI.getType()).build().update(updateWrapper);
		QueryWrapper<YgglMainLzb> queryWrapper = new QueryWrapper<YgglMainLzb>();
		queryWrapper.eq("emp_num", lzygQueryDto.getEmpNum());
		// 删除离职表
		YgglMainLzb.builder().id(lzygQueryDto.getEmpNum()).build().delete(queryWrapper);

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

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

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

	}

	/**
	 * 查询离职员工列表
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/querylzyg")
	@ApiOperation(value = "查询离职员工列表", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 57)
	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 = "展示民族/展示所有民族", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 59)
	public Result<List<YgmzDto>> selectmzs(@CurrentUser UserBean userBean, @PathVariable Integer id) {
		if (id == null || id == 0) {
			List<YgmzDto> allmz = new LambdaQueryChainWrapper<YgmzDto>(ygMzDtoMapper).list();
			return ResultUtil.data(allmz, "展示所有民族");
		}
		List<YgmzDto> mz = new LambdaQueryChainWrapper<YgmzDto>(ygMzDtoMapper).eq(YgmzDto::getNumber, id).list();
		return ResultUtil.data(mz, "展示该民族");
	}

	@Autowired
	CommonAreaMapper commonAreaMapper;

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

		List<CommonArea> listCommonArea = commonAreaMapper.AllAreaForTree();
		return ResultUtil.data(listCommonArea, "操作成功!");

	}

	/**
	 * 展示籍贯/展示所有籍贯
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/jg")
	@ApiOperation(value = "展示籍贯所有省市区", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 60)
	public Result<List<YgjgDto>> selectjgs(@CurrentUser UserBean userBean) {

		List<YgjgDto> oldfather = new ArrayList<YgjgDto>();// 老父亲

		List<YgProDto> pro = new LambdaQueryChainWrapper<YgProDto>(ygProDtoMapper).list();// super继承人
		List<YgCityDto> city = new LambdaQueryChainWrapper<YgCityDto>(ygCityDtoMapper).list();
		List<YgAreaDto> area = new LambdaQueryChainWrapper<YgAreaDto>(ygAreaDtoMapper).list();

		for (YgProDto p : pro) {
			Map<String, Object> map = BeanUtil.beanToMap(p);
			// 设置别名对应bean
			HashMap<String, String> mapping = CollUtil.newHashMap();
			mapping.put("id", "jgid");
			mapping.put("name", "jgname");
			YgjgDto ygproDto = BeanUtil.mapToBean(map, YgjgDto.class, CopyOptions.create().setFieldMapping(mapping));
			// 添加cityList
			// 给一个upid
			List<YgCityDto> outcity = uptocityList(city, ygproDto.getJgid());
			// 新建一个篮子
			List<YgjgDto> cityDtos = new ArrayList<YgjgDto>();
			for (YgCityDto c : outcity) {
				Map<String, Object> map2 = BeanUtil.beanToMap(c);
				HashMap<String, String> mapping2 = CollUtil.newHashMap();
				mapping2.put("id", "jgid");
				mapping2.put("name", "jgname");
				mapping2.put("province", "upid");
				YgjgDto ygcityDto = BeanUtil.mapToBean(map2, YgjgDto.class,
						CopyOptions.create().setFieldMapping(mapping2));
				// 把果实收起来
				cityDtos.add(ygcityDto);
				List<YgAreaDto> outarea = uptoareaList(area, ygcityDto.getJgid());

				List<YgjgDto> areaDtos = new ArrayList<YgjgDto>();
				for (YgAreaDto a : outarea) {
					Map<String, Object> map3 = BeanUtil.beanToMap(a);
					HashMap<String, String> mapping3 = CollUtil.newHashMap();
					mapping3.put("id", "jgid");
					mapping3.put("name", "jgname");
					mapping3.put("city", "upid");
					YgjgDto ygjgDto3 = BeanUtil.mapToBean(map3, YgjgDto.class,
							CopyOptions.create().setFieldMapping(mapping3));
					areaDtos.add(ygjgDto3);

				}
				ygcityDto.setYgjgDtoList(areaDtos);
				areaDtos.add(ygcityDto);

			}
			ygproDto.setYgjgDtoList(cityDtos);
			oldfather.add(ygproDto);
		}

		return ResultUtil.data(oldfather, "老父亲出来了");
	}

	// 根据上级id抽取出list
	public List<YgCityDto> uptocityList(List<YgCityDto> city, Integer jgid) {
		List<YgCityDto> outcity = new ArrayList<YgCityDto>();
		for (YgCityDto c : city) {
			if (c.getProvince().equals(jgid)) {
				outcity.add(c);
			}
		}
		city.removeAll(outcity);
		return outcity;
	}

	public List<YgAreaDto> uptoareaList(List<YgAreaDto> area, Integer jgid) {
		List<YgAreaDto> outarea = new ArrayList<YgAreaDto>();
		for (YgAreaDto a : area) {
			if (a.getCity().equals(jgid)) {
				outarea.add(a);
			}
		}
		area.removeAll(outarea);
		return outarea;
	}

	/**
	 * 展示籍贯/展示所有籍贯(威力增强版)
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/jgshow/{jgid}")
	@ApiOperation(value = "展示籍贯所有省市区威力增强版", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 388)
	public Result<Map<String, String>> selectjgs1(@CurrentUser UserBean userBean, @PathVariable String jgid) {
		// public Result<List<YgjgDto>> selectjgs1(@CurrentUser UserBean userBean,
		// @RequestBody YgjgDto ygjgDto) {
		Integer upId = Integer.valueOf(jgid);
		// List<YgjgDto> maps = new ArrayList<YgjgDto>();
		Map<String, String> maps = new HashMap<String, String>();
		if (upId == null || upId % 100 != 0) { // 省份
			List<YgProDto> list = new LambdaQueryChainWrapper<YgProDto>(ygProDtoMapper)
					.select(YgProDto::getId, YgProDto::getProvince, YgProDto::getName).orderByAsc(YgProDto::getProvince)
					.list();
			list.forEach((item) -> maps.put((item.getId()).toString(), item.getName()));
		} else if (upId % 10000 == 0) {
			List<YgCityDto> list = new LambdaQueryChainWrapper<YgCityDto>(ygCityDtoMapper)
					.select(YgCityDto::getId, YgCityDto::getProvince, YgCityDto::getCity, YgCityDto::getName)
					.eq(YgCityDto::getProvince, upId).orderByAsc(YgCityDto::getProvince).orderByAsc(YgCityDto::getCity)
					.list();
			list.forEach((item) -> maps.put((item.getId()).toString(), item.getName()));

		} else if (upId % 100 == 0) {
			List<YgAreaDto> list = new LambdaQueryChainWrapper<YgAreaDto>(ygAreaDtoMapper)
					.select(YgAreaDto::getId, YgAreaDto::getName).eq(YgAreaDto::getCity, upId)
					.orderByAsc(YgAreaDto::getProvince).orderByAsc(YgAreaDto::getCity).list();
			list.forEach((item) -> maps.put((item.getId()).toString(), item.getName()));
		}
		return ResultUtil.data(maps, "展示籍贯成功");
	}

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

	/*************** 统计图 ***************/
	/**
	 * 查询统计图
	 * 
	 * @return 成功信息
	 */
	@GetMapping("/yggl")
	@ApiOperation(value = "获取员工管理统计图信息", 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 = "获取员工管理统计图信息", httpMethod = "GET", notes = "接口发布说明")
	@ApiOperationSupport(order = 99)
	public Result<YgCartogramDto> ygCartogram(@CurrentUser UserBean userBean) {
		Integer orgCode = userBean.getOrgCode();
		List<YgbintuDto> bintu = ygglMainEmpMapper.rsybp(orgCode);
		/*
		 * bintu.stream().filter(bean ->{ if (bean.getAge() == null) { bean.setAge(0); }
		 * if (bean.getBm() == null) { bean.setBm("未分配"); } if (bean.getGw() == null) {
		 * bean.setGw("未分配"); } if (bean.getProname() == null) { bean.setProname("未分配");
		 * } if (bean.getEduname() == null) { bean.setEduname("未分配"); } if
		 * (bean.getJobStatus() == null) { bean.setJobStatus(-1); } if
		 * (bean.getWorkage() == null) { bean.setWorkage(-1); } return true;
		 * }).collect(Collectors.toList());
		 */
		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, Map<String, Long>> bmgw =
		// bintu.stream().collect(Collectors.groupingBy(YgbintuDto::getBm,Collectors.groupingBy(YgbintuDto::getGw,Collectors.counting())));
		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 = "获取员工社保公积金", httpMethod = "GET", notes = "接口发布说明")
	@ApiOperationSupport(order = 64)
	public Result<List<YgglAttaSbgjj>> selectygsbgjj(@CurrentUser UserBean userBean) {
		List<YgglAttaSbgjj> ygglAttaSbgjj = YgglAttaSbgjj.builder().build().selectList(new QueryWrapper<YgglAttaSbgjj>()
				.eq("org_code", userBean.getOrgCode()).eq("emp_num", userBean.getEmpNum()));
		return ResultUtil.data(ygglAttaSbgjj, "获取员工社保公积金成功");
	}

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

		YgglAttaSbgjj ygglAttaSbgjj = YgglAttaSbgjj.builder().build()
				.selectOne(new QueryWrapper<YgglAttaSbgjj>().eq("emp_num", empNum));

		return ResultUtil.data(ygglAttaSbgjj, "获取员工社保公积金成功");
	}

	/**
	 * 添加/修改员工社保公积金
	 * 
	 * @param
	 * @return
	 */
	@PostMapping(value = "/ygsbgjj")
	@ApiOperation(value = "添加/修改员工社保公积金", httpMethod = "POST", notes = "接口发布说明")
	@ApiOperationSupport(order = 66)
	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>().eq("emp_num", empNum));
		if (AttaSbgjj != null) {
			ygglAttaSbgjj.update(new UpdateWrapper<YgglAttaSbgjj>().eq("emp_num", empNum));
		} else {
			ygglAttaSbgjj.insert();
		}

		return ResultUtil.data(ygglAttaSbgjj, "添加/修改员工社保公积金成功");
	}

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

		// 配置
		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());
			tree.setName(treeNode.getRegionName());
			// 扩展属性 ...
			tree.putExtra("mer_name", treeNode.getMerName());
		});

		return ResultUtil.data(treeNodes, "获取成功");
	}

}