You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
414 lines
21 KiB
Java
414 lines
21 KiB
Java
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<Map<String,Object>> {
|
|
|
|
@Override
|
|
public Map<String, Object> execute(Command<Map<String, Object>> targetCommand) {
|
|
|
|
//获取到被代理对象
|
|
GetMeetingCalendarCmd getMeetingCalendarCmd = (GetMeetingCalendarCmd)targetCommand;
|
|
//获取被代理对象的参数
|
|
Map<String, Object> params = getMeetingCalendarCmd.getParams();
|
|
//参数回写
|
|
//getCalendarListCmd.setParams(params);
|
|
//执行标准的业务处理
|
|
Map<String, Object> result = nextExecute(targetCommand);
|
|
//对返回值做加工处理
|
|
User user = getMeetingCalendarCmd.getUser();
|
|
|
|
result = getCalendarDatas(user,params);
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
public Map<String, Object> getCalendarDatas(User user, Map<String, Object> 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<String> it = mobileCalendarInfoSet.iterator();
|
|
Map<String,List<String>> holidayMap = WorkPlanUtil.getHoliday(user,beginDate,endDate);
|
|
List<String> workList = holidayMap.get("workdays");
|
|
List<String> 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<day2-day1+1;i++){
|
|
calendar.setTime(fDate);
|
|
calendar.add(Calendar.DAY_OF_YEAR,i);
|
|
set.add(DateFormatUtils.format(calendar.getTime(),"yyyy-MM-dd"));
|
|
}
|
|
}
|
|
}catch(Exception e){
|
|
e.printStackTrace();
|
|
new BaseBean().writeLog("会议手机日历信息转换日期失败,失败信息:"+e.getMessage());
|
|
}
|
|
}
|
|
}
|