SalaryTaskTiming.java 4.31 KB
Newer Older
mobh committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
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;
				}
			}
		}
	}
}