| | |
| | | import com.java110.core.context.ICmdDataFlowContext; |
| | | import com.java110.core.event.cmd.Cmd; |
| | | import com.java110.core.event.cmd.CmdEvent; |
| | | import com.java110.dto.scheduleClasses.ScheduleClassesDto; |
| | | import com.java110.dto.scheduleClassesDay.ScheduleClassesDayDto; |
| | | import com.java110.dto.scheduleClassesStaff.ScheduleClassesStaffDto; |
| | | import com.java110.dto.scheduleClasses.ScheduleClassesStaffDto; |
| | | import com.java110.intf.store.IScheduleClassesDayV1InnerServiceSMO; |
| | | import com.java110.intf.store.IScheduleClassesStaffV1InnerServiceSMO; |
| | | import com.java110.intf.store.IScheduleClassesV1InnerServiceSMO; |
| | | import com.java110.utils.exception.CmdException; |
| | | import com.java110.utils.util.Assert; |
| | | import com.java110.utils.util.BeanConvertUtil; |
| | | import com.java110.utils.util.DateUtil; |
| | | import com.java110.vo.ResultVo; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | |
| | | import org.springframework.http.ResponseEntity; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Calendar; |
| | | import java.util.List; |
| | | |
| | | |
| | |
| | | @Override |
| | | public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) { |
| | | super.validatePageInfo(reqJson); |
| | | Assert.hasKeyAndValue(reqJson, "curMonth", "未包含月 YYYY-MM"); |
| | | Assert.hasKeyAndValue(reqJson, "curDate", "未包含月 YYYY-MM"); |
| | | } |
| | | |
| | | @Override |
| | |
| | | ScheduleClassesStaffDto scheduleClassesStaffDto = new ScheduleClassesStaffDto(); |
| | | scheduleClassesStaffDto.setStaffId(reqJson.getString("staffId")); |
| | | scheduleClassesStaffDto.setStaffNameLike(reqJson.getString("staffNameLike")); |
| | | scheduleClassesStaffDto.setScheduleId(reqJson.getString("scheduleId")); |
| | | |
| | | scheduleClassesStaffDto.setPage(reqJson.getIntValue("page")); |
| | | scheduleClassesStaffDto.setRow(reqJson.getIntValue("row")); |
| | | scheduleClassesStaffDto.setStoreId(storeId); |
| | | scheduleClassesStaffDto.setOrgId(reqJson.getString("orgId")); |
| | | |
| | | int count = scheduleClassesStaffV1InnerServiceSMOImpl.queryScheduleClassesStaffsCount(scheduleClassesStaffDto); |
| | | |
| | | List<ScheduleClassesStaffDto> scheduleClassesStaffDtos = null; |
| | | List<ScheduleClassesStaffDto> tmpScheduleClassesStaffDtos = new ArrayList<>(); |
| | | ScheduleClassesStaffDto tmpScheduleClassesStaffDto = null; |
| | | |
| | | if (count > 0) { |
| | | scheduleClassesStaffDtos = scheduleClassesStaffV1InnerServiceSMOImpl.queryScheduleClassesStaffs(scheduleClassesStaffDto); |
| | | for (ScheduleClassesStaffDto tmpScheduleClassesStaffDto : scheduleClassesStaffDtos) { |
| | | computeStaffCurMonthWorkday(tmpScheduleClassesStaffDto, reqJson); |
| | | for (ScheduleClassesStaffDto scheduleClassesStaffDto1 : scheduleClassesStaffDtos) { |
| | | scheduleClassesStaffDto1.setCurDate(reqJson.getString("curDate")); |
| | | tmpScheduleClassesStaffDto = scheduleClassesStaffV1InnerServiceSMOImpl.computeStaffCurMonthWorkday(scheduleClassesStaffDto1); |
| | | tmpScheduleClassesStaffDtos.add(tmpScheduleClassesStaffDto); |
| | | } |
| | | } else { |
| | | scheduleClassesStaffDtos = new ArrayList<>(); |
| | | } |
| | | |
| | | ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) reqJson.getInteger("row")), count, scheduleClassesStaffDtos); |
| | | ResultVo resultVo = new ResultVo((int) Math.ceil((double) count / (double) reqJson.getInteger("row")), count, tmpScheduleClassesStaffDtos); |
| | | |
| | | ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK); |
| | | |
| | | cmdDataFlowContext.setResponseEntity(responseEntity); |
| | | } |
| | | |
| | | /** |
| | | * 计算 员工 排班情况 |
| | | * |
| | | * @param scheduleClassesStaffDto |
| | | * @param reqJson |
| | | */ |
| | | private void computeStaffCurMonthWorkday(ScheduleClassesStaffDto scheduleClassesStaffDto, JSONObject reqJson) { |
| | | |
| | | ScheduleClassesDto scheduleClassesDto = new ScheduleClassesDto(); |
| | | scheduleClassesDto.setScheduleId(scheduleClassesStaffDto.getScheduleId()); |
| | | List<ScheduleClassesDto> scheduleClassesDtos = scheduleClassesV1InnerServiceSMOImpl.queryScheduleClassess(scheduleClassesDto); |
| | | //这里 如果没有员工排班 那么就认为 员工一直在上班 |
| | | if (scheduleClassesDtos == null || scheduleClassesDtos.size() < 1) { |
| | | return; |
| | | } |
| | | |
| | | ScheduleClassesDayDto scheduleClassesDayDto = new ScheduleClassesDayDto(); |
| | | scheduleClassesDayDto.setScheduleId(scheduleClassesDtos.get(0).getScheduleId()); |
| | | List<ScheduleClassesDayDto> scheduleClassesDayDtos = scheduleClassesDayV1InnerServiceSMOImpl.queryScheduleClassesDays(scheduleClassesDayDto); |
| | | |
| | | //设置问题 ,这里默认反馈在线 |
| | | if (scheduleClassesDayDtos == null || scheduleClassesDayDtos.size() < 1) { |
| | | return; |
| | | } |
| | | |
| | | String curMonth = reqJson.getString("curMonth"); |
| | | String curMonthDay = curMonth + "-01"; |
| | | |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(DateUtil.getDateFromStringB(curMonthDay)); |
| | | int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); |
| | | |
| | | if (ScheduleClassesDto.SCHEDULE_TYPE_DAY.equals(scheduleClassesDtos.get(0).getScheduleType())) { |
| | | doDay(scheduleClassesStaffDto, scheduleClassesDtos.get(0), scheduleClassesDayDtos, curMonth, maxDay); |
| | | } else if (ScheduleClassesDto.SCHEDULE_TYPE_WEEK.equals(scheduleClassesDtos.get(0).getScheduleType())) { |
| | | doWeek(scheduleClassesStaffDto, scheduleClassesDtos.get(0), scheduleClassesDayDtos, curMonth, maxDay); |
| | | } else if (ScheduleClassesDto.SCHEDULE_TYPE_MONTH.equals(scheduleClassesDtos.get(0).getScheduleType())) { |
| | | doMonth(scheduleClassesStaffDto, scheduleClassesDtos.get(0), scheduleClassesDayDtos, curMonth, maxDay); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | private void doDay(ScheduleClassesStaffDto scheduleClassesStaffDto, |
| | | ScheduleClassesDto scheduleClassesDto, |
| | | List<ScheduleClassesDayDto> scheduleClassesDayDtos, |
| | | String curMonth, int maxDay) { |
| | | List<ScheduleClassesDayDto> days = new ArrayList<>(); |
| | | ScheduleClassesDayDto scDay = null; |
| | | ScheduleClassesDayDto tmpScheduleClassesDayDto = null; |
| | | int curDay = 1; |
| | | for (int day = 1; day <= maxDay; day++) { |
| | | |
| | | String today = curMonth + "-"+day; |
| | | |
| | | int scheduleCycle = Integer.parseInt(scheduleClassesDto.getScheduleCycle()); |
| | | |
| | | int allDay = DateUtil.daysBetween(scheduleClassesDto.getComputeTime(), today) + 1; |
| | | curDay = allDay % scheduleCycle; |
| | | |
| | | if (curDay == 0) { |
| | | curDay = scheduleCycle; |
| | | } |
| | | |
| | | scDay.setDay(day+""); |
| | | //计算 排班 |
| | | for(ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos){ |
| | | if((curDay+"").equals(scheduleClassesDayDto1.getDay())){ |
| | | tmpScheduleClassesDayDto = scheduleClassesDayDto1; |
| | | } |
| | | } |
| | | if(tmpScheduleClassesDayDto != null ){ |
| | | scDay.setWorkday(tmpScheduleClassesDayDto.getWorkday()); |
| | | scDay.setTimes(tmpScheduleClassesDayDto.getTimes()); |
| | | } |
| | | days.add(scDay); |
| | | |
| | | } |
| | | |
| | | scheduleClassesStaffDto.setDays(days); |
| | | } |
| | | |
| | | private void doWeek(ScheduleClassesStaffDto scheduleClassesStaffDto, |
| | | ScheduleClassesDto scheduleClassesDto, |
| | | List<ScheduleClassesDayDto> scheduleClassesDayDtos, |
| | | String curMonth, int maxDay) { |
| | | List<ScheduleClassesDayDto> days = new ArrayList<>(); |
| | | ScheduleClassesDayDto scDay = null; |
| | | ScheduleClassesDayDto tmpScheduleClassesDayDto = null; |
| | | int curDay = 1; |
| | | for (int day = 1; day <= maxDay; day++) { |
| | | |
| | | Calendar today = Calendar.getInstance(); |
| | | today.setTime(DateUtil.getDateFromStringB(curMonth + "-"+day)); |
| | | int week = today.get(Calendar.WEEK_OF_MONTH); |
| | | curDay = today.get(Calendar.DAY_OF_WEEK); |
| | | |
| | | //一周第一天是否为星期天 |
| | | boolean isFirstSunday = (today.getFirstDayOfWeek() == Calendar.SUNDAY); |
| | | //获取周几 |
| | | //若一周第一天为星期天,则-1 |
| | | if (isFirstSunday) { |
| | | curDay = curDay - 1; |
| | | if (curDay == 0) { |
| | | curDay = 7; |
| | | } |
| | | } |
| | | |
| | | scDay.setDay(day+""); |
| | | //计算 排班 |
| | | for(ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos){ |
| | | if((curDay+"").equals(scheduleClassesDayDto1.getDay()) && (week+"").equals(scheduleClassesDayDto1.getWeekFlag())){ |
| | | tmpScheduleClassesDayDto = scheduleClassesDayDto1; |
| | | } |
| | | } |
| | | if(tmpScheduleClassesDayDto == null){ // 没有设置周 |
| | | for(ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos){ |
| | | if((curDay+"").equals(scheduleClassesDayDto1.getDay())){ |
| | | tmpScheduleClassesDayDto = scheduleClassesDayDto1; |
| | | } |
| | | } |
| | | } |
| | | if(tmpScheduleClassesDayDto != null ){ |
| | | scDay.setWorkday(tmpScheduleClassesDayDto.getWorkday()); |
| | | scDay.setTimes(tmpScheduleClassesDayDto.getTimes()); |
| | | } |
| | | days.add(scDay); |
| | | |
| | | } |
| | | |
| | | scheduleClassesStaffDto.setDays(days); |
| | | } |
| | | |
| | | |
| | | private void doMonth(ScheduleClassesStaffDto scheduleClassesStaffDto, |
| | | ScheduleClassesDto scheduleClassesDto, |
| | | List<ScheduleClassesDayDto> scheduleClassesDayDtos, |
| | | String curMonth, int maxDay) { |
| | | List<ScheduleClassesDayDto> days = new ArrayList<>(); |
| | | ScheduleClassesDayDto scDay = null; |
| | | ScheduleClassesDayDto tmpScheduleClassesDayDto = null; |
| | | int curDay = 1; |
| | | for (int day = 1; day <= maxDay; day++) { |
| | | curDay = day; |
| | | scDay.setDay(day+""); |
| | | //计算 排班 |
| | | for(ScheduleClassesDayDto scheduleClassesDayDto1 : scheduleClassesDayDtos){ |
| | | if((curDay+"").equals(scheduleClassesDayDto1.getDay())){ |
| | | tmpScheduleClassesDayDto = scheduleClassesDayDto1; |
| | | } |
| | | } |
| | | if(tmpScheduleClassesDayDto != null ){ |
| | | scDay.setWorkday(tmpScheduleClassesDayDto.getWorkday()); |
| | | scDay.setTimes(tmpScheduleClassesDayDto.getTimes()); |
| | | } |
| | | days.add(scDay); |
| | | } |
| | | |
| | | scheduleClassesStaffDto.setDays(days); |
| | | } |
| | | |
| | | |