wuxw
2025-01-03 adb33007bf87f63a893f90196a6087f9cafe34c7
service-job/src/main/java/com/java110/job/task/attendance/GeneratorAttendanceTaskTemplate.java
@@ -1,24 +1,29 @@
package com.java110.job.task.attendance;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.attendanceClasses.AttendanceClassesDto;
import com.java110.dto.attendanceClasses.AttendanceClassesTaskDetailDto;
import com.java110.dto.attendanceClasses.AttendanceClassesTaskDto;
import com.java110.dto.org.OrgStaffRelDto;
import com.java110.dto.scheduleClassesStaff.ScheduleClassesStaffDto;
import com.java110.dto.scheduleClassesTime.ScheduleClassesTimeDto;
import com.java110.dto.attendance.AttendanceClassesDto;
import com.java110.dto.attendance.AttendanceClassesTaskDetailDto;
import com.java110.dto.attendance.AttendanceClassesTaskDto;
import com.java110.dto.attendance.AttendanceClassesStaffDto;
import com.java110.dto.classes.ScheduleClassesStaffDto;
import com.java110.dto.classes.ScheduleClassesTimeDto;
import com.java110.dto.store.StoreDto;
import com.java110.dto.task.TaskDto;
import com.java110.dto.user.UserDto;
import com.java110.intf.common.IAttendanceClassesInnerServiceSMO;
import com.java110.intf.common.IAttendanceClassesTaskDetailInnerServiceSMO;
import com.java110.intf.common.IAttendanceClassesTaskInnerServiceSMO;
import com.java110.intf.store.IOrgStaffRelV1InnerServiceSMO;
import com.java110.intf.store.IScheduleClassesStaffV1InnerServiceSMO;
import com.java110.intf.store.IStoreV1InnerServiceSMO;
import com.java110.intf.user.IAttendanceClassesStaffV1InnerServiceSMO;
import com.java110.intf.user.IUserV1InnerServiceSMO;
import com.java110.job.quartz.TaskSystemQuartz;
import com.java110.po.attendanceClassesTask.AttendanceClassesTaskPo;
import com.java110.po.attendanceClassesTaskDetail.AttendanceClassesTaskDetailPo;
import com.java110.po.attendance.AttendanceClassesTaskPo;
import com.java110.po.attendance.AttendanceClassesTaskDetailPo;
import com.java110.utils.util.Assert;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.ListUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -39,6 +44,9 @@
    private IAttendanceClassesInnerServiceSMO attendanceClassesInnerServiceSMOImpl;
    @Autowired
    private IAttendanceClassesStaffV1InnerServiceSMO attendanceClassesStaffV1InnerServiceSMOImpl;
    @Autowired
    private IAttendanceClassesTaskInnerServiceSMO attendanceClassesTaskInnerServiceSMOImpl;
    @Autowired
@@ -49,6 +57,9 @@
    @Autowired
    private IScheduleClassesStaffV1InnerServiceSMO scheduleClassesStaffV1InnerServiceSMOImpl;
    @Autowired
    private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
    @Override
    protected void process(TaskDto taskDto) throws Exception {
@@ -105,19 +116,19 @@
        //查询组织 关联的员工
        OrgStaffRelDto orgStaffRelDto = new OrgStaffRelDto();
        orgStaffRelDto.setOrgId(tmpAttendanceClassesDto.getClassesObjId());
        orgStaffRelDto.setStoreId(tmpStoreDto.getStoreId());
        List<OrgStaffRelDto> orgStaffRelDtos = orgStaffRelV1InnerServiceSMOImpl.queryOrgStaffRels(orgStaffRelDto);
        if (orgStaffRelDtos == null || orgStaffRelDtos.size() < 1) {
        AttendanceClassesStaffDto attendanceClassesStaffDto = new AttendanceClassesStaffDto();
        attendanceClassesStaffDto.setClassesId(tmpAttendanceClassesDto.getClassesId());
        attendanceClassesStaffDto.setStoreId(tmpStoreDto.getStoreId());
        List<AttendanceClassesStaffDto> attendanceClassesStaffs = attendanceClassesStaffV1InnerServiceSMOImpl.queryAttendanceClassesStaffs(attendanceClassesStaffDto);
        if (ListUtil.isNull(attendanceClassesStaffs)) {
            return;
        }
        for (OrgStaffRelDto tmpOrgStaffRelDto : orgStaffRelDtos) {
        for (AttendanceClassesStaffDto tmpAttendanceClassesStaffDto : attendanceClassesStaffs) {
            try {
                doGeneratorStaffAttendance(tmpStoreDto, tmpAttendanceClassesDto, tmpOrgStaffRelDto);
                doGeneratorStaffAttendance(tmpStoreDto, tmpAttendanceClassesDto, tmpAttendanceClassesStaffDto);
            } catch (Exception e) {
                logger.error("员工生成考勤任务失败" + tmpOrgStaffRelDto.getStaffId(), e);
                logger.error("员工生成考勤任务失败" + tmpAttendanceClassesStaffDto.getStaffId(), e);
            }
        }
    }
@@ -127,12 +138,12 @@
     *
     * @param tmpStoreDto
     * @param tmpAttendanceClassesDto
     * @param tmpOrgStaffRelDto
     * @param tmpAttendanceClassesStaffDto
     */
    private void doGeneratorStaffAttendance(StoreDto tmpStoreDto, AttendanceClassesDto tmpAttendanceClassesDto, OrgStaffRelDto tmpOrgStaffRelDto) {
    private void doGeneratorStaffAttendance(StoreDto tmpStoreDto, AttendanceClassesDto tmpAttendanceClassesDto, AttendanceClassesStaffDto tmpAttendanceClassesStaffDto) {
        ScheduleClassesStaffDto scheduleClassesStaffDto = new ScheduleClassesStaffDto();
        scheduleClassesStaffDto.setStaffId(tmpOrgStaffRelDto.getStaffId());
        scheduleClassesStaffDto.setStaffId(tmpAttendanceClassesStaffDto.getStaffId());
        scheduleClassesStaffDto.setToday(new Date());
        scheduleClassesStaffDto = scheduleClassesStaffV1InnerServiceSMOImpl.staffIsWork(scheduleClassesStaffDto);
@@ -149,7 +160,7 @@
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        AttendanceClassesTaskDto attendanceClassesTaskDto = new AttendanceClassesTaskDto();
        attendanceClassesTaskDto.setStaffId(tmpOrgStaffRelDto.getStaffId());
        attendanceClassesTaskDto.setStaffId(tmpAttendanceClassesStaffDto.getStaffId());
        attendanceClassesTaskDto.setClassId(tmpAttendanceClassesDto.getClassesId());
        attendanceClassesTaskDto.setTaskYear(year + "");
        attendanceClassesTaskDto.setTaskMonth(month + "");
@@ -161,15 +172,20 @@
            return;
        }
        UserDto userDto = new UserDto();
        userDto.setUserId(tmpAttendanceClassesStaffDto.getStaffId());
        List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
        Assert.listOnlyOne(userDtos, "员工不存在");
        AttendanceClassesTaskPo attendanceClassesTaskPo = new AttendanceClassesTaskPo();
        attendanceClassesTaskPo.setStaffId(tmpOrgStaffRelDto.getStaffId());
        attendanceClassesTaskPo.setStaffId(tmpAttendanceClassesStaffDto.getStaffId());
        attendanceClassesTaskPo.setClassId(tmpAttendanceClassesDto.getClassesId());
        attendanceClassesTaskPo.setTaskYear(year + "");
        attendanceClassesTaskPo.setTaskMonth(month + "");
        attendanceClassesTaskPo.setTaskDay(day + "");
        attendanceClassesTaskPo.setState(AttendanceClassesTaskDto.STATE_WAIT);
        attendanceClassesTaskPo.setStaffName(tmpOrgStaffRelDto.getStaffName());
        attendanceClassesTaskPo.setStaffName(userDtos.get(0).getName());
        attendanceClassesTaskPo.setStoreId(tmpStoreDto.getStoreId());
        attendanceClassesTaskPo.setTaskId(GenerateCodeFactory.getGeneratorId("11"));
@@ -178,9 +194,14 @@
        if (flag < 1) {
            throw new IllegalArgumentException("保存考勤任务失败");
        }
        for (ScheduleClassesTimeDto tmpScheduleClassesTimeDto : times) {
            doGeneratorStaffAttendanceTime(tmpStoreDto, tmpAttendanceClassesDto, tmpOrgStaffRelDto, tmpScheduleClassesTimeDto, attendanceClassesTaskPo);
        ScheduleClassesTimeDto tmpScheduleClassesTimeDto = null;
        boolean isLast = false;
        for (int timeIndex = 0; timeIndex < times.size(); timeIndex++) {
            tmpScheduleClassesTimeDto = times.get(timeIndex);
            if (timeIndex == (times.size() - 1)) {
                isLast = true;
            }
            doGeneratorStaffAttendanceTime(tmpStoreDto, tmpAttendanceClassesDto, tmpAttendanceClassesStaffDto, tmpScheduleClassesTimeDto, attendanceClassesTaskPo, isLast);
        }
    }
@@ -190,11 +211,11 @@
     *
     * @param tmpStoreDto
     * @param tmpAttendanceClassesDto
     * @param tmpOrgStaffRelDto
     * @param tmpAttendanceClassesStaffDto
     * @param tmpScheduleClassesTimeDto
     */
    private void doGeneratorStaffAttendanceTime(StoreDto tmpStoreDto, AttendanceClassesDto tmpAttendanceClassesDto, OrgStaffRelDto tmpOrgStaffRelDto,
                                                ScheduleClassesTimeDto tmpScheduleClassesTimeDto, AttendanceClassesTaskPo attendanceClassesTaskPo) {
    private void doGeneratorStaffAttendanceTime(StoreDto tmpStoreDto, AttendanceClassesDto tmpAttendanceClassesDto, AttendanceClassesStaffDto tmpAttendanceClassesStaffDto,
                                                ScheduleClassesTimeDto tmpScheduleClassesTimeDto, AttendanceClassesTaskPo attendanceClassesTaskPo, boolean islast) {
        String curDate = DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B);
@@ -208,23 +229,24 @@
        //alter table attendance_classes_task_detail add COLUMN late_value varchar(12) not null comment '正常或者早退时间,spec_cd 1001 是迟到 2002 是正常时间';
        String value = curDate + " " + startTimeStr + ":00";
        Date valueDate = DateUtil.getDateFromStringA(value);
        Date startValueDate = DateUtil.getDateFromStringA(value);
        int timeOffset = Integer.parseInt(tmpAttendanceClassesDto.getTimeOffset());
        int maxLastOffset = Integer.parseInt(tmpAttendanceClassesDto.getMaxLastOffset());
        AttendanceClassesTaskDetailPo attendanceClassesTaskDetailPo = new AttendanceClassesTaskDetailPo();
        attendanceClassesTaskDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId("12"));
        attendanceClassesTaskDetailPo.setTaskId(attendanceClassesTaskPo.getTaskId());
        attendanceClassesTaskDetailPo.setSpecCd(AttendanceClassesTaskDetailDto.SPEC_CD_START);
        attendanceClassesTaskDetailPo.setValue(curDate + " " + startTimeStr + ":00");
        attendanceClassesTaskDetailPo.setValue(value);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(valueDate);
        calendar.setTime(startValueDate);
        calendar.add(Calendar.MINUTE, timeOffset * -1);
        attendanceClassesTaskDetailPo.setLeaveValue(DateUtil.getFormatTimeString(calendar.getTime(), DateUtil.DATE_FORMATE_STRING_A));
        int lateOffset = Integer.parseInt(tmpAttendanceClassesDto.getLateOffset());
        calendar = Calendar.getInstance();
        calendar.setTime(valueDate);
        calendar.setTime(startValueDate);
        calendar.add(Calendar.MINUTE, lateOffset);
        attendanceClassesTaskDetailPo.setLateValue(DateUtil.getFormatTimeString(calendar.getTime(), DateUtil.DATE_FORMATE_STRING_A));
        attendanceClassesTaskDetailPo.setState(AttendanceClassesTaskDetailDto.STATE_WAIT);
@@ -237,7 +259,15 @@
        }
        value = curDate + " " + endTimeStr + ":00";
        valueDate = DateUtil.getDateFromStringA(value);
        Date endValueDate = DateUtil.getDateFromStringA(value);
        if (endValueDate.getTime() < startValueDate.getTime()) {
            Calendar endDateCal = Calendar.getInstance();
            endDateCal.setTime(endValueDate);
            endDateCal.add(Calendar.DAY_OF_MONTH, 1);
            endValueDate = endDateCal.getTime();
            value = DateUtil.getFormatTimeString(endValueDate, DateUtil.DATE_FORMATE_STRING_A);
        }
        int leaveOffset = Integer.parseInt(tmpAttendanceClassesDto.getLeaveOffset());
@@ -245,15 +275,19 @@
        attendanceClassesTaskDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId("12"));
        attendanceClassesTaskDetailPo.setTaskId(attendanceClassesTaskPo.getTaskId());
        attendanceClassesTaskDetailPo.setSpecCd(AttendanceClassesTaskDetailDto.SPEC_CD_END);
        attendanceClassesTaskDetailPo.setValue(curDate + " " + endTimeStr + ":00");
        attendanceClassesTaskDetailPo.setValue(value);
        calendar = Calendar.getInstance();
        calendar.setTime(valueDate);
        calendar.setTime(endValueDate);
        calendar.add(Calendar.MINUTE, leaveOffset * -1);
        attendanceClassesTaskDetailPo.setLeaveValue(DateUtil.getFormatTimeString(calendar.getTime(), DateUtil.DATE_FORMATE_STRING_A));
        calendar = Calendar.getInstance();
        calendar.setTime(valueDate);
        calendar.add(Calendar.MINUTE, timeOffset);
        calendar.setTime(endValueDate);
        if (!islast) {
            calendar.add(Calendar.MINUTE, timeOffset);
        } else {
            calendar.add(Calendar.MINUTE, maxLastOffset);
        }
        attendanceClassesTaskDetailPo.setLateValue(DateUtil.getFormatTimeString(calendar.getTime(), DateUtil.DATE_FORMATE_STRING_A));
        attendanceClassesTaskDetailPo.setState(AttendanceClassesTaskDetailDto.STATE_WAIT);
        attendanceClassesTaskDetailPo.setStoreId(tmpStoreDto.getStoreId());