wuxw лет назад: 3
Родитель
Сommit
c13d7af78a

+ 5 - 0
java110-bean/src/main/java/com/java110/dto/scheduleClasses/ScheduleClassesDto.java

@@ -18,6 +18,11 @@ public class ScheduleClassesDto extends PageDto implements Serializable {
     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;

+ 20 - 0
java110-bean/src/main/java/com/java110/dto/scheduleClassesStaff/ScheduleClassesStaffDto.java

@@ -22,6 +22,10 @@ public class ScheduleClassesStaffDto extends PageDto implements Serializable {
     private String[] scheduleIds;
     private String staffId;
 
+    private Date today;
+
+    private boolean isWork;
+
     private long staffCount;
 
 
@@ -102,4 +106,20 @@ public class ScheduleClassesStaffDto extends PageDto implements Serializable {
     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;
+    }
 }

+ 13 - 0
java110-interface/src/main/java/com/java110/intf/store/IScheduleClassesStaffV1InnerServiceSMO.java

@@ -69,4 +69,17 @@ public interface IScheduleClassesStaffV1InnerServiceSMO {
 
     @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);
+
 }

+ 32 - 12
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java

@@ -139,24 +139,24 @@ public class DateUtil {
         }
     }
 
-    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);
         }
     }
@@ -175,7 +175,6 @@ public class DateUtil {
     }
 
 
-
     public static String getLastTime() {
         return LAST_TIME;
     }
@@ -446,10 +445,10 @@ public class DateUtil {
 //        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 @@ public class DateUtil {
         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 @@ public class DateUtil {
         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 class DateUtil {
     }
 
 
-    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 @@ public class DateUtil {
     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));
+    }
 }

+ 208 - 11
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.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 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 @@ public class ScheduleClassesStaffV1InnerServiceSMOImpl extends BaseServiceSMO im
     @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 @@ public class ScheduleClassesStaffV1InnerServiceSMOImpl extends BaseServiceSMO im
 
     @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 @@ public class ScheduleClassesStaffV1InnerServiceSMOImpl extends BaseServiceSMO im
 
         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);
+    }
 }