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.
haojing/classbean/com/customization/meeting/CustomGetMeetingCalendarCmd...

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());
}
}
}