package cn.timer.api.controller.xcgl.atttimer;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import cn.hutool.core.collection.CollectionUtil;
import cn.timer.api.bean.xcgl.XcglAssoXzdadx;
import cn.timer.api.bean.xcgl.XcglAssoXzdaz;
import cn.timer.api.dao.xcgl.XcglAssoXzdadxMapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

import cn.timer.api.bean.kqgl.AttendanceWeeklySch;
import cn.timer.api.bean.kqgl.PunchCardDetails;
import cn.timer.api.bean.kqgl.PunchRecord;
import cn.timer.api.bean.kqgl.Schedule;
import cn.timer.api.bean.kqmk.KqglAssoBcsz;
import cn.timer.api.bean.kqmk.KqglAssoDkmx;
import cn.timer.api.bean.kqmk.KqglAssoLeaveRules;
import cn.timer.api.bean.kqmk.KqglAssoMonthPunchSummary;
import cn.timer.api.bean.kqmk.KqglAssoOvertimeBasics;
import cn.timer.api.bean.kqmk.KqglAssoPbmx;
import cn.timer.api.bean.kqmk.KqglAssoRelationSummary;
import cn.timer.api.bean.kqmk.KqglAssoTeshu;
import cn.timer.api.bean.kqmk.KqglAssoZhoupaiban;
import cn.timer.api.bean.kqmk.KqglMainKqz;
import cn.timer.api.bean.kqmk.KqmkRedletterDay;
import cn.timer.api.bean.qyzx.QyzxEntInfoM;
import cn.timer.api.bean.yggl.YgglMainLzb;
import cn.timer.api.controller.kqgl.ClockInController;
import cn.timer.api.controller.kqgl.ClockInTool;
import cn.timer.api.controller.kqgl.EmptyUtil;
import cn.timer.api.dao.kqgl.AttendanceWeeklySchMapper;
import cn.timer.api.dao.kqgl.PunchCardDetailsMapper;
import cn.timer.api.dao.kqgl.PunchRecordMapper;
import cn.timer.api.dao.kqgl.ScheduleMapper;
import cn.timer.api.dao.kqmk.KqglAssoDkmxMapper;
import cn.timer.api.dao.kqmk.KqglAssoLeaveBalanceMapper;
import cn.timer.api.dao.kqmk.KqglAssoRelationSummaryMapper;
import cn.timer.api.dao.kqmk.KqglAssoTeshuMapper;
import cn.timer.api.dao.kqmk.KqglMainKqzMapper;
import cn.timer.api.dao.qyzx.QyzxEntInfoMMapper;
import cn.timer.api.dto.kqmk.AdditionalDto;
import cn.timer.api.dto.kqmk.AttSchedule;
import cn.timer.api.dto.kqmk.AttSubsidiaryDto;
import cn.timer.api.dto.kqmk.AttendanceCardListDto;
import cn.timer.api.utils.DateUtil;

import javax.annotation.Resource;

/**
 *	调薪记录生效定时任务
 */
//@Component
//@Lazy
@Configuration      //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling   // 2.开启定时任务
public class SalaryTaskTiming{
	// 薪酬管理-定薪
	@Resource
	private XcglAssoXzdadxMapper xcglassoxzdadxmapper;

	 //3.添加定时任务 每天凌晨1点执行一次
	@Scheduled(cron = "0 0 1 * * ?")
	public void AttendanceTask() throws ParseException {
		// 使用状态(0:使用中;1:历史, 2: 未生效)
		// 当前日期
		String curDate = DateUtil.getStringFormat(new Date().getTime());

		// 获取小于等于当前日期的未生效数据
		List<XcglAssoXzdadx> xzdxlist = xcglassoxzdadxmapper.listIneffective(curDate);
		if (CollectionUtil.isNotEmpty(xzdxlist)) {
			xzdxlist.forEach(o -> {
				// 将使用中的薪资数据置为历史
				XcglAssoXzdadx  dadxUsed = new LambdaQueryChainWrapper<XcglAssoXzdadx>(xcglassoxzdadxmapper)
						.eq(XcglAssoXzdadx::getUserid, o.getUserid())
						.eq(XcglAssoXzdadx::getTxzt, 0).one();
				dadxUsed.setTxzt(1);
				xcglassoxzdadxmapper.updateById(dadxUsed);

				// 将未生效的薪资数据置为使用中
				o.setTxzt(0);
				xcglassoxzdadxmapper.updateById(o);
			});
		}
		// 处理出现多个使用中的错误数据, list 按工号、生效日期升序
		List<XcglAssoXzdadx> listRepeat = xcglassoxzdadxmapper.listRepeatUsed();
		if (CollectionUtil.isNotEmpty(listRepeat)) {
			for (int i = 0; i < listRepeat.size(); i++) {
				XcglAssoXzdadx xzdadx = listRepeat.get(i);
				while ((i +1) <listRepeat.size()
						&& xzdadx.getUserid().equals(listRepeat.get(i +1).getUserid())) {
					xzdadx.setTxzt(1);
					xcglassoxzdadxmapper.updateById(xzdadx);

					xzdadx = listRepeat.get(i +1);
					i = i + 1;
				}
			}
		}
	}
}