package com.yanzhu.jh.project.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.yanzhu.jh.project.domain.SurProjectAttendanceCfg;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yanzhu.jh.project.mapper.SurProjectAttendanceUserMapper;
import com.yanzhu.jh.project.domain.SurProjectAttendanceUser;
import com.yanzhu.jh.project.service.ISurProjectAttendanceUserService;
import com.ruoyi.common.utils.SecurityUtils;
/**
 * 考勤人员基本属性Service业务层处理
 * 
 * @author ruoyi
 * @date 2023-09-24
 */
@Service
public class SurProjectAttendanceUserServiceImpl implements ISurProjectAttendanceUserService 
{
    @Autowired
    private SurProjectAttendanceUserMapper surProjectAttendanceUserMapper;

    /**
     * 查询考勤人员基本属性
     * 
     * @param id 考勤人员基本属性主键
     * @return 考勤人员基本属性
     */
    @Override
    public SurProjectAttendanceUser selectSurProjectAttendanceUserById(Long id)
    {
        return surProjectAttendanceUserMapper.selectSurProjectAttendanceUserById(id);
    }

    /**
     * 查询考勤人员信息
     *
     * @param surProjectAttendanceUser
     * @return 考勤人员基本属性
     */
    @Override
    public SurProjectAttendanceUser findCurrentAttendanceUser(SurProjectAttendanceUser surProjectAttendanceUser) {
        return surProjectAttendanceUserMapper.findCurrentAttendanceUser(surProjectAttendanceUser);
    }

    /**
     * 查询考勤人员基本属性列表
     * 
     * @param surProjectAttendanceUser 考勤人员基本属性
     * @return 考勤人员基本属性
     */
    @Override
    public List<SurProjectAttendanceUser> selectSurProjectAttendanceUserList(SurProjectAttendanceUser surProjectAttendanceUser)
    {
        return surProjectAttendanceUserMapper.selectSurProjectAttendanceUserList(surProjectAttendanceUser);
    }

    /**
     * 新增考勤人员基本属性
     * 
     * @param surProjectAttendanceUser 考勤人员基本属性
     * @return 结果
     */
    @Override
    public int insertSurProjectAttendanceUser(SurProjectAttendanceUser surProjectAttendanceUser)
    {
        if(StringUtils.isEmpty(surProjectAttendanceUser.getCreateBy())){
            surProjectAttendanceUser.setCreateBy("task");
            surProjectAttendanceUser.setCreateTime(DateUtils.getNowDate());
        }
        return surProjectAttendanceUserMapper.insertSurProjectAttendanceUser(surProjectAttendanceUser);
    }

    /**
     * 修改考勤人员基本属性
     * 
     * @param surProjectAttendanceUser 考勤人员基本属性
     * @return 结果
     */
    @Override
    public int updateSurProjectAttendanceUser(SurProjectAttendanceUser surProjectAttendanceUser)
    {
        if(StringUtils.isEmpty(surProjectAttendanceUser.getCreateBy())){
            surProjectAttendanceUser.setUpdateBy("task");
        }
        surProjectAttendanceUser.setUpdateTime(DateUtils.getNowDate());
        return surProjectAttendanceUserMapper.updateSurProjectAttendanceUser(surProjectAttendanceUser);
    }

    /**
     * 批量删除考勤人员基本属性
     * 
     * @param ids 需要删除的考勤人员基本属性主键
     * @return 结果
     */
    @Override
    public int deleteSurProjectAttendanceUserByIds(Long[] ids)
    {
        return surProjectAttendanceUserMapper.deleteSurProjectAttendanceUserByIds(ids);
    }

    /**
     * 删除考勤人员基本属性信息
     * 
     * @param id 考勤人员基本属性主键
     * @return 结果
     */
    @Override
    public int deleteSurProjectAttendanceUserById(Long id)
    {
        return surProjectAttendanceUserMapper.deleteSurProjectAttendanceUserById(id);
    }

    /**
     * 批量删除考勤人员基本属性
     *
     * @param list 需要删除的数据参数集合
     * @return 结果
     */
    @Override
    public int deleteSurProjectAttendanceUserByParams(List<String> list) {
        return surProjectAttendanceUserMapper.deleteSurProjectAttendanceUserByParams(list);
    }

    /**
     * 批量新增考勤人员基本属性
     *
     * @param surProjectAttendanceUserList 考勤人员基本属性列表
     * @return 结果
     */
    @Override
    public int batchSurProjectAttendanceUser(List<SurProjectAttendanceUser> surProjectAttendanceUserList) {
        return surProjectAttendanceUserMapper.batchSurProjectAttendanceUser(surProjectAttendanceUserList);
    }

    @Override
    public void add(SurProjectAttendanceUser user) {
        SurProjectAttendanceUser where=new SurProjectAttendanceUser();
        where.setWorkerId(user.getWorkerId());
        where.setCfgid(user.getCfgid());
        List<SurProjectAttendanceUser> list=selectSurProjectAttendanceUserList(where);
        if(list.size()==0){
            insertSurProjectAttendanceUser(user);
        }else{
            user.setId(list.get(0).getId());
            updateSurProjectAttendanceUser(user);
        }
    }

    @Override
    public List<SurProjectAttendanceUser> queryAttendanceData(SurProjectAttendanceUser where) {
        List<SurProjectAttendanceUser> list= surProjectAttendanceUserMapper.queryAttendanceUsers(where);
        List<String> workerIds=new ArrayList<>();
        for(SurProjectAttendanceUser u: list){
            workerIds.add(u.getWorkerId());
        }
        where.setWorkerIds(workerIds);
        List<SurProjectAttendanceUser> datas=surProjectAttendanceUserMapper.todayAttendanceData(workerIds);
        for (SurProjectAttendanceUser u:list) {
            u.setInTime(findDate(datas,u,"E"));
            u.setOutTime(findDate(datas,u,"L"));
        }
        return list;
    }

    @Override
    public long countTodayAttendance(SurProjectAttendanceUser where) {
        return surProjectAttendanceUserMapper.countTodayAttendance(where);
    }

    @Override
    public List<SurProjectAttendanceUser> todayAttendance(SurProjectAttendanceUser where) {
        if(where.getIndex()<1){
            where.setIndex(1);
        }
        where.setIndex((where.getIndex()-1)* where.getSize());
        List<SurProjectAttendanceUser> list= surProjectAttendanceUserMapper.todayAttendance(where);
        List<String> workerIds=new ArrayList<>();
        for(SurProjectAttendanceUser u: list){
            workerIds.add(u.getWorkerId());
        }
        List<SurProjectAttendanceUser> datas=surProjectAttendanceUserMapper.todayAttendanceData(workerIds);
        for (SurProjectAttendanceUser u:list) {
            u.setInTime(findDate(datas,u,"E"));
            u.setOutTime(findDate(datas,u,"L"));
        }
        return list;
    }

    @Override
    public long countAttendance(SurProjectAttendanceUser user) {
        SurProjectAttendanceCfg where=new SurProjectAttendanceCfg();
        where.setCreateBy(user.getCreateBy());
        where.setSubDeptId(user.getSubDeptId());
        where.setProjectId(user.getProjectId());
        return surProjectAttendanceUserMapper.countAttendance(where);
    }

    @Override
    public List<SurProjectAttendanceUser> selectSurProjectAttendanceUserListJgw(SurProjectAttendanceUser surProjectAttendanceUser) {
        return surProjectAttendanceUserMapper.selectSurProjectAttendanceUserListJgw(surProjectAttendanceUser);
    }

    private Date findDate(List<SurProjectAttendanceUser> datas, SurProjectAttendanceUser u, String type) {
        for (SurProjectAttendanceUser user:datas) {
            if(user.getWorkerId().equals(u.getWorkerId()) && user.getName().equals(type)){
                if(type.equals("L")){
                    return user.getOutTime();
                }else{
                    return user.getInTime();
                }
            }
        }
        return  null;
    }

}
