package cn.com.lzt.ondutyoperate.service.impl; import cn.com.lzt.arrangeduty.dto.ArrangeDutyDto; import cn.com.lzt.arrangeduty.entity.ArrangeDutyEntity; import cn.com.lzt.arrangeduty.service.ArrangeDutyServiceI; import cn.com.lzt.arrangedutyoperate.entity.ArrangeDutyOperateEntity; import cn.com.lzt.calendar.dto.CalendarAscDto; import cn.com.lzt.ondutyoperate.entity.OnDutyOperateEntity; import cn.com.lzt.ondutyoperate.service.OnDutyOperateServiceI; import cn.com.lzt.projarrangedetail.entity.ProjarrangeDetailEntity; import cn.com.lzt.projarrangedetail.projectarrangecommonmethod.ProjectArrangeCommonMethod; import cn.com.lzt.projarrangedetail.service.ProjarrangeDetailServiceI; import cn.com.lzt.userarrangedetail.entity.UserArrangeDetailEntity; import org.jeecgframework.core.common.exception.BusinessException; import org.jeecgframework.core.common.model.json.AjaxJson; import org.jeecgframework.core.common.service.CommonService; import org.jeecgframework.core.common.service.impl.CommonServiceImpl; import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.util.*; import org.jeecgframework.web.cgform.enhance.CgformEnhanceJavaInter; import org.jeecgframework.web.system.pojo.base.DictEntity; import org.jeecgframework.web.system.service.SystemService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.validation.Validator; import java.io.Serializable; import java.math.BigDecimal; import java.util.*; @Service("onDutyOperateService") @Transactional public class OnDutyOperateServiceImpl extends CommonServiceImpl implements OnDutyOperateServiceI { @Autowired private SystemService systemService; @Autowired private Validator validator; //公共方法类 @Autowired private CommonService commonService; //项目排班详细表 @Autowired ProjarrangeDetailServiceI projarrangeDetailServiceI; //班次表 @Autowired private ArrangeDutyServiceI arrangeDutyService; public void delete(OnDutyOperateEntity entity) throws Exception{ super.delete(entity); //执行删除操作增强业务 this.doDelBus(entity); } public Serializable save(OnDutyOperateEntity entity) throws Exception{ Serializable t = super.save(entity); //执行新增操作增强业务 this.doAddBus(entity); return t; } public void saveOrUpdate(OnDutyOperateEntity entity) throws Exception{ super.saveOrUpdate(entity); //执行更新操作增强业务 this.doUpdateBus(entity); } /** * 新增操作增强业务 * @param t * @return */ private void doAddBus(OnDutyOperateEntity t) throws Exception{ //-----------------sql增强 start---------------------------- //-----------------sql增强 end------------------------------ //-----------------java增强 start--------------------------- //-----------------java增强 end----------------------------- } /** * 更新操作增强业务 * @param t * @return */ private void doUpdateBus(OnDutyOperateEntity t) throws Exception{ //-----------------sql增强 start---------------------------- //-----------------sql增强 end------------------------------ //-----------------java增强 start--------------------------- //-----------------java增强 end----------------------------- } /** * 删除操作增强业务 * @param id * @return */ private void doDelBus(OnDutyOperateEntity t) throws Exception{ //-----------------sql增强 start---------------------------- //-----------------sql增强 end------------------------------ //-----------------java增强 start--------------------------- //-----------------java增强 end----------------------------- } private Map populationMap(OnDutyOperateEntity t){ Map map = new HashMap(); map.put("id", t.getId()); map.put("pid", t.getPid()); map.put("yearmonth", t.getYearmonth()); map.put("shiftid", t.getShiftid()); map.put("userid", t.getUserid()); map.put("arrange_stime", t.getArrangeStime()); map.put("arrange_etime", t.getArrangeEtime()); map.put("everyday_people_num", t.getEverydayPeopleNum()); map.put("attendance_cycle", t.getAttendanceCycle()); map.put("create_name", t.getCreateName()); map.put("create_by", t.getCreateBy()); map.put("create_date", t.getCreateDate()); map.put("update_name", t.getUpdateName()); map.put("update_by", t.getUpdateBy()); map.put("update_date", t.getUpdateDate()); map.put("sys_org_code", t.getSysOrgCode()); map.put("sys_company_code", t.getSysCompanyCode()); return map; } /** * 替换sql中的变量 * @param sql * @param t * @return */ public String replaceVal(String sql,OnDutyOperateEntity t){ sql = sql.replace("#{id}",String.valueOf(t.getId())); sql = sql.replace("#{pid}",String.valueOf(t.getPid())); sql = sql.replace("#{yearmonth}",String.valueOf(t.getYearmonth())); sql = sql.replace("#{shiftid}",String.valueOf(t.getShiftid())); sql = sql.replace("#{userid}",String.valueOf(t.getUserid())); sql = sql.replace("#{arrange_stime}",String.valueOf(t.getArrangeStime())); sql = sql.replace("#{arrange_etime}",String.valueOf(t.getArrangeEtime())); sql = sql.replace("#{everyday_people_num}",String.valueOf(t.getEverydayPeopleNum())); sql = sql.replace("#{attendance_cycle}",String.valueOf(t.getAttendanceCycle())); sql = sql.replace("#{create_name}",String.valueOf(t.getCreateName())); sql = sql.replace("#{create_by}",String.valueOf(t.getCreateBy())); sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate())); sql = sql.replace("#{update_name}",String.valueOf(t.getUpdateName())); sql = sql.replace("#{update_by}",String.valueOf(t.getUpdateBy())); sql = sql.replace("#{update_date}",String.valueOf(t.getUpdateDate())); sql = sql.replace("#{sys_org_code}",String.valueOf(t.getSysOrgCode())); sql = sql.replace("#{sys_company_code}",String.valueOf(t.getSysCompanyCode())); sql = sql.replace("#{UUID}",UUID.randomUUID().toString()); return sql; } /** * 执行JAVA增强 */ private void executeJavaExtend(String cgJavaType,String cgJavaValue,Map data) throws Exception { if(StringUtil.isNotEmpty(cgJavaValue)){ Object obj = null; try { if("class".equals(cgJavaType)){ //因新增时已经校验了实例化是否可以成功,所以这块就不需要再做一次判断 obj = MyClassLoader.getClassByScn(cgJavaValue).newInstance(); }else if("spring".equals(cgJavaType)){ obj = ApplicationContextUtil.getContext().getBean(cgJavaValue); } if(obj instanceof CgformEnhanceJavaInter){ CgformEnhanceJavaInter javaInter = (CgformEnhanceJavaInter) obj; javaInter.execute("t_bus_onduty_operate",data); } } catch (Exception e) { e.printStackTrace(); throw new Exception("执行JAVA增强出现异常!"); } } } @Override public AjaxJson saveOnDutyOperate(OnDutyOperateEntity onDutyOperate,String onDutyOperateId) { String message = null; AjaxJson j = new AjaxJson(); message = ""; j.setMsg(message); j=checkOnDutyOperate(onDutyOperate); if(j.getMsg().length()==0){ List arrangeDutyOperateIdList=ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperateId); if (StringUtil.isNotEmpty(onDutyOperate.getId())) { OnDutyOperateEntity t = this.get(OnDutyOperateEntity.class, onDutyOperate.getId()); if(t!=null){ try {//数据存在,进行更新操作 //判断是否是已存的id if(!arrangeDutyOperateIdList.contains(t.getId())){ if(onDutyOperateId!=null&&onDutyOperateId.length()>0){ onDutyOperateId=onDutyOperateId+","+t.getId(); }else{ onDutyOperateId=t.getId(); } //返回编辑的id,方便值班排班== Map idMap=new HashMap(); idMap.put("onDutyOperateId",onDutyOperateId ); j.setAttributes(idMap); //返回编辑的id,方便值班排班== } /*List userIdOldList=ProjectArrangeCommonMethod.extractIdListByComma(t.getUserid()); List userIdNewList=ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getUserid()); userIdOldList.removeAll(userIdNewList); MyBeanUtils.copyBeanNotNull2Bean(onDutyOperate, t); this.saveOrUpdate(t); String deleteUserId=""; for (int i = 0; i < userIdOldList.size(); i++) { if(deleteUserId.length()!=0){ deleteUserId+=","+userIdOldList.get(i); }else{ deleteUserId=userIdOldList.get(i); } } onDutyOperate.setUserid(deleteUserId); //删除值班操作表数据 this.deleteUserArrangeDetail(onDutyOperate,pid);*/ //删除值班操作表数据 this.deleteUserArrangeDetail(t); MyBeanUtils.copyBeanNotNull2Bean(onDutyOperate, t); this.saveOrUpdate(t); systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO); message = "值班操作更新成功"; } catch (Exception e) { e.printStackTrace(); message = "值班操作更新失败"; throw new BusinessException(e.getMessage()); } }else{//数据不存在,进行添加操作 try{ onDutyOperate.setId(""); this.save(onDutyOperate); if(onDutyOperateId!=null&&onDutyOperateId.length()>0){ onDutyOperateId=onDutyOperateId+","+onDutyOperate.getId(); }else{ onDutyOperateId=onDutyOperate.getId(); } //返回编辑的id,方便值班排班== Map idMap=new HashMap(); idMap.put("onDutyOperateId",onDutyOperateId ); j.setAttributes(idMap); //返回编辑的id,方便值班排班== systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO); message = "值班操作添加成功"; }catch(Exception e){ e.printStackTrace(); message = "值班操作添加失败"; throw new BusinessException(e.getMessage()); } } } else {//数据不存在,进行添加操作 try{ this.save(onDutyOperate); if(onDutyOperateId!=null&&onDutyOperateId.length()>0){ onDutyOperateId=onDutyOperateId+","+onDutyOperate.getId(); }else{ onDutyOperateId=onDutyOperate.getId(); } //返回编辑的id,方便值班排班== Map idMap=new HashMap(); idMap.put("onDutyOperateId",onDutyOperateId ); j.setAttributes(idMap); //返回编辑的id,方便值班排班== systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO); message = "值班操作添加成功"; }catch(Exception e){ e.printStackTrace(); message = "值班操作添加失败"; throw new BusinessException(e.getMessage()); } } j.setMsg(message); } return j; } @Override public AjaxJson checkOnDutyOperate(OnDutyOperateEntity onDutyOperate){ AjaxJson j = new AjaxJson(); String message=""; //获取用户名称 List baseUserList=systemService.queryDict("t_s_base_user", "id", "realname"); Map baseUserMap=new HashMap(); for (int i = 0; i < baseUserList.size(); i++) { baseUserMap.put(baseUserList.get(i).getTypecode(), baseUserList.get(i).getTypename()); } //1出勤时间 List attendanceCycleList=ProjectArrangeCommonMethod.extractIdListByComma(ProjectArrangeCommonMethod.getAttendanceCycleNumner(onDutyOperate.getAttendanceCycle())); //1出勤时间 Map failMap=new HashMap(); // 轮流值班/加班保存校验 // // 1.根据运转方式验证 // 三班两运转和四班两运转一定不能轮流值班加班 // // 2.根据值班操作表已有的数据判断所选时间段内是否已经排班冲突 if(onDutyOperate.getPid()!=null&&onDutyOperate.getPid().length()!=0){ onDutyOperate.setPid(onDutyOperate.getPid().split(",")[0]); } //用户idList List onDutyOperateUserIdList = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getUserid()); //根据月度查询项目排班操作表数据,然后对比userid获取运转方式 StringBuffer hql = new StringBuffer(" FROM ArrangeDutyOperateEntity adoe where adoe.yearmonth=? and adoe.pid=? "); List arrangeDutyOperateEntityList = findHql(hql.toString(),onDutyOperate.getYearmonth(),onDutyOperate.getPid()); for (int i = 0; i < onDutyOperateUserIdList.size(); i++) { for (int k = 0; k < arrangeDutyOperateEntityList.size(); k++) { List arrangeDutyOperateList= ProjectArrangeCommonMethod.extractIdListByComma(arrangeDutyOperateEntityList.get(k).getUserid()); if(arrangeDutyOperateList.contains(onDutyOperateUserIdList.get(i))){ if(arrangeDutyOperateEntityList.get(k).getRunway().equals(Globals.o2o_wujiabanfei) ||arrangeDutyOperateEntityList.get(k).getRunway().equals(Globals.t2t_wujiabanfei) ||arrangeDutyOperateEntityList.get(k).getRunway().equals(Globals.t2o_jijiabanfei)){ if(failMap.size()==0){ failMap.put(arrangeDutyOperateEntityList.get(k).getRunway(), onDutyOperateUserIdList.get(i)); }else{ if(failMap.containsKey(arrangeDutyOperateEntityList.get(k).getRunway())){ failMap.put(arrangeDutyOperateEntityList.get(k).getRunway(), failMap.get(arrangeDutyOperateEntityList.get(k).getRunway())+","+onDutyOperateUserIdList.get(i)); }else{ failMap.put(arrangeDutyOperateEntityList.get(k).getRunway(), onDutyOperateUserIdList.get(i)); } } } break; } } } if(failMap.size()>0){ for (Map.Entry m:failMap.entrySet()) { List mapUserIdList= ProjectArrangeCommonMethod.extractIdListByComma(m.getValue().toString()); if(message.length()==0){ for (int k = 0; k < mapUserIdList.size(); k++) { if(message.length()==0){ message=baseUserMap.get(mapUserIdList.get(k)); }else{ message+=","+baseUserMap.get(mapUserIdList.get(k)); } } message+="运转方式为"+ProjectArrangeCommonMethod.getRunWayByCode(m.getKey())+",不能进行轮流值班/加班操作;"; }else{ for (int k = 0; k < mapUserIdList.size(); k++) { if(k==0){ message+=baseUserMap.get(mapUserIdList.get(k)); }else{ message+=","+baseUserMap.get(mapUserIdList.get(k)); } } message+="运转方式为"+ProjectArrangeCommonMethod.getRunWayByCode(m.getKey())+",不能进行轮流值班/加班操作;"; } } j.setMsg(message); j.setSuccess(false); }else{ //验证员工是否已经排班完成,所选时间段内 //根据月度查出日期id== CalendarAscDto calendarAscDto=new CalendarAscDto(); calendarAscDto.setYear(Integer.parseInt(onDutyOperate.getYearmonth().split("-")[0])); calendarAscDto.setMonth(Integer.parseInt(onDutyOperate.getYearmonth().split("-")[1])); List calendarAscDtoList=projarrangeDetailServiceI.getCalendar(calendarAscDto); List calendarAscDtoListOld=new ArrayList(); if(onDutyOperate.getId()!=null&&onDutyOperate.getId().length()>0){ //如果是编辑,先查时间段,不进行时间段内验证 hql = new StringBuffer(" FROM OnDutyOperateEntity ooe where ooe.id=? "); List onDutyOperateEntityListOld = findHql(hql.toString(),onDutyOperate.getId()); if(onDutyOperateEntityListOld.size()>0){ for (int r = 0; r < calendarAscDtoList.size(); r++) { if(calendarAscDtoList.get(r).getDay()>=Integer.parseInt(onDutyOperateEntityListOld.get(0).getArrangeStime().split("-")[2])&& calendarAscDtoList.get(r).getDay()<=Integer.parseInt(onDutyOperateEntityListOld.get(0).getArrangeEtime().split("-")[2])){ for (int i = 0; i < attendanceCycleList.size(); i++) { if(String.valueOf(calendarAscDtoList.get(r).getWeek()).equals(attendanceCycleList.get(i))&&!calendarAscDtoList.get(r).getDtype().equals("2")){ calendarAscDtoListOld.add(calendarAscDtoList.get(r)); } } } } } } List calendarAscDtoListNew=new ArrayList(); //根据所选时间段排过班的日期id for (int r = 0; r < calendarAscDtoList.size(); r++) { if(calendarAscDtoList.get(r).getDay()>=Integer.parseInt(onDutyOperate.getArrangeStime().split("-")[2])&& calendarAscDtoList.get(r).getDay()<=Integer.parseInt(onDutyOperate.getArrangeEtime().split("-")[2])){ for (int i = 0; i < attendanceCycleList.size(); i++) { if(String.valueOf(calendarAscDtoList.get(r).getWeek()).equals(attendanceCycleList.get(i))&&!calendarAscDtoList.get(r).getDtype().equals("2")){ calendarAscDtoListNew.add(calendarAscDtoList.get(r)); } } } } calendarAscDtoListNew.removeAll(calendarAscDtoListOld); //根据月度查出日期id== for (int i = 0; i < onDutyOperateUserIdList.size(); i++) { //根据月度,项目id,用户id查询项目排班详细表和员工排班详情表 ProjarrangeDetailEntity projarrangeDetailEntity=new ProjarrangeDetailEntity(); projarrangeDetailEntity.setUserid(onDutyOperateUserIdList.get(i)); projarrangeDetailEntity.setYearmonth(onDutyOperate.getYearmonth()); //查询项目排班详细表 hql = new StringBuffer(" FROM ProjarrangeDetailEntity pde where pde.yearmonth=? and pde.userid=? "); List projarrangeDetailEntityList = findHql(hql.toString(),projarrangeDetailEntity.getYearmonth(),projarrangeDetailEntity.getUserid()); UserArrangeDetailEntity userArrangeDetailEntity=new UserArrangeDetailEntity(); userArrangeDetailEntity.setProjarrangeDetailid(projarrangeDetailEntityList.get(0).getId()); //查询员工排班详情表 hql = new StringBuffer(" FROM UserArrangeDetailEntity uade where uade.projarrangeDetailid=? "); List userArrangeDetailEntityList = findHql(hql.toString(),userArrangeDetailEntity.getProjarrangeDetailid()); List userArrangeDetailEntityListNew =new ArrayList(); for (int k = 0; k < calendarAscDtoListNew.size(); k++) { for (int l = 0; l < userArrangeDetailEntityList.size(); l++) { if(calendarAscDtoListNew.get(k).getId().equals(userArrangeDetailEntityList.get(l).getCalendarid())){ userArrangeDetailEntityListNew.add(userArrangeDetailEntityList.get(l)); } } } for (int k = 0; k < userArrangeDetailEntityListNew.size(); k++) { if(!userArrangeDetailEntityListNew.get(k).getShiftid().equals(arrangeDutyService.getDUTYTYPE_xiuxiId())){ failMap.put(onDutyOperateUserIdList.get(i), ""); } } } if(failMap.size()>0){ for (Map.Entry m:failMap.entrySet()) { if (message.length()==0) { message=baseUserMap.get(m.getKey()); }else { message+=","+baseUserMap.get(m.getKey()); } } message+="所选时间段内已经有排班"; j.setMsg(message); j.setSuccess(false); }else{ //验证排班操作表中已经冲突,还未进行排班操作; hql = new StringBuffer(" FROM OnDutyOperateEntity ooe where ooe.yearmonth=? and ooe.pid=? "); //值班操作表 List onDutyOperateEntityList = findHql(hql.toString(),onDutyOperate.getYearmonth(),onDutyOperate.getPid()); if(onDutyOperate.getId()!=null&&onDutyOperate.getId().length()>0){ for (int i = 0; i < onDutyOperateEntityList.size(); i++) { if(onDutyOperateEntityList.get(i).getId().equals(onDutyOperate.getId())){ onDutyOperateEntityList.remove(i); break; } } } for (int i = 0; i < onDutyOperateUserIdList.size(); i++) { for (int k = 0; k < onDutyOperateEntityList.size(); k++) { List onDutyOperateUserIdListOld = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperateEntityList.get(k).getUserid()); if(onDutyOperateUserIdListOld.contains(onDutyOperateUserIdList.get(i))){ //员工已经在值班加班操作表有数据 //先获取重合的时间段 String arrangeStartDay=onDutyOperate.getArrangeStime().split("-")[2]; String arrangeEndDay=onDutyOperate.getArrangeEtime().split("-")[2]; String arrangeStartDayOld=onDutyOperateEntityList.get(k).getArrangeStime().split("-")[2]; String arrangeEndDayOld=onDutyOperateEntityList.get(k).getArrangeEtime().split("-")[2]; List arrangeTimeList=new ArrayList(); List arrangeTimeOldList=new ArrayList(); arrangeTimeList.add(String.valueOf(Integer.parseInt(arrangeStartDay))); arrangeTimeList.add(String.valueOf(Integer.parseInt(arrangeEndDay))); int temNum=0; while(Integer.parseInt(arrangeStartDay)!=Integer.parseInt(arrangeEndDay)){ arrangeStartDay=String.valueOf(Integer.parseInt(arrangeStartDay)+1); if(!arrangeTimeList.contains(arrangeStartDay)){ arrangeTimeList.add(arrangeStartDay); } temNum++; if(temNum>35){ break; } } arrangeTimeOldList.add(String.valueOf(Integer.parseInt(arrangeStartDayOld))); arrangeTimeOldList.add(String.valueOf(Integer.parseInt(arrangeEndDayOld))); temNum=0; while(Integer.parseInt(arrangeStartDayOld)!=Integer.parseInt(arrangeEndDayOld)){ arrangeStartDayOld=String.valueOf(Integer.parseInt(arrangeStartDayOld)+1); if(!arrangeTimeOldList.contains(arrangeStartDayOld)){ arrangeTimeOldList.add(arrangeStartDayOld); } temNum++; if(temNum>35){ break; } } // List superpositionList=new ArrayList(); arrangeTimeList.retainAll(arrangeTimeOldList);//获取重复的日期 if(arrangeTimeList.size()>0){ //当有重复日期,在判断出勤时间是否包含,<=即可 List attendanceCycleListOld=ProjectArrangeCommonMethod.extractIdListByComma(ProjectArrangeCommonMethod.getAttendanceCycleNumner(onDutyOperateEntityList.get(k).getAttendanceCycle())); attendanceCycleListOld.retainAll(attendanceCycleList); if(attendanceCycleListOld.size()!=0){ failMap.put(onDutyOperateUserIdList.get(i), ""); } } } } } if(failMap.size()>0){ for (Map.Entry m:failMap.entrySet()) { if (message.length()==0) { message=baseUserMap.get(m.getKey()); }else { message+=","+baseUserMap.get(m.getKey()); } } message+="所选时间段内已经有排班"; j.setMsg(message); j.setSuccess(false); } } } j.setMsg(message); return j; } /*@Override public AjaxJson checkArrangeSETime(OnDutyOperateEntity onDutyOperate){ String message = null; AjaxJson j = new AjaxJson(); message=""; j.setMsg(message); //存时间段已存在的用户id List userIdListNew=new ArrayList(); List userIdList = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getUserid()); for (int i = 0; i < userIdList.size(); i++) { //因为用户id为多用户逗号分隔,先查出整个月的数据 StringBuffer hql = new StringBuffer(" from OnDutyOperateEntity t where t.yearmonth= ? "); List onDutyOperateEntityList = findHql(hql.toString(),onDutyOperate.getYearmonth()); for (int k = 0; k < onDutyOperateEntityList.size(); k++) { if(onDutyOperate.getId()!=null&&onDutyOperate.getId().length()>0){ if(!onDutyOperateEntityList.get(k).getId().equals(onDutyOperate.getId())){ List userIdListOld = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperateEntityList.get(k).getUserid()); if(userIdListOld.contains(userIdList.get(i))){ String arrangeStartDay=onDutyOperate.getArrangeStime().split("-")[2]; String arrangeEndDay=onDutyOperate.getArrangeEtime().split("-")[2]; String arrangeStartDayOld=onDutyOperateEntityList.get(k).getArrangeStime().split("-")[2]; String arrangeEndDayOld=onDutyOperateEntityList.get(k).getArrangeEtime().split("-")[2]; List arrangeTimeList=new ArrayList(); List arrangeTimeOldList=new ArrayList(); arrangeTimeList.add(String.valueOf(Integer.parseInt(arrangeStartDay))); arrangeTimeList.add(String.valueOf(Integer.parseInt(arrangeEndDay))); int temNum=0; while(Integer.parseInt(arrangeStartDay)!=Integer.parseInt(arrangeEndDay)){ arrangeStartDay=String.valueOf(Integer.parseInt(arrangeStartDay)+1); if(!arrangeTimeList.contains(arrangeStartDay)){ arrangeTimeList.add(arrangeStartDay); } temNum++; if(temNum>35){ break; } } arrangeTimeOldList.add(String.valueOf(Integer.parseInt(arrangeStartDayOld))); arrangeTimeOldList.add(String.valueOf(Integer.parseInt(arrangeEndDayOld))); temNum=0; while(Integer.parseInt(arrangeStartDayOld)!=Integer.parseInt(arrangeEndDayOld)){ arrangeStartDayOld=String.valueOf(Integer.parseInt(arrangeStartDayOld)+1); if(!arrangeTimeOldList.contains(arrangeStartDayOld)){ arrangeTimeOldList.add(arrangeStartDayOld); } temNum++; if(temNum>35){ break; } } if(arrangeTimeList.contains(arrangeTimeOldList)||arrangeTimeOldList.contains(arrangeTimeList)){ userIdListNew.add(userIdList.get(i)); } int tempNum=arrangeTimeList.size(); arrangeTimeList.removeAll(arrangeTimeOldList); if(arrangeTimeList.size()!=tempNum){ if(!userIdListNew.contains(userIdList.get(i))){ userIdListNew.add(userIdList.get(i)); } } } } }else{ List userIdListOld = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperateEntityList.get(k).getUserid()); if(userIdListOld.contains(userIdList.get(i))){ String arrangeStartDay=onDutyOperate.getArrangeStime().split("-")[2]; String arrangeEndDay=onDutyOperate.getArrangeEtime().split("-")[2]; String arrangeStartDayOld=onDutyOperateEntityList.get(k).getArrangeStime().split("-")[2]; String arrangeEndDayOld=onDutyOperateEntityList.get(k).getArrangeEtime().split("-")[2]; List arrangeTimeList=new ArrayList(); List arrangeTimeOldList=new ArrayList(); arrangeTimeList.add(arrangeStartDay); arrangeTimeList.add(arrangeEndDay); while(Integer.parseInt(arrangeStartDay)!=Integer.parseInt(arrangeEndDay)){ arrangeStartDay=String.valueOf(Integer.parseInt(arrangeStartDay)+1); if(!arrangeTimeList.contains(arrangeStartDay)){ arrangeTimeList.add(arrangeStartDay); } } arrangeTimeOldList.add(arrangeStartDayOld); arrangeTimeOldList.add(arrangeEndDayOld); while(Integer.parseInt(arrangeStartDayOld)!=Integer.parseInt(arrangeEndDayOld)){ arrangeStartDayOld=String.valueOf(Integer.parseInt(arrangeStartDayOld)+1); if(!arrangeTimeOldList.contains(arrangeStartDayOld)){ arrangeTimeOldList.add(arrangeStartDayOld); } } int tempNum=arrangeTimeList.size(); arrangeTimeList.removeAll(arrangeTimeOldList); if(arrangeTimeList.size()!=tempNum){ if(!userIdListNew.contains(userIdList.get(i))){ userIdListNew.add(userIdList.get(i)); } } } } } } if(userIdListNew.size()>0){ //获取用户名称 List baseUserList=systemService.queryDict("t_s_base_user", "id", "realname"); for (int i = 0; i < userIdListNew.size(); i++) { for (int k = 0; k < baseUserList.size(); k++) { if(baseUserList.get(k).getTypecode().equals(userIdListNew.get(i))){ if(message.length()>0){ message+=","+baseUserList.get(k).getTypename(); }else{ message=baseUserList.get(k).getTypename(); } } } } } j.setMsg(message); return j; }*/ @Override public AjaxJson deleteOnDutyOperate(OnDutyOperateEntity onDutyOperate,String pid){ String message = null; AjaxJson j = new AjaxJson(); onDutyOperate = systemService.getEntity(OnDutyOperateEntity.class, onDutyOperate.getId()); message = "值班操作删除成功"; try{ //删除员工排班详情表的值班数据 //值班类型项目排班详细表的值班天数要依次相减 //加班类型项目排班详细表的超时加班要依次相减 j=this.deleteUserArrangeDetail(onDutyOperate); this.delete(onDutyOperate); systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO); }catch(Exception e){ e.printStackTrace(); message = "值班操作删除失败"; throw new BusinessException(e.getMessage()); } j.setMsg(message); return j; } @Override public AjaxJson deleteUserArrangeDetail(OnDutyOperateEntity onDutyOperate){ AjaxJson j = new AjaxJson(); // String userId=onDutyOperate.getUserid(); String yearmonth=onDutyOperate.getYearmonth(); //1出勤时间 List attendanceCycleList=ProjectArrangeCommonMethod.extractIdListByComma(ProjectArrangeCommonMethod.getAttendanceCycleNumner(onDutyOperate.getAttendanceCycle())); //1出勤时间 //2根据月度查出日期id CalendarAscDto calendarAscDto=new CalendarAscDto(); calendarAscDto.setYear(Integer.parseInt(yearmonth.split("-")[0])); calendarAscDto.setMonth(Integer.parseInt(yearmonth.split("-")[1])); List calendarAscDtoListOld=projarrangeDetailServiceI.getCalendar(calendarAscDto); List calendarAscDtoList=new ArrayList(); //根据所选时间段并去除周一至周五以及国家法定节假日 //并根据出勤时间获取需要排班的日期id for (int r = 0; r < calendarAscDtoListOld.size(); r++) { if(calendarAscDtoListOld.get(r).getDay()>=Integer.parseInt(onDutyOperate.getArrangeStime().split("-")[2])&& calendarAscDtoListOld.get(r).getDay()<=Integer.parseInt(onDutyOperate.getArrangeEtime().split("-")[2])){ if(!calendarAscDtoListOld.get(r).getDtype().equals(Globals.dtype_2)){ if(attendanceCycleList.contains(calendarAscDtoListOld.get(r).getWeek())){ calendarAscDtoList.add(calendarAscDtoListOld.get(r)); } } } } //2根据月度查出日期id== //3根据用户id获取项目排班详细表数据 //用户id List userIdList = ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getUserid()); //查询项目排班详细表数据 StringBuffer hql = new StringBuffer(" FROM ProjarrangeDetailEntity odoe where odoe.yearmonth=? and odoe.pid=? "); List projarrangeDetailEntityListOld = findHql(hql.toString(),yearmonth,onDutyOperate.getPid()); List projarrangeDetailEntityList=new ArrayList(); //匹配已经排班的用户 for (int e = 0; e < projarrangeDetailEntityListOld.size(); e++) { for (int k = 0; k < userIdList.size(); k++) { if(userIdList.get(k).equals(projarrangeDetailEntityListOld.get(e).getUserid())){ projarrangeDetailEntityList.add(projarrangeDetailEntityListOld.get(e)); break; } } } //3根据用户id获取项目排班详细表数据 //4把班次id放入班次list中获取班次信息 ArrangeDutyDto arrangeDutyDto=new ArrangeDutyDto(); arrangeDutyDto.getArrangeDutyIdList().addAll(ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getShiftid())); String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString(); List arrangeDutyDtoList = arrangeDutyService.getArrangeDutyByIdList(arrangeDutyDto, authSql); arrangeDutyDto=arrangeDutyDtoList.get(0); //4把班次id放入班次list中获取班次信息 for (int i = 0; i < projarrangeDetailEntityList.size(); i++) { for (int k = 0; k < calendarAscDtoList.size(); k++) { if(arrangeDutyDto.getDutyType().equals(Globals.DUTYTYPE_zhiban)){ if(projarrangeDetailEntityList.get(i).getOndutyDays().compareTo(new BigDecimal("0"))==1){ projarrangeDetailEntityList.get(i).setOndutyDays(projarrangeDetailEntityList.get(i).getOndutyDays().subtract(new BigDecimal("1"))); } }else if(arrangeDutyDto.getDutyType().equals(Globals.DUTYTYPE_jiaban)){ if(arrangeDutyDto.getTimeOutOvertimeHours()!=null){ if(projarrangeDetailEntityList.get(i).getTimeOutOvertimeHours().compareTo(arrangeDutyDto.getTimeOutOvertimeHours())==1){ projarrangeDetailEntityList.get(i).setTimeOutOvertimeHours(projarrangeDetailEntityList.get(i).getTimeOutOvertimeHours().subtract(arrangeDutyDto.getTimeOutOvertimeHours())); } } } } //项目排班详细表保存 this.saveOrUpdate(projarrangeDetailEntityList.get(i)); //根据项目排班详细表的主键id查询员工排班详情表t_bus_user_arrange_detail hql = new StringBuffer(" from UserArrangeDetailEntity t where t.projarrangeDetailid =? "); List userArrangeDetailEntityList = findHql(hql.toString(),projarrangeDetailEntityList.get(i).getId()); for (int k = 0; k < userArrangeDetailEntityList.size(); k++) { for (int m = 0; m < calendarAscDtoList.size(); m++) { if(userArrangeDetailEntityList.get(k).getCalendarid().equals(calendarAscDtoList.get(m).getId())){ hql = new StringBuffer(" from ArrangeDutyEntity t where t.id =? "); List arrangeDutyEntityList = findHql(hql.toString(),userArrangeDetailEntityList.get(k).getShiftid()); if(arrangeDutyEntityList.get(0).getDutyType().equals(Globals.DUTYTYPE_zhiban)||arrangeDutyEntityList.get(0).getDutyType().equals(Globals.DUTYTYPE_jiaban)){ //值班操作删除时把值班班次改为休息 this.doUpdateUserArrangeDetail(userArrangeDetailEntityList.get(k)); } } } } } return j; } /*@Override public AjaxJson deleteUserArrangeDetail(OnDutyOperateEntity onDutyOperate,String pid){ AjaxJson j = new AjaxJson(); String userId=onDutyOperate.getUserid(); String yearmonth=onDutyOperate.getYearmonth(); //出勤时间 String[] attendanceCycle=ProjectArrangeCommonMethod.getAttendanceCycleNumner(onDutyOperate.getAttendanceCycle()).split(","); //1出勤时间 //String[] attendanceCycle=ProjectArrangeCommonMethod.getAttendanceCycleNumner(onDutyOperateEntityList.get(i).getAttendanceCycle()).split(","); List attendanceCycleList=ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getAttendanceCycle()); //1出勤时间 //根据月度查出日期id== CalendarAscDto calendarAscDto=new CalendarAscDto(); calendarAscDto.setYear(Integer.parseInt(yearmonth.split("-")[0])); calendarAscDto.setMonth(Integer.parseInt(yearmonth.split("-")[1])); List calendarAscDtoList=projarrangeDetailServiceI.getCalendar(calendarAscDto); List calendarAscDtoListNew=new ArrayList(); //根据所选时间段排过班的日期id for (int r = 0; r < calendarAscDtoList.size(); r++) { if(calendarAscDtoList.get(r).getDay()>=Integer.parseInt(onDutyOperate.getArrangeStime().split("-")[2])&& calendarAscDtoList.get(r).getDay()<=Integer.parseInt(onDutyOperate.getArrangeEtime().split("-")[2])){ for (int i = 0; i < attendanceCycle.length; i++) { if(String.valueOf(calendarAscDtoList.get(r).getWeek()).equals(attendanceCycle[i])&&!calendarAscDtoList.get(r).getDtype().equals("2")){ calendarAscDtoListNew.add(calendarAscDtoList.get(r)); } } } } //根据月度查出日期id== //把班次id放入班次list中查询班次信息=================== ArrangeDutyDto arrangeDutyDto=new ArrangeDutyDto(); arrangeDutyDto.getArrangeDutyIdList().addAll(ProjectArrangeCommonMethod.extractIdListByComma(onDutyOperate.getShiftid())); String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString(); List arrangeDutyDtoList = arrangeDutyService.getArrangeDutyByIdList(arrangeDutyDto, authSql); //轮流值班加班只有一个班次 String shiftType=arrangeDutyDtoList.get(0).getDutyType(); //把班次id放入班次list中查询班次信息==================== BigDecimal ondutyDays=new BigDecimal(calendarAscDtoListNew.size());//值班 BigDecimal timeOutOvertimeHours = BigDecimal.ZERO;//超时加班 for (int i = 0; i < calendarAscDtoListNew.size(); i++) { if(arrangeDutyDtoList.get(0).getTimeOutOvertimeHours()!=null){ timeOutOvertimeHours=timeOutOvertimeHours.add(arrangeDutyDtoList.get(0).getTimeOutOvertimeHours()); } } if(userId!=null&&userId.length()>0){ String[] userIdArr=userId.split(","); for (int k = 0; k < userIdArr.length; k++) { //根据用户员工id查询项目排班详细表数据t_bus_projarrange_detail StringBuffer hql = new StringBuffer(" from ProjarrangeDetailEntity t where t.userid = ? and t.yearmonth= ? "); List projarrangeDetailEntityList = findHql(hql.toString(),userIdArr[k],yearmonth); for (int i = 0; i < projarrangeDetailEntityList.size(); i++) { if(shiftType.equals(Globals.DUTYTYPE_jiaban)){ if(timeOutOvertimeHours!=null&&projarrangeDetailEntityList.get(i).getTimeOutOvertimeHours().compareTo(new BigDecimal("0"))==1){ //加班类型项目排班详细表的超时加班要依次相减 projarrangeDetailEntityList.get(i).setTimeOutOvertimeHours(projarrangeDetailEntityList.get(i).getTimeOutOvertimeHours().subtract(timeOutOvertimeHours)); } }else if(shiftType.equals(Globals.DUTYTYPE_zhiban)){ if(timeOutOvertimeHours!=null&&projarrangeDetailEntityList.get(i).getOndutyDays().compareTo(new BigDecimal("0"))==1){ //值班类型项目排班详细表的值班天数要依次相减 projarrangeDetailEntityList.get(i).setOndutyDays(projarrangeDetailEntityList.get(i).getOndutyDays().subtract(ondutyDays)); } } this.saveOrUpdate(projarrangeDetailEntityList.get(i)); //根据项目排班详细表的主键id查询员工排班详情表t_bus_user_arrange_detail hql = new StringBuffer(" from UserArrangeDetailEntity t where t.projarrangeDetailid = ? "); List userArrangeDetailEntityList = findHql(hql.toString(),projarrangeDetailEntityList.get(i).getId()); for (int l = 0; l < userArrangeDetailEntityList.size(); l++) { hql = new StringBuffer(" from ArrangeDutyEntity t where t.id = ? "); List arrangeDutyEntityList = findHql(hql.toString(),userArrangeDetailEntityList.get(l).getShiftid()); if(arrangeDutyEntityList.get(0).getDutyType().equals(Globals.DUTYTYPE_zhiban)||arrangeDutyEntityList.get(0).getDutyType().equals(Globals.DUTYTYPE_jiaban)){ //值班操作删除时把值班班次改为休息 this.doUpdateUserArrangeDetail(userArrangeDetailEntityList.get(l)); } } } } } return j; }*/ /*@Override public AjaxJson deleteUserArrangeDetail(OnDutyOperateEntity onDutyOperate,String pid){ AjaxJson j = new AjaxJson(); String userId=onDutyOperate.getUserid(); String yearmonth=onDutyOperate.getYearmonth(); if(userId!=null&&userId.length()>0){ String[] userIdArr=userId.split(","); for (int k = 0; k < userIdArr.length; k++) { //根据用户员工id查询项目排班详细表数据t_bus_projarrange_detail StringBuffer hql = new StringBuffer(" from ProjarrangeDetailEntity t where t.userid = ? and t.yearmonth= ? "); List projarrangeDetailEntityList = findHql(hql.toString(),userIdArr[k],yearmonth); for (int i = 0; i < projarrangeDetailEntityList.size(); i++) { //值班类型项目排班详细表的值班天数设为0 //加班类型项目排班详细表的超时加班要依次相减 projarrangeDetailEntityList.get(i).setOndutyDays(new BigDecimal("0")); this.saveOrUpdate(projarrangeDetailEntityList.get(i)); //根据项目排班详细表的主键id查询员工排班详情表t_bus_user_arrange_detail hql = new StringBuffer(" from UserArrangeDetailEntity t where t.projarrangeDetailid = ? "); List userArrangeDetailEntityList = findHql(hql.toString(),projarrangeDetailEntityList.get(i).getId()); for (int l = 0; l < userArrangeDetailEntityList.size(); l++) { hql = new StringBuffer(" from ArrangeDutyEntity t where t.id = ? "); List arrangeDutyEntityList = findHql(hql.toString(),userArrangeDetailEntityList.get(l).getShiftid()); if(arrangeDutyEntityList.get(0).getDutyType().equals(Globals.DUTYTYPE_zhiban)||arrangeDutyEntityList.get(0).getDutyType().equals(Globals.DUTYTYPE_jiaban)){ //值班操作删除时把值班班次改为休息 this.doUpdateUserArrangeDetail(userArrangeDetailEntityList.get(l)); } } } } } return j; }*/ /** * 值班操作删除时把值班班次改为休息 * 更新员工排班详情表 * * @param ids * @return */ @Override public AjaxJson doUpdateUserArrangeDetail(UserArrangeDetailEntity userArrangeDetail) { String message = null; AjaxJson j = new AjaxJson(); message = "员工排班详情更新成功"; UserArrangeDetailEntity t = get(UserArrangeDetailEntity.class, userArrangeDetail.getId()); try { //拼接班次为休息的id userArrangeDetail.setShiftid(arrangeDutyService.getDUTYTYPE_xiuxiId()); MyBeanUtils.copyBeanNotNull2Bean(userArrangeDetail, t); this.saveOrUpdate(t); systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO); } catch (Exception e) { e.printStackTrace(); message = "员工排班详情更新失败"; throw new BusinessException(e.getMessage()); } j.setMsg(message); return j; } }