package com.customization.meeting; import com.api.meeting.util.PageUidFactory; import com.api.workplan.util.TimeZoneCastUtil; import com.cloudstore.dev.api.util.Util_TableMap; import com.engine.core.cfg.annotation.CommandDynamicProxy; import com.engine.core.interceptor.AbstractCommandProxy; import com.engine.core.interceptor.Command; import com.engine.meeting.cmd.calendar.GetCalendarListCmd; import com.engine.meeting.cmd.calendar.GetMeetingCalendarCmd; import com.engine.workplan.util.WorkPlanUtil; import org.apache.commons.lang.time.DateFormatUtils; import weaver.conn.RecordSet; import weaver.general.BaseBean; import weaver.general.PageIdConst; import weaver.general.Util; import weaver.hrm.User; import weaver.meeting.Maint.MeetingRoomComInfo; import weaver.meeting.MeetingShareUtil; import weaver.meeting.MeetingUtil; import weaver.meeting.defined.MeetingFieldComInfo; import weaver.systeminfo.SystemEnv; import java.text.SimpleDateFormat; import java.util.*; /** * @Classname CustomGetCalendarListCmd * @Description TODO() * @Author wanxq * @Date 2019-09-04 15:52 **/ @CommandDynamicProxy(target = GetMeetingCalendarCmd.class, desc="修改会议状态") public class CustomGetMeetingCalendarCmd extends AbstractCommandProxy> { @Override public Map execute(Command> targetCommand) { //获取到被代理对象 GetMeetingCalendarCmd getMeetingCalendarCmd = (GetMeetingCalendarCmd)targetCommand; //获取被代理对象的参数 Map params = getMeetingCalendarCmd.getParams(); //参数回写 //getCalendarListCmd.setParams(params); //执行标准的业务处理 Map result = nextExecute(targetCommand); //对返回值做加工处理 User user = getMeetingCalendarCmd.getUser(); result = getCalendarDatas(user,params); return result; } public Map getCalendarDatas(User user, Map params) { String selectUser = Util.null2String(params.get("selectUser")); //被选择用户Id String selectDate = Util.null2String(params.get("selectdate")); //被选择日期 String meetingType = Util.null2String(params.get("meetingType")); //会议的进行状态 //默认显示月会议,,显示天会议的情景是手机端点击日历中的月的时候 int viewType = Util.getIntValue((String)params.get("viewType"),3); //手机端会议日历的默认模式 boolean ismobile = Util.null2String(params.get("ismobile")).equals("1")?true:false; //在ismobile的情况下isCalendar代表是返回日历的月/周的日历信息 还是返回日历中的列表 boolean isCalendar = Util.null2String(params.get("isCalendar")).equals("1")?true:false; Calendar selectCalendar = Calendar.getInstance(); //用于显示的日期 Calendar currntCalendar = Calendar.getInstance(); int offsetDays = 0; //相对显示显示第一天的偏移天数 String beginDate = ""; String endDate = ""; String beginYear = ""; String beginMonth = ""; String beginDay = ""; String endYear = ""; String endMonth = ""; String endDay = ""; //参数传递 String userId = String.valueOf(user.getUID()); //当前用户Id SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm") ; Calendar calendar = Calendar.getInstance() ; String currenttime = SDF.format(calendar.getTime()) ; if ("".equals(selectUser) || userId.equals(selectUser)) { selectUser = userId; } selectUser = selectUser.replaceAll(",", ""); String allUser= MeetingShareUtil.getAllUser(user); if(viewType == 1 && ismobile && !"".equals(selectDate)){ beginDate = selectDate; endDate = selectDate; }else{ if (!"".equals(selectDate)) //当选择日期 { int selectYear = Util.getIntValue(selectDate.substring(0, 4)); //被选择年 int selectMonth = Util.getIntValue(selectDate.substring( 5, 7)) - 1; //被选择月 int selectDay = Util.getIntValue(selectDate.substring(8, 10)); //被选择日 selectCalendar.set(selectYear, selectMonth, selectDay); } String selectDayOfMonth = Util.add0((selectCalendar .get(Calendar.DAY_OF_MONTH)), 2); //日 //月显示 selectCalendar.set(Calendar.DATE, 1); //设置为月第一天 int offsetDayOfWeek = selectCalendar.get(Calendar.DAY_OF_WEEK) - 1; offsetDays = Integer.parseInt(selectDayOfMonth) - 1 + offsetDayOfWeek; selectCalendar.add(Calendar.DAY_OF_WEEK, -1 * offsetDayOfWeek); //设置为月首日那周的第一天 beginYear = Util.add0(selectCalendar.get(Calendar.YEAR), 4); //年 beginMonth = Util.add0(selectCalendar.get(Calendar.MONTH) + 1, 2); // 月 beginDay = Util.add0(selectCalendar.get(Calendar.DAY_OF_MONTH), 2); //日 long startDayTime = selectCalendar.getTimeInMillis(); beginDate = beginYear + "-" + beginMonth + "-" + beginDay; //月计划显示 selectCalendar.add(Calendar.DATE, offsetDays); selectCalendar.set(Calendar.DATE, 1); //设置为月第一天 selectCalendar.add(Calendar.MONTH, 1); selectCalendar.add(Calendar.DATE, -1); int offsetDayOfWeekEnd = 7 - selectCalendar .get(Calendar.DAY_OF_WEEK); selectCalendar.add(Calendar.DAY_OF_WEEK, offsetDayOfWeekEnd); //设置为月末日那周的最后一天 long endDayTime = selectCalendar.getTimeInMillis(); //前端日历固定显示6行 计算当前数据在日历中行数 如果不足6行则进行补充 int d=(int)((endDayTime-startDayTime)/(24*60*60*1000)+1); int line = d/7; if(line<6){ selectCalendar.add(Calendar.DATE, (6-line)*7); } endYear = Util.add0(selectCalendar.get(Calendar.YEAR), 4); //年 endMonth = Util.add0(selectCalendar.get(Calendar.MONTH) + 1, 2); // 月 endDay = Util.add0(selectCalendar.get(Calendar.DAY_OF_MONTH), 2); //日 endDate = endYear + "-" + endMonth + "-" + endDay; } StringBuffer sqlStringBuffer = new StringBuffer(); sqlStringBuffer .append("SELECT DISTINCT t1.id,t1.name,t1.address,t1.customizeAddress,t1.caller,t1.contacter,t1.begindate,t1.begintime,t1.enddate,t1.endtime,t1.meetingstatus," + " t1.endtime,t1.remindTypeNew,t1.remindBeforeStart,t1.remindBeforeEnd,t1.remindTimesBeforeStart,t1.remindTimesBeforeEnd,t1.isdecision, " + " t1.remindImmediately,t1.remindHoursBeforeStart,t1.remindHoursBeforeEnd,t3.status as status ") .append(" FROM Meeting_ShareDetail t2, Meeting t1 left join Meeting_View_Status t3 on t3.meetingId = t1.id and t3.userId = " + userId); sqlStringBuffer.append(" WHERE "); sqlStringBuffer.append(" (t1.id = t2.meetingId) and t1.repeatType = 0 AND t2.shareLevel <> 5 AND t2.shareType = 5 AND "); sqlStringBuffer.append(" ((t1.meetingStatus in (1, 3) and t2.userId in ( " + allUser + ") AND t2.shareLevel in (1,4))" ); sqlStringBuffer.append(" OR (t1.meetingStatus = 0 AND t1.creater in ( " + allUser + ") AND (t2.userId in ( " + allUser + ")) )"); sqlStringBuffer.append(" OR (t1.meetingStatus IN (2, 4) AND (t2.userId in ( " + allUser + ")))) "); if(!userId.equals(selectUser)){ //人员 sqlStringBuffer.append(" and ( exists ( select 1 from Meeting_Member2 where t1.id = Meeting_Member2.meetingid and Meeting_Member2.membertype = 1 and Meeting_Member2.memberid = "+ selectUser +") or t1.caller = "+ selectUser +" or t1.contacter = "+ selectUser +") "); } //取消的会议不在日历中显示 //sqlStringBuffer.append(" and (t1.cancel <> 1 or t1.cancel is null) "); sqlStringBuffer.append(TimeZoneCastUtil.getDateTimeSql(6,beginDate,endDate,"t1")); String btimeStr = "t1.beginDate+' '+t1.begintime "; String etimeStr = "t1.endDate+' '+t1.endtime "; RecordSet recordSet = new RecordSet(); Map meetingRemind=new HashMap(); recordSet.execute("SELECT * FROM meeting_remind_type"); while(recordSet.next()){ meetingRemind.put(recordSet.getString("id"),recordSet.getString("label").equals("")?recordSet.getString("name") :SystemEnv.getHtmlLabelName(recordSet.getInt("label"),user.getLanguage())); } if ((recordSet.getDBType()).equals("oracle")) { btimeStr = "t1.beginDate||' '||t1.begintime "; etimeStr = "t1.endDate||' '||t1.endtime "; }else if((recordSet.getDBType()).equals("mysql")){ btimeStr = "concat(t1.beginDate,' ',t1.begintime) "; etimeStr = "concat(t1.endDate,' ',t1.endtime) "; } if("1".equals(meetingType)){ sqlStringBuffer.append(" AND ("+etimeStr+" < '"+ currenttime + "' "); sqlStringBuffer.append(" or t1.isdecision = 2 ) "); } else if("2".equals(meetingType)){ sqlStringBuffer.append(" AND ("+btimeStr+" <= '"+ currenttime + "' "); sqlStringBuffer.append(" AND "+etimeStr+" >= '"+ currenttime + "' and t1.isdecision <> 2) "); } else if("3".equals(meetingType)){ sqlStringBuffer.append(" AND (("+btimeStr+" > '"+ currenttime + "' and t1.isdecision <> 2) )"); } sqlStringBuffer.append(MeetingUtil.getSecretSql(user,"t1.")); sqlStringBuffer.append(" order by t1.beginDate ,t1.begintime, t1.id "); recordSet.executeSql(sqlStringBuffer.toString()); Map result = new HashMap(); List eventslist = new ArrayList(); List mobileEventslist = new ArrayList(); //处理日历信息 Set mobileCalendarInfoSet = new HashSet(); MeetingFieldComInfo meetingFieldComInfo = new MeetingFieldComInfo(); SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); SimpleDateFormat format3 = new SimpleDateFormat("HH:mm"); int meetingstatus = 0; while (recordSet.next()) { try { String changeToB[] = {}; String changeToE[] = {}; /* ----------新增日期转换 start ----------------*/ String changeToBD = recordSet.getString("begindate").trim(); String changeToBT = recordSet.getString("begintime").trim(); String changeToED = recordSet.getString("enddate").trim(); String changeToET = recordSet.getString("endtime").trim(); changeToB = TimeZoneCastUtil.FormatDateLocal(changeToBD + " " + changeToBT,0); changeToE = TimeZoneCastUtil.FormatDateLocal(changeToED + " " + changeToET,1); changeToBD = changeToB[0]; changeToBT = changeToB[1]; changeToED = changeToE[0]; changeToET = changeToE[1]; /* ----------新增日期转换 end ----------------*/ boolean isAllDay = false; Map event = new HashMap(); //处理日历列表数据 Map mobileEvent = new HashMap(); meetingstatus = Util.getIntValue(recordSet.getString("meetingstatus"), 0); String isdecision=recordSet.getString("isdecision"); event.put("id",recordSet.getString("id")); String tmpname=""; if(meetingstatus == 0) { tmpname="("+ SystemEnv.getHtmlLabelName(220, user.getLanguage())+")"+recordSet.getString("name"); }else if(meetingstatus==1){ tmpname="("+SystemEnv.getHtmlLabelName(2242, user.getLanguage())+")"+recordSet.getString("name"); }else if(meetingstatus==3){ tmpname="("+SystemEnv.getHtmlLabelName(236, user.getLanguage())+")"+recordSet.getString("name"); }else { tmpname=recordSet.getString("name"); } event.put("name", tmpname); event.put("begindate", changeToBD); event.put("begintime", changeToBT); Date startDate = format2.parse(recordSet.getString("begindate").trim()+ " " + recordSet.getString("begintime").trim()); if (format2.parse(beginDate + " 00:00").getTime() - startDate.getTime() > 0) { beginDate = recordSet.getString("begindate"); } String endTime = recordSet.getString("endtime"); if ("".equals(endTime.trim())) { endTime = "23:59"; } Date endDate2 =endDate2 = format2.parse(recordSet.getString("enddate")+ " " + endTime); if(changeToED.compareTo(changeToBD) > 0){ isAllDay = true; } event.put("enddate",changeToED); event.put("endtime", changeToET); if("2".equals(isdecision)){ event.put("status","0");//完成 } else { if(startDate.getTime() > currntCalendar.getTime().getTime()){ event.put("status","2");//未开始 } else if(endDate2 != null && currntCalendar.getTime().getTime() <= endDate2.getTime()){ event.put("status","1");//进行中 } else { event.put("status","0"); } } eventslist.add(event); if(ismobile && !isCalendar){ mobileEvent.putAll(event); mobileEvent.put("address",recordSet.getString("address")); MeetingRoomComInfo mrci = new MeetingRoomComInfo(); if(recordSet.getString("address").equals("")){ mobileEvent.put("addressName",recordSet.getString("customizeAddress")); mobileEvent.put("address",recordSet.getString("customizeAddress")); }else{ mobileEvent.put("addressName",mrci.getMeetingRoomInfoname(recordSet.getString("address"))); } mobileEvent.put("color",event.get(7)); mobileEvent.put("remindImmediately",recordSet.getString("remindImmediately")); mobileEvent.put("remindBeforeEnd",recordSet.getString("remindBeforeEnd")); mobileEvent.put("remindBeforeStart",recordSet.getString("remindBeforeStart")); mobileEvent.put("remindDateBeforeEnd",recordSet.getString("remindHoursBeforeEnd")); mobileEvent.put("remindDateBeforeStart",recordSet.getString("remindHoursBeforeStart")); mobileEvent.put("remindTimeBeforeEnd",recordSet.getString("remindTimesBeforeEnd")); mobileEvent.put("remindTimeBeforeStart",recordSet.getString("remindTimesBeforeStart")); mobileEvent.put("remindType",recordSet.getString("remindTypeNew")); String remindTypeName = ""; String remindImmediately = ""; if(recordSet.getString("remindImmediately").equals("1")){ remindImmediately = SystemEnv.getHtmlLabelName(Util.getIntValue(meetingFieldComInfo.getLabel("22")),user.getLanguage()); } mobileEvent.put("remindImmediately",remindImmediately); String remindType = recordSet.getString("remindTypeNew"); if(!remindType.equals("")){ String remindTypeArr[] = remindType.split(","); for (int i = 0; i < remindTypeArr.length; i++) { if(meetingRemind.containsKey(remindTypeArr[i])){ remindTypeName += remindTypeName.equals("")?meetingRemind.get(remindTypeArr[i]):","+meetingRemind.get(remindTypeArr[i]); } } } mobileEvent.put("remindTypeName",remindTypeName); mobileEventslist.add(mobileEvent); }else if(ismobile && isCalendar){ betweenDate(recordSet.getString("begindate"),recordSet.getString("enddate"),mobileCalendarInfoSet); } } catch (Exception e) { e.printStackTrace(); } } if(ismobile && !isCalendar){ result.put("mobileEvents", mobileEventslist); }else if(ismobile && isCalendar){ List mobileCalendarEventList = new ArrayList(); Iterator it = mobileCalendarInfoSet.iterator(); Map> holidayMap = WorkPlanUtil.getHoliday(user,beginDate,endDate); List workList = holidayMap.get("workdays"); List holidayList = holidayMap.get("holidays"); Map event2 = new HashMap(); while (it.hasNext()) { Map workSign = new HashMap(); workSign.put("text",SystemEnv.getHtmlLabelName(125807, user.getLanguage())); workSign.put("color","#FF312B"); Map holidaySign = new HashMap(); holidaySign.put("text",SystemEnv.getHtmlLabelName(125806, user.getLanguage())); holidaySign.put("color","#43BC54"); Map event = new HashMap(); event.put("info",true); String date = it.next(); if(workList !=null && workList.contains(date)){ event.put("sign",workSign); workList.remove(date); }else if(holidayList != null && holidayList.contains(date)){ event.put("sign",holidaySign); holidayList.remove(date); } event2.put(date,event); } if(workList !=null && workList.size()>0){ for(String work : workList){ Map workSign = new HashMap(); workSign.put("text",SystemEnv.getHtmlLabelName(125807, user.getLanguage())); workSign.put("color","#FF312B"); Map event = new HashMap(); event.put("sign",workSign); event2.put(work,event); } } if(holidayList != null && holidayList.size()>0){ for(String holiday : holidayList){ Map holidaySign = new HashMap(); holidaySign.put("text",SystemEnv.getHtmlLabelName(125806, user.getLanguage())); holidaySign.put("color","#43BC54"); Map event = new HashMap(); event.put("sign",holidaySign); event2.put(holiday,event); } } result.put("mobileEvents", event2); }else{ result.put("events", eventslist); } result.put("issort", ""+true); result.put("start", beginDate + " 00:00"); result.put("end", endDate + " 23:59"); result.put("error", null); return result; } public void betweenDate(String beginDate, String endDate, Set set){ try{ if(endDate.equals("")){ endDate = beginDate; } if(beginDate.equals("") && endDate.equals("")){ return; } if(beginDate.equals(endDate)){ set.add(beginDate); }else{ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Date fDate=sdf.parse(beginDate); Date oDate=sdf.parse(endDate); Calendar calendar = Calendar.getInstance(); calendar.setTime(fDate); int day1 = calendar.get(Calendar.DAY_OF_YEAR); calendar.setTime(oDate); int day2 = calendar.get(Calendar.DAY_OF_YEAR); for(int i = 0 ;i