Просмотр исходного кода

考勤打卡策略相关修改

o2lee 5 лет назад
Родитель
Сommit
8b49fd0dc6
14 измененных файлов с 265 добавлено и 32 удалено
  1. 2 12
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/QueuePersonAttendanceDetailAnalyse.java
  2. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/ThisApplication.java
  3. 148 0
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionReAnalyseWithFilter.java
  4. 14 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionReciveAttendanceMobile.java
  5. 23 0
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailAction.java
  6. 3 0
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ExceptionQueryParameterEmpty.java
  7. 5 0
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/ActionDelete.java
  8. 5 0
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/ActionDeleteByWfDocId.java
  9. 5 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/ActionSave.java
  10. 5 0
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/BaseAction.java
  11. 1 12
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailAnalyseService.java
  12. 23 0
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceSelfHolidayService.java
  13. 9 0
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceSelfHolidayServiceAdv.java
  14. 21 5
      o2server/x_calendar_assemble_control/src/main/webapp/describe/sources/com/x/calendar/assemble/control/service/CalendarService.java

+ 2 - 12
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/QueuePersonAttendanceDetailAnalyse.java

@@ -34,19 +34,9 @@ public class QueuePersonAttendanceDetailAnalyse extends AbstractQueue<String> {
         if( record != null ){
             logger.debug("system try to analyse attendance detail for person, Id:" + record.getId() );
 
-            Ehcache cache = ApplicationCache.instance().getCache( AttendanceStatisticalCycle.class);
-            String cacheKey = ApplicationCache.concreteCacheKey( "map#all" );
-            Element element = cache.get(cacheKey);
             try {
-
-                Map<String, Map<String, List<AttendanceStatisticalCycle>>> statisticalCycleMap = null;
-                if ((null != element) && (null != element.getObjectValue())) {
-                    statisticalCycleMap = (Map<String, Map<String, List<AttendanceStatisticalCycle>>>) element.getObjectValue();
-                }else{
-                    statisticalCycleMap = statisticalCycleServiceAdv.getCycleMapFormAllCycles( false );
-                }
-
-                List<AttendanceWorkDayConfig> workDayConfigList = attendanceWorkDayConfigServiceAdv.listAll();
+                List<AttendanceWorkDayConfig> workDayConfigList = attendanceWorkDayConfigServiceAdv.getAllWorkDayConfigWithCache( false );
+                Map<String, Map<String, List<AttendanceStatisticalCycle>>> statisticalCycleMap = statisticalCycleServiceAdv.getAllStatisticalCycleMapWithCache( false );
 
                 detailAnalyseServiceAdv.analyseAttendanceDetail( record, workDayConfigList, statisticalCycleMap, false );
                 logger.debug( "attendance detail analyse completed.person:" + record.getEmpName() + ", date:" + record.getRecordDateString());

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/ThisApplication.java

@@ -51,7 +51,7 @@ public class ThisApplication {
 			}
 
 			context.schedule(AttendanceStatisticTask.class, "0 0 0/4 * * ?");
-			context.schedule(MobileRecordAnalyseTask.class, "0 0/10 * * * ?");
+			context.schedule(MobileRecordAnalyseTask.class, "0 0 * * * ?");
 
 		} catch (Exception e) {
 			e.printStackTrace();

+ 148 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionReAnalyseWithFilter.java

@@ -0,0 +1,148 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.google.gson.JsonElement;
+import com.x.attendance.assemble.control.ExceptionWrapInConvert;
+import com.x.attendance.assemble.control.ThisApplication;
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.gson.GsonPropertyObject;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import org.codehaus.plexus.util.StringUtils;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+public class ActionReAnalyseWithFilter extends BaseAction {
+
+	private static  Logger logger = LoggerFactory.getLogger(ActionReAnalyseWithFilter.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		EffectivePerson currentPerson = this.effectivePerson(request);
+		String q_empName = null;
+		String q_year = null;
+		String q_month = null;
+		List<String> ids = null;
+		Wi wrapIn = null;
+		Wo wo = new Wo();
+		Boolean check = true;
+
+		try {
+			wrapIn = this.convertToWrapIn(jsonElement, Wi.class);
+		} catch (Exception e) {
+			check = false;
+			Exception exception = new ExceptionWrapInConvert(e, jsonElement);
+			result.error(exception);
+			logger.error(e, currentPerson, request, null);
+		}
+
+		if (check) {
+			if (wrapIn == null) {
+				wrapIn = new Wi();
+			}
+			q_empName = wrapIn.getQ_empName();
+			q_year = wrapIn.getQ_year();
+			q_month = wrapIn.getQ_month();
+		}
+
+		if (check) {
+			if(StringUtils.isEmpty( q_year )){
+				check = false;
+				Exception exception = new ExceptionQueryParameterEmpty("查询打卡信息年份不可以为空");
+				result.error(exception);
+			}
+		}
+		if (check) {
+			if(StringUtils.isEmpty( q_month )){
+				check = false;
+				Exception exception = new ExceptionQueryParameterEmpty("查询打卡信息月份不可以为空");
+				result.error(exception);
+			}
+		}
+
+		if (check) {
+			if(StringUtils.isEmpty( q_empName )){
+				q_empName = effectivePerson.getDistinguishedName();
+			}
+		}
+
+		if (check) {
+			try {
+				ids = attendanceDetailServiceAdv.listUserAttendanceDetailByYearAndMonth( q_empName, q_year, q_month );
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ExceptionAttendanceDetailProcess(e,
+						"系统在根据员工姓名,年份月份查询打卡详细信息ID列表时发生异常!"
+						+ "Name:" + q_empName + ", Year:" + q_year + ", Month:" + q_month);
+				result.error(exception);
+				logger.error(e, currentPerson, request, null);
+			}
+		}
+		if (check) {
+			if (ListTools.isNotEmpty( ids )) {
+
+				if( ids.size() > 100000 ){
+					Exception exception = new ExceptionAttendanceDetailProcess("需要重新分析的打卡记录条目数量过多,请缩小重新分析的信息范围(一次不超过10万条)。需要分析的打卡信息数量:" + ids.size() );
+					result.error(exception);
+				}else{
+					try {
+						int seq = 0;
+						for( String id : ids){
+							seq++;
+							ThisApplication.detailAnalyseQueue.send( id );
+						}
+					} catch (Exception e) {
+						Exception exception = new ExceptionAttendanceDetailProcess(e,"将需要重新分析的打卡记录发送到分析队列时发生异常!");
+						result.error(exception);
+						logger.error(e, currentPerson, request, null);
+					}
+				}
+
+				result.setCount(Long.parseLong(ids.size() + ""));
+			}
+		}
+		result.setData(wo);
+		return result;
+	}
+
+	public static class Wi extends GsonPropertyObject {
+
+		@FieldDescribe( "用于查询的人员:DistinguishedName." )
+		private String q_empName;
+
+		@FieldDescribe( "查询的年份." )
+		private String q_year;
+
+		@FieldDescribe( "查询的月份." )
+		private String q_month;
+
+		public String getQ_empName() {
+			return q_empName;
+		}
+
+		public String getQ_year() {
+			return q_year;
+		}
+
+		public String getQ_month() {
+			return q_month;
+		}
+
+		public void setQ_empName(String q_empName) {
+			this.q_empName = q_empName;
+		}
+
+		public void setQ_year(String q_year) {
+			this.q_year = q_year;
+		}
+
+		public void setQ_month(String q_month) {
+			this.q_month = q_month;
+		}
+	}
+
+	public static class Wo{
+	}
+}

+ 14 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionReciveAttendanceMobile.java

@@ -2,8 +2,9 @@ package com.x.attendance.assemble.control.jaxrs.attendancedetail;
 
 import java.util.Date;
 
-import javax.persistence.Column;
 import javax.servlet.http.HttpServletRequest;
+
+import com.x.base.core.project.organization.Person;
 import org.apache.commons.lang3.StringUtils;
 
 import com.google.gson.JsonElement;
@@ -56,6 +57,18 @@ public class ActionReciveAttendanceMobile extends BaseAction {
 		}
 
 		if( check ){
+			if( StringUtils.isEmpty( wrapIn.getEmpNo() )){
+				Person person = userManagerService.getPersonObjByName( currentPerson.getDistinguishedName() );
+				if( person != null ){
+					if( StringUtils.isNotEmpty( person.getEmployee() )){
+						attendanceDetailMobile.setEmpNo(person.getEmployee());
+					}else{
+						attendanceDetailMobile.setEmpNo(currentPerson.getDistinguishedName());
+					}
+				}
+			}else{
+				attendanceDetailMobile.setEmpNo( wrapIn.getEmpNo() );
+			}
 			attendanceDetailMobile.setEmpName( currentPerson.getDistinguishedName() );
 			attendanceDetailMobile.setCheckin_time(wrapIn.getCheckin_time());
 			attendanceDetailMobile.setCheckin_type(wrapIn.getCheckin_type());

+ 23 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailAction.java

@@ -107,6 +107,29 @@ public class AttendanceDetailAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
+	@JaxrsMethodDescribe(value = "重新分析指定年月的打卡数据", action = ActionReAnalyseWithFilter.class)
+	@PUT
+	@Path("analyse/redo")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void reAnalyseDetail(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, JsonElement jsonElement) {
+		ActionResult<ActionReAnalyseWithFilter.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		Boolean check = true;
+
+		if (check) {
+			try {
+				result = new ActionReAnalyseWithFilter().execute(request, effectivePerson, jsonElement);
+			} catch (Exception e) {
+				result = new ActionResult<>();
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "重新分析指定年月的打卡数据时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
 	@JaxrsMethodDescribe(value = "获取用户指定年月的打卡数据列表", action = ActionListWithEmployee.class)
 	@PUT
 	@Path("filter/list/user")

+ 3 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ExceptionQueryParameterEmpty.java

@@ -9,4 +9,7 @@ class ExceptionQueryParameterEmpty extends PromptException {
 	public ExceptionQueryParameterEmpty() {
 		super("员工号,员工姓名和查询日期不能全部为空, 无法继续进行查询操作。" );
 	}
+	public ExceptionQueryParameterEmpty(String message) {
+		super(message );
+	}
 }

+ 5 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/ActionDelete.java

@@ -11,6 +11,7 @@ import com.x.attendance.entity.AttendanceStatisticalCycle;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.entity.annotation.CheckRemoveType;
+import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.jaxrs.WoId;
@@ -36,6 +37,10 @@ public class ActionDelete extends BaseAction {
 				emc.beginTransaction( AttendanceSelfHoliday.class );
 				emc.remove( attendanceSelfHoliday, CheckRemoveType.all );
 				emc.commit();
+
+				//清除缓存
+				ApplicationCache.notify( AttendanceSelfHoliday.class );
+
 				result.setData( new Wo(id) );
 
 				//根据员工休假数据来记录与这条数据相关的统计需求记录

+ 5 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/ActionDeleteByWfDocId.java

@@ -10,6 +10,7 @@ import com.x.attendance.entity.AttendanceSelfHoliday;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.entity.annotation.CheckRemoveType;
+import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.jaxrs.WoId;
@@ -43,6 +44,10 @@ public class ActionDeleteByWfDocId extends BaseAction {
 						emc.beginTransaction(AttendanceSelfHoliday.class);
 						emc.remove(attendanceSelfHoliday, CheckRemoveType.all);
 						emc.commit();
+
+						//清除缓存
+						ApplicationCache.notify( AttendanceSelfHoliday.class );
+
 						logger.debug( effectivePerson, ">>>>>>>>>>System delete attendanceSelfHoliday success......");
 
 						// 应该只需要重新分析该用户在请假期间已经存在的打卡数据即可

+ 5 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/ActionSave.java

@@ -9,6 +9,7 @@ import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.entity.annotation.CheckPersistType;
 import com.x.base.core.entity.annotation.CheckRemoveType;
+import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.jaxrs.WoId;
@@ -96,7 +97,10 @@ public class ActionSave extends BaseAction {
 					}
 					emc.commit();
 					result.setData( new Wo( attendanceSelfHoliday.getId() ) );
-					
+
+					//清除缓存
+					ApplicationCache.notify( AttendanceSelfHoliday.class );
+
 					//根据员工休假数据来记录与这条数据相关的统计需求记录
 					//new AttendanceDetailAnalyseService().recordStatisticRequireLog( attendanceSelfHoliday );
 					logger.debug("休假数据有变动,对该员工的该请假时间内的所有打卡记录进行分析......" );

+ 5 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/BaseAction.java

@@ -4,10 +4,15 @@ import com.x.attendance.assemble.control.service.AttendanceDetailAnalyseServiceA
 import com.x.attendance.assemble.control.service.AttendanceSelfHolidayServiceAdv;
 import com.x.attendance.assemble.control.service.AttendanceStatisticalCycleServiceAdv;
 import com.x.attendance.assemble.control.service.UserManagerService;
+import com.x.attendance.entity.AttendanceSelfHoliday;
+import com.x.attendance.entity.AttendanceStatisticalCycle;
+import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.jaxrs.StandardJaxrsAction;
+import net.sf.ehcache.Ehcache;
 
 public class BaseAction extends StandardJaxrsAction{
 
+	protected Ehcache cache = ApplicationCache.instance().getCache( AttendanceSelfHoliday.class);
 	protected UserManagerService userManagerService = new UserManagerService();
 	protected AttendanceStatisticalCycleServiceAdv attendanceStatisticCycleServiceAdv = new AttendanceStatisticalCycleServiceAdv();
 	protected AttendanceDetailAnalyseServiceAdv attendanceDetailAnalyseServiceAdv = new AttendanceDetailAnalyseServiceAdv();

+ 1 - 12
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailAnalyseService.java

@@ -233,20 +233,9 @@ public class AttendanceDetailAnalyseService {
 		AttendanceScheduleSetting scheduleSetting = null;
 		List<AttendanceSelfHoliday> selfHolidayList = null;
 		if( detail != null ){
-			try{
-				//查询员工休假记录
-				ids_temp = attendanceSelfHolidayService.getByPersonName( emc, detail.getEmpName() );
-				if( ids_temp != null && !ids_temp.isEmpty() ) {
-					selfHolidayList = attendanceSelfHolidayService.list( emc, ids_temp );
-				}
-			}catch( Exception e ){
-				logger.warn( "system list attendance self holiday info ids with employee name got an exception.empname:" + detail.getEmpName() );
-				logger.error(e);
-			}
-
+			selfHolidayList = attendanceSelfHolidayService.listWithPersonFromCache(emc, detail.getEmpName(), false );
 			//查询用户匹配的排班配置
 			scheduleSetting = attendanceScheduleSettingService.getAttendanceScheduleSettingWithPerson( detail.getEmpName(), debugger );
-			
 			return analyseAttendanceDetail( emc, detail, scheduleSetting, selfHolidayList, workDayConfigList, statisticalCycleMap, debugger );
 
 		}else{

+ 23 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceSelfHolidayService.java

@@ -2,13 +2,20 @@ package com.x.attendance.assemble.control.service;
 
 import com.x.attendance.assemble.control.Business;
 import com.x.attendance.entity.AttendanceSelfHoliday;
+import com.x.attendance.entity.AttendanceStatisticalCycle;
 import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.project.cache.ApplicationCache;
+import net.sf.ehcache.Ehcache;
+import net.sf.ehcache.Element;
 
 import java.util.List;
+import java.util.Map;
 
 
 public class AttendanceSelfHolidayService {
 
+	private Ehcache cache_AttendanceSelfHoliday = ApplicationCache.instance().getCache( AttendanceSelfHoliday.class);
+
 	public AttendanceSelfHoliday get( EntityManagerContainer emc, String id ) throws Exception {
 		if( id == null || id.isEmpty() ){
 			return null;
@@ -29,6 +36,20 @@ public class AttendanceSelfHolidayService {
 		return business.getAttendanceSelfHolidayFactory().listAll();
 	}
 
+	public List<AttendanceSelfHoliday> listWithPersonFromCache( EntityManagerContainer emc, String person, boolean debugger) throws Exception {
+		String cacheKey = ApplicationCache.concreteCacheKey( "list#" + person );
+		Element element = cache_AttendanceSelfHoliday.get(cacheKey);
+
+		if ((null != element) && (null != element.getObjectValue())) {
+			return (List<AttendanceSelfHoliday>) element.getObjectValue();
+		}else{
+			List<String> ids = getByPersonName( emc, person );
+			List<AttendanceSelfHoliday> list = list( emc, ids );
+			cache_AttendanceSelfHoliday.put(new Element( cacheKey, list ));
+			return list;
+		}
+	}
+
 	public List<String> getByPersonName(EntityManagerContainer emc, String personName) throws Exception {
 		Business business =  new Business( emc );
 		return business.getAttendanceSelfHolidayFactory().getByPersonName( personName );
@@ -38,4 +59,6 @@ public class AttendanceSelfHolidayService {
 		Business business = new Business(emc);
 		return business.getAttendanceSelfHolidayFactory().listWithBatchFlag( batchFlag );
 	}
+
+
 }

+ 9 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceSelfHolidayServiceAdv.java

@@ -41,6 +41,15 @@ public class AttendanceSelfHolidayServiceAdv {
 		}
 	}
 
+	public List<AttendanceSelfHoliday> listAllFromCache( String person, boolean debugger) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			return attendanceSelfHolidayService.listWithPersonFromCache(emc, person, debugger);
+		} catch ( Exception e ) {
+			throw e;
+		}
+
+	}
+
 	public List<AttendanceSelfHoliday> listWithBatchFlag( String batchFlag) throws Exception {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
 			return attendanceSelfHolidayService.listWithBatchFlag( emc, batchFlag );

+ 21 - 5
o2server/x_calendar_assemble_control/src/main/webapp/describe/sources/com/x/calendar/assemble/control/service/CalendarService.java

@@ -167,9 +167,9 @@ public class CalendarService {
 	public List<String> listWithCondition( EntityManagerContainer emc,  String name, String type, String source, String createor,
 			 List<String> inFilterCalendarIds, String personName, List<String> unitNames, List<String> groupNames ) throws Exception {
 		Business business =  new Business( emc );
-		//如果用户没有自己可管理的日历,则创建一个新的日历
+
+		//同步,避免前端的连续调用导致多条个人日历
 		List<String> ids = business.calendarFactory().listMyCalender( personName );
-		
 		if( ListTools.isEmpty( ids ) ) {
 			//创建一个自己的默认日历
 			Calendar calendar = new Calendar();
@@ -186,16 +186,32 @@ public class CalendarService {
 			calendar.setManageablePersonList( new ArrayList<>() );
 			calendar.setPublishablePersonList( new ArrayList<>() );
 			calendar.setViewablePersonList( new ArrayList<>() );
-			
+
 			addStringToList( personName, calendar.getManageablePersonList() );
 			addStringToList( personName, calendar.getPublishablePersonList() );
 			addStringToList( personName, calendar.getViewablePersonList() );
-			
+
+			queryForAddNewPersonalDefaultCalendar(emc, personName,calendar );
+
+		}
+		return business.calendarFactory().listWithCondition( name, type, source, createor, inFilterCalendarIds, personName, unitNames, groupNames );
+	}
+
+	/**
+	 * 同步方法,避免前端的连续调用导致多条个人日历信息
+	 * @param emc
+	 * @param personName
+	 * @param calendar
+	 * @throws Exception
+	 */
+	private synchronized void queryForAddNewPersonalDefaultCalendar(EntityManagerContainer emc, String personName, Calendar calendar) throws Exception {
+		Business business =  new Business( emc );
+		List<String> ids = business.calendarFactory().listMyCalender( personName );
+		if( ListTools.isEmpty( ids )){
 			emc.beginTransaction( Calendar.class );
 			emc.persist( calendar, CheckPersistType.all );
 			emc.commit();
 		}
-		return business.calendarFactory().listWithCondition( name, type, source, createor, inFilterCalendarIds, personName, unitNames, groupNames );
 	}
 
 	/**