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; } } } } }