wuxw
2022-10-30 c13d7af78a1fd29169c3b4c3ae3497d5706948f5
写完排班核型逻辑
5个文件已修改
301 ■■■■■ 已修改文件
java110-bean/src/main/java/com/java110/dto/scheduleClasses/ScheduleClassesDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/scheduleClassesStaff/ScheduleClassesStaffDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/store/IScheduleClassesStaffV1InnerServiceSMO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-store/src/main/java/com/java110/store/smo/impl/ScheduleClassesStaffV1InnerServiceSMOImpl.java 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/scheduleClasses/ScheduleClassesDto.java
@@ -18,6 +18,11 @@
    public static final String STATE_START = "1001";
    public static final String STATE_STOP = "2002";
    //排班类型 1001 按日排班 2002 按周排班 3003 按月排班
    public static final String SCHEDULE_TYPE_DAY = "1001";
    public static final String SCHEDULE_TYPE_WEEK = "2002";
    public static final String SCHEDULE_TYPE_MONTH = "3003";
    private String scheduleType;
    private String scheduleTypeName;
    private String scheduleCycle;
java110-bean/src/main/java/com/java110/dto/scheduleClassesStaff/ScheduleClassesStaffDto.java
@@ -22,6 +22,10 @@
    private String[] scheduleIds;
    private String staffId;
    private Date today;
    private boolean isWork;
    private long staffCount;
@@ -102,4 +106,20 @@
    public void setStaffCount(long staffCount) {
        this.staffCount = staffCount;
    }
    public Date getToday() {
        return today;
    }
    public void setToday(Date today) {
        this.today = today;
    }
    public boolean isWork() {
        return isWork;
    }
    public void setWork(boolean work) {
        isWork = work;
    }
}
java110-interface/src/main/java/com/java110/intf/store/IScheduleClassesStaffV1InnerServiceSMO.java
@@ -69,4 +69,17 @@
    @RequestMapping(value = "/queryGroupScheduleClassesStaffs", method = RequestMethod.POST)
    List<ScheduleClassesStaffDto> queryGroupScheduleClassesStaffs(@RequestBody ScheduleClassesStaffDto scheduleClassesStaffDto);
    /**
     * 判断员工是否在上班
     * @param scheduleClassesStaffDto
     * {
     *     staffId:xxx,
     *     today:new Date()
     * }
     * @return
     */
    @RequestMapping(value = "/staffIsWork", method = RequestMethod.POST)
    ScheduleClassesStaffDto staffIsWork(@RequestBody ScheduleClassesStaffDto scheduleClassesStaffDto);
}
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
@@ -139,24 +139,24 @@
        }
    }
    public static Date getDateFromStringB(String date){
    public static Date getDateFromStringB(String date) {
        SimpleDateFormat sDateFormat = getDateFormat(DateUtil.DATE_FORMATE_STRING_B);
        try{
        try {
            synchronized (sDateFormat) {
                return sDateFormat.parse(date);
            }
        }catch (Exception e){
        } catch (Exception e) {
            throw new IllegalArgumentException(e);
        }
    }
    public static Date getDateFromStringA(String date){
    public static Date getDateFromStringA(String date) {
        SimpleDateFormat sDateFormat = getDateFormat(DateUtil.DATE_FORMATE_STRING_A);
        try{
        try {
            synchronized (sDateFormat) {
                return sDateFormat.parse(date);
            }
        }catch (Exception e){
        } catch (Exception e) {
            throw new IllegalArgumentException(e);
        }
    }
@@ -173,7 +173,6 @@
    public static String getNow(String pattern) {
        return getFormatTimeString(new Date(), pattern);
    }
    public static String getLastTime() {
@@ -446,10 +445,10 @@
//        c.setTime(DateUtil.getDateFromString("2021-12-03",DateUtil.DATE_FORMATE_STRING_A));
//        c.add(Calendar.DAY_OF_MONTH, 125);
//        System.out.println("增加一天后日期:"+sf.format(c.getTime()));
        System.out.println( "2021-12-07".compareTo(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B)));
        System.out.println("2021-12-07".compareTo(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B)));
    }
    public static String getAddDayString(Date date,String pattern,int days)  {
    public static String getAddDayString(Date date, String pattern, int days) {
        SimpleDateFormat sf = new SimpleDateFormat(pattern);
        Calendar c = Calendar.getInstance();
        c.setTime(date);
@@ -457,7 +456,7 @@
        return sf.format(c.getTime());
    }
    public static String getAddDayStringB(Date date,int days) {
    public static String getAddDayStringB(Date date, int days) {
        SimpleDateFormat sf = new SimpleDateFormat(DATE_FORMATE_STRING_B);
        Calendar c = Calendar.getInstance();
        c.setTime(date);
@@ -465,7 +464,7 @@
        return sf.format(c.getTime());
    }
    public static String getAddDayStringA(Date date,int days) {
    public static String getAddDayStringA(Date date, int days) {
        SimpleDateFormat sf = new SimpleDateFormat(DATE_FORMATE_STRING_A);
        Calendar c = Calendar.getInstance();
        c.setTime(date);
@@ -474,7 +473,7 @@
    }
    public static String getAddMonthStringA(Date date,int month) {
    public static String getAddMonthStringA(Date date, int month) {
        SimpleDateFormat sf = new SimpleDateFormat(DATE_FORMATE_STRING_A);
        Calendar c = Calendar.getInstance();
        c.setTime(date);
@@ -587,4 +586,25 @@
    private static int millisecondsToDays(long intervalMs) {
        return (int) (intervalMs / (1000 * 86400));
    }
    /**
     *    *字符串的日期格式的计算
     *
     */
    public static int daysBetween(String smdate, String bdate) {
        long between_days = 0;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Calendar cal = Calendar.getInstance();
            cal.setTime(sdf.parse(smdate));
            long time1 = cal.getTimeInMillis();
            cal.setTime(sdf.parse(bdate));
            long time2 = cal.getTimeInMillis();
            between_days = (time2 - time1) / (1000 * 3600 * 24);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Integer.parseInt(String.valueOf(between_days));
    }
}
service-store/src/main/java/com/java110/store/smo/impl/ScheduleClassesStaffV1InnerServiceSMOImpl.java
@@ -16,6 +16,11 @@
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.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;
@@ -24,11 +29,13 @@
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 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.List;
/**
@@ -45,28 +52,34 @@
    @Autowired
    private IScheduleClassesStaffV1ServiceDao scheduleClassesStaffV1ServiceDaoImpl;
    @Autowired
    private IScheduleClassesV1InnerServiceSMO scheduleClassesV1InnerServiceSMOImpl;
    @Autowired
    private IScheduleClassesDayV1InnerServiceSMO scheduleClassesDayV1InnerServiceSMOImpl;
    @Override
    public int saveScheduleClassesStaff(@RequestBody  ScheduleClassesStaffPo scheduleClassesStaffPo) {
    public int saveScheduleClassesStaff(@RequestBody ScheduleClassesStaffPo scheduleClassesStaffPo) {
        int saveFlag = scheduleClassesStaffV1ServiceDaoImpl.saveScheduleClassesStaffInfo(BeanConvertUtil.beanCovertMap(scheduleClassesStaffPo));
        return saveFlag;
    }
     @Override
    public int updateScheduleClassesStaff(@RequestBody  ScheduleClassesStaffPo scheduleClassesStaffPo) {
    @Override
    public int updateScheduleClassesStaff(@RequestBody ScheduleClassesStaffPo scheduleClassesStaffPo) {
        int saveFlag = scheduleClassesStaffV1ServiceDaoImpl.updateScheduleClassesStaffInfo(BeanConvertUtil.beanCovertMap(scheduleClassesStaffPo));
        return saveFlag;
    }
     @Override
    public int deleteScheduleClassesStaff(@RequestBody  ScheduleClassesStaffPo scheduleClassesStaffPo) {
       scheduleClassesStaffPo.setStatusCd("1");
       int saveFlag = scheduleClassesStaffV1ServiceDaoImpl.updateScheduleClassesStaffInfo(BeanConvertUtil.beanCovertMap(scheduleClassesStaffPo));
       return saveFlag;
    @Override
    public int deleteScheduleClassesStaff(@RequestBody ScheduleClassesStaffPo scheduleClassesStaffPo) {
        scheduleClassesStaffPo.setStatusCd("1");
        int saveFlag = scheduleClassesStaffV1ServiceDaoImpl.updateScheduleClassesStaffInfo(BeanConvertUtil.beanCovertMap(scheduleClassesStaffPo));
        return saveFlag;
    }
    @Override
    public List<ScheduleClassesStaffDto> queryScheduleClassesStaffs(@RequestBody  ScheduleClassesStaffDto scheduleClassesStaffDto) {
    public List<ScheduleClassesStaffDto> queryScheduleClassesStaffs(@RequestBody ScheduleClassesStaffDto scheduleClassesStaffDto) {
        //校验是否传了 分页信息
@@ -84,10 +97,11 @@
    @Override
    public int queryScheduleClassesStaffsCount(@RequestBody ScheduleClassesStaffDto scheduleClassesStaffDto) {
        return scheduleClassesStaffV1ServiceDaoImpl.queryScheduleClassesStaffsCount(BeanConvertUtil.beanCovertMap(scheduleClassesStaffDto));    }
        return scheduleClassesStaffV1ServiceDaoImpl.queryScheduleClassesStaffsCount(BeanConvertUtil.beanCovertMap(scheduleClassesStaffDto));
    }
    @Override
    public List<ScheduleClassesStaffDto> queryGroupScheduleClassesStaffs(@RequestBody  ScheduleClassesStaffDto scheduleClassesStaffDto) {
    public List<ScheduleClassesStaffDto> queryGroupScheduleClassesStaffs(@RequestBody ScheduleClassesStaffDto scheduleClassesStaffDto) {
        //校验是否传了 分页信息
@@ -101,4 +115,187 @@
        return scheduleClassesStaffs;
    }
    /**
     * 判断员工是否在上班
     *
     * @param scheduleClassesStaffDto {
     *                                staffId:xxx,
     *                                today:new Date()
     *                                }
     * @return
     */
    @Override
    public ScheduleClassesStaffDto staffIsWork(@RequestBody ScheduleClassesStaffDto scheduleClassesStaffDto) {
        //查询 排班
        ScheduleClassesStaffDto tmpScheduleClassesStaffDto = new ScheduleClassesStaffDto();
        tmpScheduleClassesStaffDto.setStaffId(scheduleClassesStaffDto.getStaffId());
        List<ScheduleClassesStaffDto> scheduleClassesStaffs = BeanConvertUtil.covertBeanList(scheduleClassesStaffV1ServiceDaoImpl.getScheduleClassesStaffInfo(BeanConvertUtil.beanCovertMap(scheduleClassesStaffDto)), ScheduleClassesStaffDto.class);
        //这里 如果没有员工排班 那么就认为 员工一直在上班
        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);
        }
        return scheduleClassesStaffDto;
    }
    /**
     * 员工是否上班 按月 排班
     * @param scheduleClassesDto
     * @param scheduleClassesStaffDto
     */
    private void staffIsWorkMonth(ScheduleClassesDto scheduleClassesDto, ScheduleClassesStaffDto scheduleClassesStaffDto) {
        Calendar today = Calendar.getInstance();
        today.setTime(scheduleClassesStaffDto.getToday());
        int day = today.get(Calendar.DAY_OF_MONTH);
        ScheduleClassesDayDto scheduleClassesDayDto = new ScheduleClassesDayDto();
        scheduleClassesDayDto.setScheduleId(scheduleClassesDto.getScheduleId());
        scheduleClassesDayDto.setDay(day + "");
        List<ScheduleClassesDayDto> scheduleClassesDayDtos = scheduleClassesDayV1InnerServiceSMOImpl.queryScheduleClassesDays(scheduleClassesDayDto);
        //设置问题 ,这里默认反馈在线
        if (scheduleClassesDayDtos == null || scheduleClassesDayDtos.size() < 1) {
            scheduleClassesStaffDto.setWork(true);
            return;
        }
        List<ScheduleClassesTimeDto> times = scheduleClassesDayDtos.get(0).getTimes();
        String startTime = null;
        String endTime = null;
        for (ScheduleClassesTimeDto time : times) {
            startTime = today + " " + time.getStartTime() + ":00";
            endTime = today + " " + time.getEndTime() + ":00";
            if (DateUtil.belongCalendar(scheduleClassesStaffDto.getToday(), DateUtil.getDateFromStringA(startTime), DateUtil.getDateFromStringA(endTime))) {
                scheduleClassesStaffDto.setWork(true);
                return;
            }
        }
        scheduleClassesStaffDto.setWork(false);
    }
    /**
     * 员工是否上班 按周 排班
     * @param scheduleClassesDto
     * @param scheduleClassesStaffDto
     */
    private void staffIsWorkWeek(ScheduleClassesDto scheduleClassesDto, ScheduleClassesStaffDto scheduleClassesStaffDto) {
        Calendar today = Calendar.getInstance();
        today.setTime(scheduleClassesStaffDto.getToday());
        int week = today.get(Calendar.WEEK_OF_MONTH);
        int day = today.get(Calendar.DAY_OF_WEEK);
        //一周第一天是否为星期天
        boolean isFirstSunday = (today.getFirstDayOfWeek() == Calendar.SUNDAY);
        //获取周几
        //若一周第一天为星期天,则-1
        if (isFirstSunday) {
            day = day - 1;
            if (day == 0) {
                day = 7;
            }
        }
        ScheduleClassesDayDto scheduleClassesDayDto = new ScheduleClassesDayDto();
        scheduleClassesDayDto.setScheduleId(scheduleClassesDto.getScheduleId());
        scheduleClassesDayDto.setDay(day + "");
        scheduleClassesDayDto.setWeekFlag(week + "");
        List<ScheduleClassesDayDto> scheduleClassesDayDtos = scheduleClassesDayV1InnerServiceSMOImpl.queryScheduleClassesDays(scheduleClassesDayDto);
        //设置问题 ,这里默认反馈在线
        if (scheduleClassesDayDtos == null || scheduleClassesDayDtos.size() < 1) {
            scheduleClassesStaffDto.setWork(true);
            return;
        }
        List<ScheduleClassesTimeDto> times = scheduleClassesDayDtos.get(0).getTimes();
        String startTime = null;
        String endTime = null;
        for (ScheduleClassesTimeDto time : times) {
            startTime = today + " " + time.getStartTime() + ":00";
            endTime = today + " " + time.getEndTime() + ":00";
            if (DateUtil.belongCalendar(scheduleClassesStaffDto.getToday(), DateUtil.getDateFromStringA(startTime), DateUtil.getDateFromStringA(endTime))) {
                scheduleClassesStaffDto.setWork(true);
                return;
            }
        }
        scheduleClassesStaffDto.setWork(false);
    }
    /**
     * 员工是否上班 按天 排班
     * @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());
        int allDay = DateUtil.daysBetween(scheduleClassesDto.getComputeTime(), today) + 1;
        int day = allDay % scheduleCycle;
        if (day == 0) {
            day = scheduleCycle;
        }
        ScheduleClassesDayDto scheduleClassesDayDto = new ScheduleClassesDayDto();
        scheduleClassesDayDto.setScheduleId(scheduleClassesDto.getScheduleId());
        scheduleClassesDayDto.setDay(day + "");
        List<ScheduleClassesDayDto> scheduleClassesDayDtos = scheduleClassesDayV1InnerServiceSMOImpl.queryScheduleClassesDays(scheduleClassesDayDto);
        //设置问题 ,这里默认反馈在线
        if (scheduleClassesDayDtos == null || scheduleClassesDayDtos.size() < 1) {
            scheduleClassesStaffDto.setWork(true);
            return;
        }
        List<ScheduleClassesTimeDto> times = scheduleClassesDayDtos.get(0).getTimes();
        String startTime = null;
        String endTime = null;
        for (ScheduleClassesTimeDto time : times) {
            startTime = today + " " + time.getStartTime() + ":00";
            endTime = today + " " + time.getEndTime() + ":00";
            if (DateUtil.belongCalendar(scheduleClassesStaffDto.getToday(), DateUtil.getDateFromStringA(startTime), DateUtil.getDateFromStringA(endTime))) {
                scheduleClassesStaffDto.setWork(true);
                return;
            }
        }
        scheduleClassesStaffDto.setWork(false);
    }
}