package cn.timer.api.controller.zzgl.service;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;

import cn.hutool.core.collection.ListUtil;
import cn.timer.api.bean.yggl.YgglMainEmp;
import cn.timer.api.bean.zzgl.ZzglBmgwM;
import cn.timer.api.dao.yggl.YgglMainEmpMapper;
import cn.timer.api.dao.zzgl.ZzglBmgwMMapper;
import cn.timer.api.dao.zzgl.ZzglLogDgjlMapper;
import cn.timer.api.dto.zzgl.UpEmpDeptDto;

/**
 * 部门岗位 服务逻辑层
 * 
 * @author Tang
 */
@Service
public class ZzglBmgwMServiceImpl implements ZzglBmgwMService {

	@Autowired
	private ZzglBmgwMMapper zzglBmgwMMapper;
	
	@Autowired
	private YgglMainEmpMapper ygglMainEmpMapper;
	
	@Autowired
	private ZzglLogDgjlMapper zzglLogDgjlMapper;
	
	//根据传来的empNum获取该人员的岗位,以及上面所有的部门id,返回integer数组
	@Override
	public List<Integer> empNumupGetDepts(Integer orgCode,Integer empNum) {
		Set<Integer> lanzi = new HashSet<Integer>();
		//所有部门岗位
		List<ZzglBmgwM> bmgws = new LambdaQueryChainWrapper<ZzglBmgwM>(zzglBmgwMMapper).eq(ZzglBmgwM::getOrgCode, orgCode).list();
		//个人岗位
		YgglMainEmp one = new LambdaQueryChainWrapper<YgglMainEmp>(ygglMainEmpMapper)
				.select(YgglMainEmp::getBmgwId)
		.eq(YgglMainEmp::getOrgCode, orgCode).eq(YgglMainEmp::getEmpNum, empNum).one();
		Integer getId = one != null ? one.getBmgwId() : null;
		System.out.println(getId);
		Set<Integer> all = one != null ? empNumupdept2(lanzi, bmgws, getId) : new HashSet<Integer>();
		all.add(getId);
		return ListUtil.toList(all);
	}
	
	//遍历
	public Set<Integer> empNumupdept2(Set<Integer> lanzi,List<ZzglBmgwM> bmgws,Integer getId) {
		for (ZzglBmgwM z : bmgws) {
			if (getId.equals(z.getId())) {
				lanzi.add(getId);
				if (z.getUpId()==null || z.getUpId() == 0) {
					return lanzi;
				}
				getId = z.getUpId();
				empNumupdept2(lanzi, bmgws, getId);
			}
		}
		return lanzi;
	}

	/**
	 * 调岗
	 */
	@Override
	public void applicationTransferPosition(Integer empNum,Integer orgCode,UpEmpDeptDto upEmpDeptDto) {
		// TODO Auto-generated method stub
		Integer dpetId = upEmpDeptDto.getDpetId();
		List<Integer> empNums = new ArrayList<Integer>();
		empNums.add(empNum);
		YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build();
		
		UpdateWrapper<YgglMainEmp> updateWrapper = new UpdateWrapper<YgglMainEmp>();
		updateWrapper.set("bmgw_id", dpetId).eq("org_code", orgCode).in("emp_num", empNum);
		zzglLogDgjlMapper.insertbyaddemp(empNums, empNum, dpetId, orgCode,
				dpetId == null || dpetId == 0 ? "岗位删除员工" : upEmpDeptDto.getIsdg() == null ? "岗位添加员工" : "员工调岗");
		ygglMainEmp.update(updateWrapper);
	}
	
}