Index: ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/dto/CondititonScheduleInformationDTO.java =================================================================== diff -u -r24010 -r24013 --- ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/dto/CondititonScheduleInformationDTO.java (.../CondititonScheduleInformationDTO.java) (revision 24010) +++ ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/dto/CondititonScheduleInformationDTO.java (.../CondititonScheduleInformationDTO.java) (revision 24013) @@ -1,5 +1,6 @@ package com.forgon.disinfectsystem.schedule.dto; +import java.util.List; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; /** @@ -10,7 +11,55 @@ public class CondititonScheduleInformationDTO extends ConditionScheduleDTO{ /** - * 时间段 + * 开始查询时间 */ + private String startTime; + /** + * 结束查询时间 + */ + private String endTime; + + /** + * 科室编号Listt + */ + private List orgUnitCodes; + + /** + *用户idList + */ + private List userIds; + + public List getOrgUnitCodes() { + return orgUnitCodes; + } + + public void setOrgUnitCodes(List orgUnitCodes) { + this.orgUnitCodes = orgUnitCodes; + } + + public List getUserIds() { + return userIds; + } + + public void setUserIds(List userIds) { + this.userIds = userIds; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + } Index: ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/controller/ScheduleInformationController.java =================================================================== diff -u -r24010 -r24013 --- ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/controller/ScheduleInformationController.java (.../ScheduleInformationController.java) (revision 24010) +++ ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/controller/ScheduleInformationController.java (.../ScheduleInformationController.java) (revision 24013) @@ -37,8 +37,8 @@ * 查询班次信息 */ @RequestMapping(value = "/findUserScheduleInformations",method = RequestMethod.POST) - public ApiResultVo findScheduleDefinitions(@Valid PageDTO pageDTO,BindingResult bresult ){ - CondititonScheduleInformationDTO condtitonDTO = new CondititonScheduleInformationDTO(); + public ApiResultVo findScheduleDefinitions(@Valid PageDTO pageDTO,BindingResult bresult,@RequestBody CondititonScheduleInformationDTO condtitonDTO){ + //CondititonScheduleInformationDTO condtitonDTO = new CondititonScheduleInformationDTO(); if(bresult.hasErrors()){ return ApiResultVoUtil.bindError(ErrorCodeEnum.BIND_ERROR,bresult.getFieldError().getDefaultMessage()); } Index: ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/dto/ScheduleDefinitionDTO.java =================================================================== diff -u -r23996 -r24013 --- ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/dto/ScheduleDefinitionDTO.java (.../ScheduleDefinitionDTO.java) (revision 23996) +++ ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/dto/ScheduleDefinitionDTO.java (.../ScheduleDefinitionDTO.java) (revision 24013) @@ -51,7 +51,6 @@ /** * 上班时间 */ - // @Pattern(regexp ="^([01]\\d|2[01234]):([0-5]\\d|60)$",message = "上班时间参数格式:时:分") @NotNull(message = "上班时间不能为空") @JsonFormat(pattern = "HH:mm",timezone="GMT+8") //@DateTimeFormat(pattern = "HH:mm") @@ -60,7 +59,6 @@ /** * 下班时间 */ - //@Pattern(regexp ="^([01]\\d|2[01234]):([0-5]\\d|60)$",message = "下班时间参数格式:时:分") @NotNull(message = "下班时间不能为空") @JsonFormat(pattern = "HH:mm",timezone="GMT+8") //@DateTimeFormat(pattern = "HH:mm") Index: ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/vo/UserScheduleVo.java =================================================================== diff -u -r24010 -r24013 --- ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/vo/UserScheduleVo.java (.../UserScheduleVo.java) (revision 24010) +++ ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/vo/UserScheduleVo.java (.../UserScheduleVo.java) (revision 24013) @@ -16,7 +16,7 @@ /** * 用户id */ - private String userId; + private Long userId; /** * 用户名字 @@ -33,11 +33,11 @@ */ private List scheduleInformationVoList; - public String getUserId() { + public Long getUserId() { return userId; } - public void setUserId(String userId) { + public void setUserId(Long userId) { this.userId = userId; } Index: ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/vo/ScheduleInformationVo.java =================================================================== diff -u -r24010 -r24013 --- ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/vo/ScheduleInformationVo.java (.../ScheduleInformationVo.java) (revision 24010) +++ ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/vo/ScheduleInformationVo.java (.../ScheduleInformationVo.java) (revision 24013) @@ -42,10 +42,23 @@ private String scheduleTimeStr; /** + * 星期数 + */ + private String week; + + /** * 班次定义显示名(科室-班次名) */ private String showName; + public String getWeek() { + return week; + } + + public void setWeek(String week) { + this.week = week; + } + public String getScheduleDefinitionId() { return scheduleDefinitionId; } Index: ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/service/ScheduleInformationManagerImpl.java =================================================================== diff -u -r24012 -r24013 --- ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/service/ScheduleInformationManagerImpl.java (.../ScheduleInformationManagerImpl.java) (revision 24012) +++ ssts-schedule/src/main/java/com/forgon/disinfectsystem/schedule/service/ScheduleInformationManagerImpl.java (.../ScheduleInformationManagerImpl.java) (revision 24013) @@ -1,17 +1,14 @@ package com.forgon.disinfectsystem.schedule.service; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.stream.Collector; import java.util.stream.Collectors; -import javax.annotation.Resource; - import net.sf.json.JSONObject; import org.apache.commons.collections4.CollectionUtils; @@ -36,16 +33,11 @@ import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.BasePoManagerImpl; -import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.util.SqlUtils; -import com.sun.org.apache.xalan.internal.xsltc.compiler.sym; public class ScheduleInformationManagerImpl extends BasePoManagerImpl implements ScheduleInformationManager{ @Autowired - private UserScheduleManager userScheduleManager; - - @Autowired private ScheduleDefinitionManager scheduleDefinitionManager; @Autowired @@ -54,10 +46,13 @@ @Autowired private LogManager appLogManager; - - @Override public PageDTO getUserScheduleInformations(PageDTO pageDTO,CondititonScheduleInformationDTO condtitonDTO) { + String startTime = condtitonDTO.getStartTime();//开始查询时间 + String endTime = condtitonDTO.getEndTime();//结束查询时间 + List conditonUserIds = condtitonDTO.getUserIds();//查询条件:用户id集合 + List conditonOrgUnitCodes = condtitonDTO.getOrgUnitCodes();//查询条件:科室编码集合 + //、1查询排班信息() String select = " select ssu.id as userId," + " si.id as scheduleInformationId ,si.scheduleTime," + " sd.id as scheduleDefinitionId ,(sd.sheduleName+'-'+sd.orgUnitName) as showName"; @@ -66,74 +61,102 @@ + "join ScheduleDefinition sd on si.scheduleDefinition_id = sd.id " +" join SS_USERS ssu on si.user_Id = ssu.id "; - //1、获得查询条件 + //where String where = " where 1=1 "; - if(null != condtitonDTO){ - + //若开始时间和结束时间都不为空则按:时间段来过滤 否则 默认本周7天的排班信息 + if(StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)){ + if(!DateTools.isValidDate(startTime,DateTools.COMMON_DATE_ONLY) || !DateTools.isValidDate(endTime,DateTools.COMMON_DATE_ONLY)){ + throw new RuntimeException("时间格式不正确:startTime:"+startTime+",endTime:"+endTime); + } + where += String.format(" and %s ", dateQueryAdapter.dateAreaSql("si.scheduleTime", startTime, endTime)); + }else{ + where += String.format(" and %s ", dateQueryAdapter.dateAreaSql("si.scheduleTime", + DateTools.startOfThisWeek(DateTools.COMMON_DATE_ONLY), + DateTools.endOfThisWeek(DateTools.COMMON_DATE_ONLY))); } - StringBuilder sql = new StringBuilder(); - sql.append(select + from + where); - //、获得排班信息集合 - List> scheduleInformationsList = objectDao.findSqlByParam(sql.toString(),new Object[]{}); - //、获取班次信息Vo集合 + String scheduleInformationToSql = select + from + where; + List> scheduleInformationsList = objectDao.findSqlByParam(scheduleInformationToSql,new Object[]{}); + //2、获取班次信息Vo集合 List siVoList = new ArrayList(); for (Map map : scheduleInformationsList) { ScheduleInformationVo siVo = new ScheduleInformationVo(); String scheduleTimestr = map.get("scheduleTime").toString();//排班时间 if(StringUtils.isNotEmpty(scheduleTimestr)){ - //Date scheduleTime = DateTools.coverStrToDate(scheduleTimestr,DateTools.COMMON_DATE_ONLY); - siVo.setScheduleTimeStr(scheduleTimestr); + siVo.setScheduleTimeStr(scheduleTimestr);//排班日期 + //获取星期几 + Date scheduleTime = DateTools.coverStrToDate(scheduleTimestr,DateTools.COMMON_DATE_ONLY); + String week = getWeekOfDate(scheduleTime); + siVo.setWeek(week); } siVo.setUserId(map.get("userId").toString());//用户id siVo.setScheduleInformationId(map.get("scheduleInformationId").toString());//班次信息id siVo.setScheduleDefinitionId(map.get("scheduleDefinitionId").toString());//班次定义id siVo.setShowName(map.get("showName").toString());//showName siVoList.add(siVo); } - //获得有排班信息的用户id集合 + //查询假期 List userIds = siVoList.stream().map(ScheduleInformationVo::getUserId).distinct().collect(Collectors.toList()); - //获得用户 @SuppressWarnings("unchecked") - List userList = objectDao.findBySql(User.class.getSimpleName(), - String.format(" where %s ", SqlUtils.getStringFieldInLargeCollectionsPredicate(" po.id ", userIds))); - Map useIdToFullName = new HashMap(); - for (User user : userList) { - useIdToFullName.put(user.getId().toString(), user.getFullName()); - } - //获得假期 - @SuppressWarnings("unchecked") List userScheduleList = objectDao.findBySql(UserSchedule.class.getSimpleName(), String.format(" where %s ", SqlUtils.getStringFieldInLargeCollectionsPredicate(" po.user.id ", userIds))); - Map userIdToHoliday = new HashMap(); + Map userIdToHoliday = new HashMap(); for (UserSchedule uSchedule : userScheduleList) { User user = uSchedule.getUser(); if(null != user ){ - userIdToHoliday.put(user.getId().toString(), uSchedule.getHoliDay()); + userIdToHoliday.put(user.getId(), uSchedule.getHoliDay()); } } + //3、查询有排班信息的用户() + String userSql = String.format(" where po.id in (select si.user.id from %s si )",ScheduleInformation.class .getSimpleName()); + if(CollectionUtils.isNotEmpty(conditonUserIds)){//用户过滤 + userSql += String.format(" and %s ", SqlUtils.getStringFieldInLargeCollectionsPredicate(" po.id ", conditonUserIds)); + } +/* if(CollectionUtils.isNotEmpty(conditonUserIds)){//科室过滤 + userSql += String.format(" and %s ", SqlUtils.getStringFieldInLargeCollectionsPredicate(" po.orgUnitCodes ", conditonUserIds)); + }*/ + @SuppressWarnings("unchecked") + List userList = objectDao.findBySql(User.class.getSimpleName(),userSql); //根据用户id进行分组 Map> userIdTosiVos = siVoList.stream().collect(Collectors.groupingBy(ScheduleInformationVo::getUserId)); - //、获取用户排班信息集合 + //4、拼接用户排班Vo集合 List userScheduleVoList = new ArrayList(); - for (Entry> entry : userIdTosiVos.entrySet()) { + for (User user : userList) { UserScheduleVo usVo = new UserScheduleVo(); - String userId = entry.getKey(); - if(useIdToFullName.containsKey(userId)){ - usVo.setUserName(useIdToFullName.get(userId));//用户名字 - } + Long userId = user.getId(); + usVo.setUserName(user.getFullName());//用户名字 + usVo.setUserId(userId);//用户id + //休假日期 if(userIdToHoliday.containsKey(userId)){ - usVo.setHoliDay(userIdToHoliday.get(userId));//休假日期 + usVo.setHoliDay(userIdToHoliday.get(userId)); } - usVo.setUserId(userId); - usVo.setScheduleInformationVoList(entry.getValue()); + //排班信息vo + for (Entry> entry : userIdTosiVos.entrySet()) { + if(userId.equals(entry.getKey())); + usVo.setScheduleInformationVoList(entry.getValue()); + } userScheduleVoList.add(usVo); } - pageDTO.setTotalResult(userScheduleVoList.size());; + pageDTO.setTotalResult(userScheduleVoList.size()); pageDTO.setData(userScheduleVoList); return pageDTO; } + /** + * 获取当前日期是星期几 + * @param date + * @return 当前日期是星期几 + */ + public String getWeekOfDate(Date date) { + String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int w = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (w < 0) + w = 0; + return weekDays[w]; + } + @Override public void saveScheduleInformations_TimeFrames(ScheduleInformationDTO sInformationDTO) { //1、根据用户id获得用户