wuxw
2025-01-03 adb33007bf87f63a893f90196a6087f9cafe34c7
service-store/src/main/java/com/java110/store/smo/impl/ScheduleClassesStaffV1InnerServiceSMOImpl.java
@@ -16,26 +16,27 @@
package com.java110.store.smo.impl;
import com.java110.dto.scheduleClasses.ScheduleClassesDto;
import com.java110.dto.scheduleClassesDay.ScheduleClassesDayDto;
import com.java110.dto.scheduleClassesTime.ScheduleClassesTimeDto;
import com.java110.dto.classes.ScheduleClassesDto;
import com.java110.dto.classes.ScheduleClassesDayDto;
import com.java110.dto.classes.ScheduleClassesTimeDto;
import com.java110.intf.store.IScheduleClassesDayV1InnerServiceSMO;
import com.java110.intf.store.IScheduleClassesV1InnerServiceSMO;
import com.java110.store.dao.IScheduleClassesStaffV1ServiceDao;
import com.java110.intf.store.IScheduleClassesStaffV1InnerServiceSMO;
import com.java110.dto.scheduleClassesStaff.ScheduleClassesStaffDto;
import com.java110.po.scheduleClassesStaff.ScheduleClassesStaffPo;
import com.java110.dto.classes.ScheduleClassesStaffDto;
import com.java110.po.classes.ScheduleClassesStaffPo;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.core.base.smo.BaseServiceSMO;
import com.java110.dto.user.UserDto;
import com.java110.dto.PageDto;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.ListUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
@@ -127,57 +128,62 @@
     */
    @Override
    public ScheduleClassesStaffDto staffIsWork(@RequestBody ScheduleClassesStaffDto scheduleClassesStaffDto) {
        try {
            //查询 排班
            ScheduleClassesStaffDto tmpScheduleClassesStaffDto = new ScheduleClassesStaffDto();
            tmpScheduleClassesStaffDto.setStaffId(scheduleClassesStaffDto.getStaffId());
            List<ScheduleClassesStaffDto> scheduleClassesStaffs = BeanConvertUtil.covertBeanList(
                    scheduleClassesStaffV1ServiceDaoImpl.getScheduleClassesStaffInfo(BeanConvertUtil.beanCovertMap(scheduleClassesStaffDto)
                    ), ScheduleClassesStaffDto.class);
        //查询 排班
        ScheduleClassesStaffDto tmpScheduleClassesStaffDto = new ScheduleClassesStaffDto();
        tmpScheduleClassesStaffDto.setStaffId(scheduleClassesStaffDto.getStaffId());
        List<ScheduleClassesStaffDto> scheduleClassesStaffs = BeanConvertUtil.covertBeanList(
                scheduleClassesStaffV1ServiceDaoImpl.getScheduleClassesStaffInfo(BeanConvertUtil.beanCovertMap(scheduleClassesStaffDto)
                ), ScheduleClassesStaffDto.class);
            //这里 如果没有员工排班 那么就认为 员工一直在上班
            if (ListUtil.isNull(scheduleClassesStaffs)) {
                scheduleClassesStaffDto.setWork(true);
                return scheduleClassesStaffDto;
            }
        //这里 如果没有员工排班 那么就认为 员工一直在上班
        if (scheduleClassesStaffs == null || scheduleClassesStaffs.size() < 1) {
            scheduleClassesStaffDto.setWork(true);
            return scheduleClassesStaffDto;
            ScheduleClassesDto scheduleClassesDto = new ScheduleClassesDto();
            scheduleClassesDto.setScheduleId(scheduleClassesStaffs.get(0).getScheduleId());
            List<ScheduleClassesDto> scheduleClassesDtos = scheduleClassesV1InnerServiceSMOImpl.queryScheduleClassess(scheduleClassesDto);
            //这里 如果没有员工排班 那么就认为 员工一直在上班
            if (scheduleClassesDtos == null || scheduleClassesDtos.size() < 1) {
                scheduleClassesStaffDto.setWork(true);
                return scheduleClassesStaffDto;
            }
            scheduleClassesStaffDto.setWork(false);
            if (ScheduleClassesDto.SCHEDULE_TYPE_DAY.equals(scheduleClassesDtos.get(0).getScheduleType())) {
                staffIsWorkDay(scheduleClassesDtos.get(0), scheduleClassesStaffDto);
            } else if (ScheduleClassesDto.SCHEDULE_TYPE_WEEK.equals(scheduleClassesDtos.get(0).getScheduleType())) {
                staffIsWorkWeek(scheduleClassesDtos.get(0), scheduleClassesStaffDto);
            } else if (ScheduleClassesDto.SCHEDULE_TYPE_MONTH.equals(scheduleClassesDtos.get(0).getScheduleType())) {
                staffIsWorkMonth(scheduleClassesDtos.get(0), scheduleClassesStaffDto);
            } else {
                scheduleClassesStaffDto.setWork(true);
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
        ScheduleClassesDto scheduleClassesDto = new ScheduleClassesDto();
        scheduleClassesDto.setScheduleId(scheduleClassesStaffs.get(0).getScheduleId());
        List<ScheduleClassesDto> scheduleClassesDtos = scheduleClassesV1InnerServiceSMOImpl.queryScheduleClassess(scheduleClassesDto);
        //这里 如果没有员工排班 那么就认为 员工一直在上班
        if (scheduleClassesDtos == null || scheduleClassesDtos.size() < 1) {
            scheduleClassesStaffDto.setWork(true);
            return scheduleClassesStaffDto;
        }
        scheduleClassesStaffDto.setWork(false);
        if (ScheduleClassesDto.SCHEDULE_TYPE_DAY.equals(scheduleClassesDtos.get(0).getScheduleType())) {
            staffIsWorkDay(scheduleClassesDtos.get(0), scheduleClassesStaffDto);
        } else if (ScheduleClassesDto.SCHEDULE_TYPE_WEEK.equals(scheduleClassesDtos.get(0).getScheduleType())) {
            staffIsWorkWeek(scheduleClassesDtos.get(0), scheduleClassesStaffDto);
        } else if (ScheduleClassesDto.SCHEDULE_TYPE_MONTH.equals(scheduleClassesDtos.get(0).getScheduleType())) {
            staffIsWorkMonth(scheduleClassesDtos.get(0), scheduleClassesStaffDto);
        } else {
            scheduleClassesStaffDto.setWork(true);
        }
        return scheduleClassesStaffDto;
    }
    /**
     * 员工是否上班 按月 排班
     *
     * @param scheduleClassesDto
     * @param scheduleClassesStaffDto
     * {
     *     work:true // 表名 员工 此刻 在线
     *     times:[] // 当日 上班下班时间点 ,这个节点 不一定存在
     * }
     * @param scheduleClassesStaffDto {
     *                                work:true // 表名 员工 此刻 在线
     *                                times:[] // 当日 上班下班时间点 ,这个节点 不一定存在
     *                                }
     */
    private void staffIsWorkMonth( ScheduleClassesDto scheduleClassesDto, ScheduleClassesStaffDto scheduleClassesStaffDto) {
        Calendar today = Calendar.getInstance();
        today.setTime(scheduleClassesStaffDto.getToday());
        int day = today.get(Calendar.DAY_OF_MONTH);
    private void staffIsWorkMonth(ScheduleClassesDto scheduleClassesDto, ScheduleClassesStaffDto scheduleClassesStaffDto) {
        String today = DateUtil.getFormatTimeString(scheduleClassesStaffDto.getToday(), DateUtil.DATE_FORMATE_STRING_B);
        Calendar curTodayCal = Calendar.getInstance();
        curTodayCal.setTime(scheduleClassesStaffDto.getToday());
        int day = curTodayCal.get(Calendar.DAY_OF_MONTH);
        ScheduleClassesDayDto scheduleClassesDayDto = new ScheduleClassesDayDto();
        scheduleClassesDayDto.setScheduleId(scheduleClassesDto.getScheduleId());
        scheduleClassesDayDto.setDay(day + "");
@@ -189,24 +195,46 @@
            return;
        }
        if(ScheduleClassesDayDto.WORKDAY_NO.equals(scheduleClassesDayDtos.get(0).getWorkday())){
        if (ScheduleClassesDayDto.WORKDAY_NO.equals(scheduleClassesDayDtos.get(0).getWorkday())) {
            scheduleClassesStaffDto.setWork(false);
            return ;
            return;
        }
        List<ScheduleClassesTimeDto> times = scheduleClassesDayDtos.get(0).getTimes();
        scheduleClassesStaffDto.setTimes(times);
        String startTime = null;
        String endTime = null;
        Date startTime = null;
        Date endTime = null;
        for (ScheduleClassesTimeDto time : times) {
            startTime = today + " " + time.getStartTime() + ":00";
            endTime = today + " " + time.getEndTime() + ":00";
//            startTime = today + " " + time.getStartTime() + ":00";
//            endTime = today + " " + time.getEndTime() + ":00";
            startTime = DateUtil.getDateFromStringA(today + " " + time.getStartTime() + ":00");
            endTime = DateUtil.getDateFromStringA(today + " " + time.getEndTime() + ":00");
            if (DateUtil.belongCalendar(scheduleClassesStaffDto.getToday(), DateUtil.getDateFromStringA(startTime), DateUtil.getDateFromStringA(endTime))) {
            if (endTime.getTime() < startTime.getTime()) {
                Calendar endTimeCal = Calendar.getInstance();
                endTimeCal.setTime(endTime);
                endTimeCal.add(Calendar.DAY_OF_MONTH, 1);
                endTime = endTimeCal.getTime();
            }
            if (DateUtil.belongCalendar(scheduleClassesStaffDto.getToday(), startTime,endTime)) {
                scheduleClassesStaffDto.setWork(true);
                return;
            }
            //todo 处理 排版为 22点-6点 当前时间为4点时情况 也就是 今日4点 永远不可能在当前日期的中 只能在昨日排版中
            endTime = DateUtil.getDateFromStringA(today + " " + time.getEndTime() + ":00");
            if (endTime.getTime() < startTime.getTime()) {
                Calendar startTimeCal = Calendar.getInstance();
                startTimeCal.setTime(startTime);
                startTimeCal.add(Calendar.DAY_OF_MONTH, -1);
                startTime = startTimeCal.getTime();
                if (DateUtil.belongCalendar(scheduleClassesStaffDto.getToday(), startTime, endTime)) {
                    scheduleClassesStaffDto.setWork(true);
                    return;
                }
            }
        }
        scheduleClassesStaffDto.setWork(false);
@@ -214,18 +242,20 @@
    /**
     * 员工是否上班 按周 排班
     *
     * @param scheduleClassesDto
     * @param scheduleClassesStaffDto
     */
    private void staffIsWorkWeek(ScheduleClassesDto scheduleClassesDto, ScheduleClassesStaffDto scheduleClassesStaffDto) {
        String today = DateUtil.getFormatTimeString(scheduleClassesStaffDto.getToday(), DateUtil.DATE_FORMATE_STRING_B);
        Calendar today = Calendar.getInstance();
        today.setTime(scheduleClassesStaffDto.getToday());
        int week = today.get(Calendar.WEEK_OF_MONTH);
        int day = today.get(Calendar.DAY_OF_WEEK);
        Calendar curTodayCal = Calendar.getInstance();
        curTodayCal.setTime(scheduleClassesStaffDto.getToday());
        int week = curTodayCal.get(Calendar.WEEK_OF_MONTH);
        int day = curTodayCal.get(Calendar.DAY_OF_WEEK);
        //一周第一天是否为星期天
        boolean isFirstSunday = (today.getFirstDayOfWeek() == Calendar.SUNDAY);
        boolean isFirstSunday = (curTodayCal.getFirstDayOfWeek() == Calendar.SUNDAY);
        //获取周几
        //若一周第一天为星期天,则-1
        if (isFirstSunday) {
@@ -253,24 +283,47 @@
            return;
        }
        if(ScheduleClassesDayDto.WORKDAY_NO.equals(scheduleClassesDayDtos.get(0).getWorkday())){
        if (ScheduleClassesDayDto.WORKDAY_NO.equals(scheduleClassesDayDtos.get(0).getWorkday())) {
            scheduleClassesStaffDto.setWork(false);
            return ;
            return;
        }
        List<ScheduleClassesTimeDto> times = scheduleClassesDayDtos.get(0).getTimes();
        scheduleClassesStaffDto.setTimes(times);
        String startTime = null;
        String endTime = null;
        Date startTime = null;
        Date endTime = null;
        for (ScheduleClassesTimeDto time : times) {
            startTime = today + " " + time.getStartTime() + ":00";
            endTime = today + " " + time.getEndTime() + ":00";
//            startTime = today + " " + time.getStartTime() + ":00";
//            endTime = today + " " + time.getEndTime() + ":00";
            if (DateUtil.belongCalendar(scheduleClassesStaffDto.getToday(), DateUtil.getDateFromStringA(startTime), DateUtil.getDateFromStringA(endTime))) {
            startTime = DateUtil.getDateFromStringA(today + " " + time.getStartTime() + ":00");
            endTime = DateUtil.getDateFromStringA(today + " " + time.getEndTime() + ":00");
            if (endTime.getTime() < startTime.getTime()) {
                Calendar endTimeCal = Calendar.getInstance();
                endTimeCal.setTime(endTime);
                endTimeCal.add(Calendar.DAY_OF_MONTH, 1);
                endTime = endTimeCal.getTime();
            }
            if (DateUtil.belongCalendar(scheduleClassesStaffDto.getToday(), startTime, endTime)) {
                scheduleClassesStaffDto.setWork(true);
                return;
            }
            //todo 处理 排版为 22点-6点 当前时间为4点时情况 也就是 今日4点 永远不可能在当前日期的中 只能在昨日排版中
            endTime = DateUtil.getDateFromStringA(today + " " + time.getEndTime() + ":00");
            if (endTime.getTime() < startTime.getTime()) {
                Calendar startTimeCal = Calendar.getInstance();
                startTimeCal.setTime(startTime);
                startTimeCal.add(Calendar.DAY_OF_MONTH, -1);
                startTime = startTimeCal.getTime();
                if (DateUtil.belongCalendar(scheduleClassesStaffDto.getToday(), startTime, endTime)) {
                    scheduleClassesStaffDto.setWork(true);
                    return;
                }
            }
        }
        scheduleClassesStaffDto.setWork(false);
@@ -278,10 +331,12 @@
    /**
     * 员工是否上班 按天 排班
     *
     * @param scheduleClassesDto
     * @param scheduleClassesStaffDto
     */
    private void staffIsWorkDay(ScheduleClassesDto scheduleClassesDto, ScheduleClassesStaffDto scheduleClassesStaffDto) {
        String today = DateUtil.getFormatTimeString(scheduleClassesStaffDto.getToday(), DateUtil.DATE_FORMATE_STRING_B);
        int scheduleCycle = Integer.parseInt(scheduleClassesDto.getScheduleCycle());
@@ -306,9 +361,9 @@
            return;
        }
        if(ScheduleClassesDayDto.WORKDAY_NO.equals(scheduleClassesDayDtos.get(0).getWorkday())){
        if (ScheduleClassesDayDto.WORKDAY_NO.equals(scheduleClassesDayDtos.get(0).getWorkday())) {
            scheduleClassesStaffDto.setWork(false);
            return ;
            return;
        }
@@ -316,19 +371,41 @@
        scheduleClassesStaffDto.setTimes(times);
        String startTime = null;
        String endTime = null;
        Date startTime = null;
        Date endTime = null;
        for (ScheduleClassesTimeDto time : times) {
            startTime = today + " " + time.getStartTime() + ":00";
            endTime = today + " " + time.getEndTime() + ":00";
            startTime = DateUtil.getDateFromStringA(today + " " + time.getStartTime() + ":00");
            endTime = DateUtil.getDateFromStringA(today + " " + time.getEndTime() + ":00");
            if (DateUtil.belongCalendar(scheduleClassesStaffDto.getToday(), DateUtil.getDateFromStringA(startTime), DateUtil.getDateFromStringA(endTime))) {
            if (endTime.getTime() < startTime.getTime()) {
                Calendar endTimeCal = Calendar.getInstance();
                endTimeCal.setTime(endTime);
                endTimeCal.add(Calendar.DAY_OF_MONTH, 1);
                endTime = endTimeCal.getTime();
            }
            if (DateUtil.belongCalendar(scheduleClassesStaffDto.getToday(), startTime, endTime)) {
                scheduleClassesStaffDto.setWork(true);
                return;
            }
            //todo 处理 排版为 22点-6点 当前时间为4点时情况 也就是 今日4点 永远不可能在当前日期的中 只能在昨日排版中
            endTime = DateUtil.getDateFromStringA(today + " " + time.getEndTime() + ":00");
            if (endTime.getTime() < startTime.getTime()) {
                Calendar startTimeCal = Calendar.getInstance();
                startTimeCal.setTime(startTime);
                startTimeCal.add(Calendar.DAY_OF_MONTH, -1);
                startTime = startTimeCal.getTime();
                if (DateUtil.belongCalendar(scheduleClassesStaffDto.getToday(), startTime, endTime)) {
                    scheduleClassesStaffDto.setWork(true);
                    return;
                }
            }
        }
        scheduleClassesStaffDto.setWork(false);
    }
    @Override
@@ -350,7 +427,8 @@
            return scheduleClassesStaffDto;
        }
        String curMonth = scheduleClassesStaffDto.getCurDate();;
        String curMonth = scheduleClassesStaffDto.getCurDate();
        ;
        String curMonthDay = curMonth + "-01";
        Calendar calendar = Calendar.getInstance();
@@ -379,11 +457,11 @@
        int curDay = 1;
        for (int day = 1; day <= maxDay; day++) {
            scDay = new ScheduleClassesDayDto();
            String today = curMonth + "-"+day;
            String today = curMonth + "-" + day;
            int scheduleCycle = Integer.parseInt(scheduleClassesDto.getScheduleCycle());
            int allDay = DateUtil.daysBetween(scheduleClassesDto.getComputeTime(), today)+1;
            int allDay = DateUtil.daysBetween(scheduleClassesDto.getComputeTime(), today) + 1;
            curDay = allDay % scheduleCycle;
//
//            if (curDay == 0 && day == 1) {
@@ -397,16 +475,16 @@
            }
            scDay.setDay(day+"");
            scDay.setDay(day + "");
            //计算 排班
            for(ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos){
                if((curDay+"").equals(scheduleClassesDayDto1.getDay())){
            for (ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos) {
                if ((curDay + "").equals(scheduleClassesDayDto1.getDay())) {
                    tmpScheduleClassesDayDto = scheduleClassesDayDto1;
                }
            }
            if(tmpScheduleClassesDayDto != null ){
            if (tmpScheduleClassesDayDto != null) {
                scDay.setWorkday(tmpScheduleClassesDayDto.getWorkday());
                scDay.setWorkdayName(tmpScheduleClassesDayDto.getWorkdayName());
                scDay.setTimes(tmpScheduleClassesDayDto.getTimes());
            }
            days.add(scDay);
@@ -427,9 +505,10 @@
        for (int day = 1; day <= maxDay; day++) {
            scDay = new ScheduleClassesDayDto();
            Calendar today = Calendar.getInstance();
            today.setTime(DateUtil.getDateFromStringB(curMonth + "-"+day));
            int week = today.get(Calendar.WEEK_OF_MONTH);
            today.setTime(DateUtil.getDateFromStringB(curMonth + "-" + day));
            int week = 1;//today.get(Calendar.WEEK_OF_MONTH);
            curDay = today.get(Calendar.DAY_OF_WEEK);
            //一周第一天是否为星期天
            boolean isFirstSunday = (today.getFirstDayOfWeek() == Calendar.SUNDAY);
@@ -442,22 +521,32 @@
                }
            }
            scDay.setDay(day+"");
            scDay.setDay(day + "");
            //计算 排班
            for(ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos){
                if((curDay+"").equals(scheduleClassesDayDto1.getDay()) && (week+"").equals(scheduleClassesDayDto1.getWeekFlag())){
            for (ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos) {
                week = today.get(Calendar.WEEK_OF_MONTH);
                if ("1".equals(scheduleClassesDayDto1.getWeekFlag())) { // 如果是 1 则 周默认为 1
                    week = 1;
                }
                if (week > Integer.parseInt(scheduleClassesDayDto1.getWeekFlag())) {
                    week = week % Integer.parseInt(scheduleClassesDayDto1.getWeekFlag());
                }
                if ((curDay + "").equals(scheduleClassesDayDto1.getDay()) && (week + "").equals(scheduleClassesDayDto1.getWeekFlag())) {
                    tmpScheduleClassesDayDto = scheduleClassesDayDto1;
                }
            }
            if(tmpScheduleClassesDayDto == null){ // 没有设置周
                for(ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos){
                    if((curDay+"").equals(scheduleClassesDayDto1.getDay())){
            if (tmpScheduleClassesDayDto == null) { // 没有设置周
                for (ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos) {
                    if ((curDay + "").equals(scheduleClassesDayDto1.getDay())) {
                        tmpScheduleClassesDayDto = scheduleClassesDayDto1;
                    }
                }
            }
            if(tmpScheduleClassesDayDto != null ){
            if (tmpScheduleClassesDayDto != null) {
                scDay.setWorkday(tmpScheduleClassesDayDto.getWorkday());
                scDay.setWorkdayName(tmpScheduleClassesDayDto.getWorkdayName());
                scDay.setTimes(tmpScheduleClassesDayDto.getTimes());
            }
            days.add(scDay);
@@ -479,15 +568,16 @@
        for (int day = 1; day <= maxDay; day++) {
            scDay = new ScheduleClassesDayDto();
            curDay = day;
            scDay.setDay(day+"");
            scDay.setDay(day + "");
            //计算 排班
            for(ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos){
                if((curDay+"").equals(scheduleClassesDayDto1.getDay())){
            for (ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos) {
                if ((curDay + "").equals(scheduleClassesDayDto1.getDay())) {
                    tmpScheduleClassesDayDto = scheduleClassesDayDto1;
                }
            }
            if(tmpScheduleClassesDayDto != null ){
            if (tmpScheduleClassesDayDto != null) {
                scDay.setWorkday(tmpScheduleClassesDayDto.getWorkday());
                scDay.setWorkdayName(tmpScheduleClassesDayDto.getWorkdayName());
                scDay.setTimes(tmpScheduleClassesDayDto.getTimes());
            }
            days.add(scDay);