caixiangyi пре 8 година
родитељ
комит
5a9cc7b2e7
100 измењених фајлова са 1907 додато и 967 уклоњено
  1. 1 1
      LICENSE
  2. 3 3
      x_attendance_assemble_control/.classpath
  3. 16 16
      x_attendance_assemble_control/jest/common.js
  4. 77 0
      x_attendance_assemble_control/jest/debug.js
  5. 35 90
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/common/date/DateOperation.java
  6. 0 2
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/common/excel/reader/Excel2003Reader.java
  7. 22 1
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/common/excel/reader/ExcelReaderUtil.java
  8. 6 3
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/common/excel/reader/UserModelEventListener.java
  9. 10 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/Business.java
  10. 6 14
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/ThisApplication.java
  11. 16 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/exception/PersonHasNoIdentityException.java
  12. 0 4
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceAppealInfoFactory.java
  13. 14 2
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailFactory.java
  14. 10 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailMobileFactory.java
  15. 70 71
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailStatisticFactory.java
  16. 0 5
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceEmployeeConfigFactory.java
  17. 0 6
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceImportFileInfoFactory.java
  18. 0 5
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceScheduleSettingFactory.java
  19. 0 4
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceSelfHolidayFactory.java
  20. 0 6
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceSettingFactory.java
  21. 0 1
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceStatisticRequireLogFactory.java
  22. 0 5
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceStatisticalCycleFactory.java
  23. 0 6
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceWorkDayConfigFactory.java
  24. 54 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceWorkPlaceFactory.java
  25. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/CompanyNamesEmptyException.java
  26. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/CycleMonthEmptyException.java
  27. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/CycleYearEmptyException.java
  28. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/DepartmentNamesEmptyException.java
  29. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/EmployeeNamesEmptyException.java
  30. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/OganizationNamesEmptyException.java
  31. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/RecordDateEmptyException.java
  32. 10 10
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticCompanyForDayFactory.java
  33. 5 5
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticCompanyForMonthFactory.java
  34. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticDateEmptyException.java
  35. 13 13
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticDepartmentForDayFactory.java
  36. 62 63
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticDepartmentForMonthFactory.java
  37. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticMonthEmptyException.java
  38. 41 41
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticPersonForMonthFactory.java
  39. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticYearEmptyException.java
  40. 2 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/ActionApplication.java
  41. 2 1
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/AttendanceJaxrsFilter.java
  42. 0 40
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/WrapOutMessage.java
  43. 50 50
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminAction.java
  44. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminDeleteException.java
  45. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminListAllException.java
  46. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminQueryByIdException.java
  47. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminSaveException.java
  48. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminWrapCopyException.java
  49. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/GetCurrentPersonCompanyNameException.java
  50. 13 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/WrapInConvertException.java
  51. 4 5
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/WrapInFilter.java
  52. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealArchiveException.java
  53. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealDeleteException.java
  54. 212 148
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealInfoAction.java
  55. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealNotExistsException.java
  56. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealProcessException.java
  57. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealQueryByIdException.java
  58. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealSaveException.java
  59. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealWrapCopyException.java
  60. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceDetailNotExistsException.java
  61. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceDetailQueryByIdException.java
  62. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/NotifyAttendanceAppealException.java
  63. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/PersonHasNoDepartmentException.java
  64. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/PersonHasNoIdenitityException.java
  65. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/QeuryDepartmentWithPersonException.java
  66. 13 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/WrapInConvertException.java
  67. 3 3
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/WrapInFilter.java
  68. 319 247
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailAction.java
  69. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailAnalyseException.java
  70. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailArchiveException.java
  71. 14 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailCheckAndReplenishException.java
  72. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailCycleMonthEmptyException.java
  73. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailCycleYearEmptyException.java
  74. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailDeleteException.java
  75. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailEmployeeNameEmptyException.java
  76. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailIdEmptyException.java
  77. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailImportFileIdEmptyException.java
  78. 14 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailListByCompanyYearMonthException.java
  79. 14 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailListByDepartmentYearMonthException.java
  80. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailListByIdsException.java
  81. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailListByImportFileIdException.java
  82. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailListByNameYearMonthException.java
  83. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailListNeedAnalyseException.java
  84. 92 96
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileAction.java
  85. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileCountException.java
  86. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileDeleteException.java
  87. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileEndDateFormatException.java
  88. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileIdEmptyException.java
  89. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileLatitudeEmptyException.java
  90. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileListByParameterException.java
  91. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileLongitudeEmptyException.java
  92. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileQueryByIdException.java
  93. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileQueryParameterEmptyException.java
  94. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileRecordAddressEmptyException.java
  95. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileRecordDateEmptyException.java
  96. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileRecordDateFormatException.java
  97. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileSaveException.java
  98. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileSignTimeEmptyException.java
  99. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileSignTimeFormatException.java
  100. 12 0
      x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileStartDateFormatException.java

+ 1 - 1
LICENSE

@@ -14,7 +14,7 @@ modification, are permitted provided that the following conditions are met:
 
 
 
-* Redistributions of source code must retain the above copyright notice, this
+* Redistributions of source code must retain the above copyright notice, this 
 
   list of conditions and the following disclaimer.
 

+ 3 - 3
x_attendance_assemble_control/.classpath

@@ -9,7 +9,6 @@
 	<classpathentry kind="lib" path="D:/x/lib/apache/commons/lang3/commons-lang3-3.4.jar"/>
 	<classpathentry kind="lib" path="D:/x/lib/google/gson/gson-2.7.jar"/>
 	<classpathentry kind="lib" path="D:/x/lib/javax/javaee-api-7.0.jar"/>
-	<classpathentry kind="lib" path="D:/x/lib/apache/commons/net/commons-net-3.3.jar"/>
 	<classpathentry kind="lib" path="D:/x/lib/apache/commons/fileupload/commons-fileupload-1.3.1.jar"/>
 	<classpathentry kind="lib" path="D:/x/lib/apache/commons/io/commons-io-2.4.jar"/>
 	<classpathentry kind="lib" path="D:/x/lib/imgscalr/imgscalr-lib-4.2.jar"/>
@@ -18,8 +17,7 @@
 	<classpathentry kind="lib" path="D:/x/store/jars/x_collaboration_core_entity-4.0.0.jar"/>
 	<classpathentry kind="lib" path="D:/x/store/jars/x_collaboration_core_message-4.0.0.jar"/>
 	<classpathentry kind="lib" path="D:/x/store/jars/x_attendance_core_entity-4.0.0.jar" sourcepath="/x_attendance_core_entity"/>
-	<classpathentry kind="lib" path="D:/x/lib/slf4j/slf4j-api-1.7.21.jar"/>
-	<classpathentry kind="lib" path="D:/x/lib/apache/openjpa/openjpa-2.4.2-SNAPSHOT.jar"/>
+	<classpathentry kind="lib" path="D:/x/lib/apache/openjpa/openjpa-2.4.3-SNAPSHOT.jar"/>
 	<classpathentry kind="lib" path="D:/x/store/jars/x_base_core_project-4.0.0.jar"/>
 	<classpathentry kind="lib" path="D:/x/lib/apache/poi/curvesapi-1.04.jar"/>
 	<classpathentry kind="lib" path="D:/x/lib/apache/poi/poi-3.15-beta2.jar"/>
@@ -28,5 +26,7 @@
 	<classpathentry kind="lib" path="D:/x/lib/apache/poi/poi-ooxml-schemas-3.15-beta2.jar"/>
 	<classpathentry kind="lib" path="D:/x/lib/apache/commons/beanutils/commons-beanutils-1.8.3.jar"/>
 	<classpathentry kind="lib" path="D:/x/store/jars/x_organization_core_express-4.0.0.jar" sourcepath="/x_organization_core_express"/>
+	<classpathentry kind="lib" path="D:/x/lib/eclipse/jetty/jetty-all-9.3.14.v20161028-uber.jar"/>
+	<classpathentry kind="lib" path="D:/x/lib/apache/commons/net/commons-net-3.6.jar"/>
 	<classpathentry kind="output" path="classes"/>
 </classpath>

+ 16 - 16
x_attendance_assemble_control/jest/common.js

@@ -1,26 +1,26 @@
 function failure(data) {
-	console.log(data);
-	alert(data.message);
+    console.log(data);
+    alert(data.message);
 }
 
 function splitValue(str) {
-	if (str) {
-		if (str.length > 0) {
-			return str.split(',');
-		}
+    if (str) {
+	if (str.length > 0) {
+	    return str.split(',');
 	}
-	return [];
+    }
+    return [];
 }
 
 function joinValue(o, split) {
-	var s = ',';
-	if (split) {
-		s = '' + split;
+    var s = ',';
+    if (split) {
+	s = '' + split;
+    }
+    if (o) {
+	if (toString.apply(o) === '[object Array]') {
+	    return o.join(s);
 	}
-	if (o) {
-		if (toString.apply(o) === '[object Array]') {
-			return o.join(s);
-		}
-	}
-	return o;
+    }
+    return o;
 }

+ 77 - 0
x_attendance_assemble_control/jest/debug.js

@@ -0,0 +1,77 @@
+debug_parameter = {};
+
+function debug_init() {
+    $('#result').html('');
+    $('#content').html('');
+    var str = '<table border="1" width="100%">';
+    str += '<tr><td colspan="2"><a href="#" id="get">get</a>&nbsp<a href="#" id="on">on</a>&nbsp;<a href="#" id="off">off</a></td></tr>';
+    str += '<tr><td>debug:</td><td id="status">&nbsp;</td></tr>';
+    str += '</table>';
+    $('#content').html(str);
+    $('#get').click(function() {
+	debug_get();
+    });
+    $('#on').click(function() {
+	debug_on();
+    });
+    $('#off').click(function() {
+	debug_off();
+    });
+}
+
+function debug_get() {
+    $.ajax({
+	type : 'get',
+	dataType : 'json',
+	url : '../jaxrs/debug',
+	contentType : 'application/json; charset=utf-8',
+	xhrFields : {
+	    'withCredentials' : true
+	},
+	crossDomain : true
+    }).done(function(json) {
+	if (json.type == 'success') {
+	    $('#status').html(json.data.value + '');
+	}
+    }).always(function(json) {
+	$('#result').html(JSON.stringify(json, null, 4));
+    });
+}
+
+function debug_on() {
+    $.ajax({
+	type : 'get',
+	dataType : 'json',
+	url : '../jaxrs/debug/true',
+	contentType : 'application/json; charset=utf-8',
+	xhrFields : {
+	    'withCredentials' : true
+	},
+	crossDomain : true
+    }).done(function(json) {
+	if (json.type == 'success') {
+	    $('#status').html(json.data.value + '');
+	}
+    }).always(function(json) {
+	$('#result').html(JSON.stringify(json, null, 4));
+    });
+}
+
+function debug_off() {
+    $.ajax({
+	type : 'get',
+	dataType : 'json',
+	url : '../jaxrs/debug/false',
+	contentType : 'application/json; charset=utf-8',
+	xhrFields : {
+	    'withCredentials' : true
+	},
+	crossDomain : true
+    }).done(function(json) {
+	if (json.type == 'success') {
+	    $('#status').html(json.data.value + '');
+	}
+    }).always(function(json) {
+	$('#result').html(JSON.stringify(json, null, 4));
+    });
+}

+ 35 - 90
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/common/date/DateOperation.java

@@ -7,9 +7,6 @@ import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * 
  * @项目名 :SuperviseEfficientSystem
@@ -20,8 +17,7 @@ import org.slf4j.LoggerFactory;
  * @日  期 :2013-06-07
  */
 public class DateOperation {
-	
-	private Logger logger = LoggerFactory.getLogger( DateOperation.class );
+
 	/**
 	 * 根据样式得到格式化对象SimpleDateFormat
 	 * @param date
@@ -447,8 +443,9 @@ public class DateOperation {
 	 * @param date1 yyyy-MM-dd HH:mm:ss
 	 * @param date2 yyyy-MM-dd HH:mm:ss
 	 * @return
+	 * @throws ParseException 
 	 */
-	public  long getDeff(String date1,String date2) {
+	public  long getDeff(String date1,String date2) throws ParseException {
 		long dayNumber = 0;
 		// 1小时=60分钟=3600秒=3600000
 		long mins = 60L * 1000L;
@@ -463,13 +460,9 @@ public class DateOperation {
 		}else{
 			df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 		}
-		try {
-			java.util.Date d1 = df.parse(date1);
-			java.util.Date d2 = df.parse(date2);
-			dayNumber = (d2.getTime() - d1.getTime()) / mins;
-		} catch (Exception e) {
-			logger.error( "系统获取得到两个时间之前的分差发生异常",  e);
-		}
+		java.util.Date d1 = df.parse(date1);
+		java.util.Date d2 = df.parse(date2);
+		dayNumber = (d2.getTime() - d1.getTime()) / mins;
 		return dayNumber;
 	}
 	/**
@@ -480,14 +473,8 @@ public class DateOperation {
 	 */
 	public long getDeff(Date date1,Date date2) {
 		long dayNumber = 0;
-		// 1小时=60分钟=3600秒=3600000
 		long mins = 60L * 1000L;
-		// long day= 24L * 60L * 60L * 1000L;计算天数之差
-		try {
-			dayNumber = (date2.getTime() - date1.getTime()) / mins;
-		} catch (Exception e) {
-			logger.error( "系统获取得到两个时间之前的分差发生异常",  e);
-		}
+		dayNumber = (date2.getTime() - date1.getTime()) / mins;
 		return dayNumber;
 	}
 	/**
@@ -497,7 +484,7 @@ public class DateOperation {
 	 * @param date
 	 * @throws ParseException 
 	 */
-	public  String changeDateFormat(String dateString){
+	public  String changeDateFormat(String dateString) throws ParseException{
 		Date date;
 		String reslut = null;
 		try {
@@ -507,14 +494,8 @@ public class DateOperation {
 			date = format1.parse(dateString);
 			reslut = format5.format(date);
 		} catch (ParseException e) {
-			try {
-				date = format1.parse("0000-00-00");
-			} catch (ParseException e1) {
-				logger.error( "系统日期格式转换发生异常",  e1);
-			}
-			logger.error( "系统日期格式转换发生异常",  e);
+			date = format1.parse("0000-00-00");
 		}
-		
 		return reslut;
 	}
 	
@@ -551,41 +532,27 @@ public class DateOperation {
 	public  final SimpleDateFormat format14 = new SimpleDateFormat("yyyy-MM");
 	
 	
-	public  String getStartOfWeek(String dateString){
+	public  String getStartOfWeek(String dateString) throws Exception{
 		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
-		try {
-			Date date = format.parse(dateString);
-			Calendar cal = Calendar.getInstance();
-			cal.setTime(date);
-			cal.setFirstDayOfWeek(Calendar.MONDAY);
-			int tmp = cal.get(Calendar.DAY_OF_WEEK) - 1;
-			if (0 == tmp) {
-				tmp = 7;
-			}
-			cal.add(Calendar.DATE, -(tmp-1));
-			return getDateStringFromDate(cal.getTime(), "yyyy-MM-dd") + " 00:00:00";
-		} catch (ParseException e) {
-			logger.error( "系统getStartOfWeek日期格式转换发生异常",  e);
-		} catch (Exception e) {
-			logger.error( "系统getStartOfWeek发生异常",  e);
+		Date date = format.parse(dateString);
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+		cal.setFirstDayOfWeek(Calendar.MONDAY);
+		int tmp = cal.get(Calendar.DAY_OF_WEEK) - 1;
+		if (0 == tmp) {
+			tmp = 7;
 		}
-		return null;
+		cal.add(Calendar.DATE, -(tmp-1));
+		return getDateStringFromDate(cal.getTime(), "yyyy-MM-dd") + " 00:00:00";
 	}
 	
-	public  String getEndOfWeek(String dateString){
-		try {
-			Date date = getDateFromString(getStartOfWeek(dateString), "yyyy-MM-dd HH:mm:ss");
-			Calendar cal = Calendar.getInstance();
-			cal.setTime(date);
-			cal.setFirstDayOfWeek(Calendar.MONDAY);
-			cal.add(Calendar.DATE, 6);
-			return getDateStringFromDate(cal.getTime(), "yyyy-MM-dd") + " 23:59:59";
-		} catch (ParseException e) {
-			logger.error( "系统getEndOfWeek日期格式转换发生异常",  e);
-		} catch (Exception e) {
-			logger.error( "系统getEndOfWeek发生异常",  e);
-		}
-		return null;
+	public  String getEndOfWeek(String dateString) throws Exception{
+		Date date = getDateFromString(getStartOfWeek(dateString), "yyyy-MM-dd HH:mm:ss");
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+		cal.setFirstDayOfWeek(Calendar.MONDAY);
+		cal.add(Calendar.DATE, 6);
+		return getDateStringFromDate(cal.getTime(), "yyyy-MM-dd") + " 23:59:59";
 	}
 	
 	
@@ -600,11 +567,7 @@ public class DateOperation {
 	public String getDateCNString( String dateString, String style ) throws Exception{
 		StringBuffer ch_date_string = new StringBuffer();
 		Date _date = null;
-		try{
-			_date = getDateFromString( dateString, style );
-		}catch(Exception e){
-			logger.error( "系统getDateCNString日期格式转换发生异常",  e);
-		}
+		_date = getDateFromString( dateString, style );
 		if(_date == null ){
 			_date = new Date();
 		}
@@ -636,11 +599,7 @@ public class DateOperation {
 	public String getDateCNString2( String dateString, String style ) throws Exception{
 		StringBuffer ch_date_string = new StringBuffer();
 		Date _date = null;
-		try{
-			_date = getDateFromString( dateString, style );
-		}catch(Exception e){
-			logger.error( "系统getDateCNString2日期格式转换发生异常",  e);
-		}
+		_date = getDateFromString( dateString, style );
 		if(_date == null ){
 			_date = new Date();
 		}
@@ -670,28 +629,14 @@ public class DateOperation {
 	 * 结果从1开始
 	 * @param dateString yyyy-mm-dd
 	 * @return
+	 * @throws Exception 
 	 */
-	public  int getWeekNumOfYear( String dateString ){
-		try {
-			Date date = getDateFromString( dateString , "yyyy-MM-dd");
-			Calendar cal = Calendar.getInstance();
-			cal.setTime(date);
-			cal.setFirstDayOfWeek(2);//设置每周的第一天是星期一
-	        //月份有问题(这里的月份开始计数为0)
-	        //本年的第几天,在计算时间间隔的时候有用
-	        //System.out.println("一年中的天数:" + cal.get(Calendar.DAY_OF_YEAR));
-	        //System.out.println("一年中的周数:" + cal.get(Calendar.WEEK_OF_YEAR));
-	        //即本月的第几周
-	        //System.out.println("一月中的周数:" + cal.get(Calendar.WEEK_OF_MONTH));
-	        //即一周中的第几天(这里是以周日为第一天的)
-	        //System.out.println("一周中的天数:" + cal.get(Calendar.DAY_OF_WEEK));
-			return cal.get(Calendar.WEEK_OF_YEAR);
-		} catch (ParseException e) {
-			logger.error( "系统getWeekNumOfYear日期格式转换发生异常",  e);
-		} catch (Exception e) {
-			logger.error( "系统getWeekNumOfYear发生异常",  e);
-		}
-		return -1;
+	public  int getWeekNumOfYear( String dateString ) throws Exception{
+		Date date = getDateFromString( dateString , "yyyy-MM-dd");
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+		cal.setFirstDayOfWeek(2); //设置每周的第一天是星期一
+		return cal.get(Calendar.WEEK_OF_YEAR);
 	}
 	
 	/**

+ 0 - 2
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/common/excel/reader/Excel2003Reader.java

@@ -100,7 +100,6 @@ public  class Excel2003Reader implements HSSFListener{
 		}
 		factory.processWorkbookEvents(request, fs);
 		//数据读取完成
-		
 	}
 	
 	/**
@@ -122,7 +121,6 @@ public  class Excel2003Reader implements HSSFListener{
 		}
 		factory.processWorkbookEvents(request, fs);
 		//数据读取完成
-		
 	}
 	
 	/**

+ 22 - 1
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/common/excel/reader/ExcelReaderUtil.java

@@ -1,4 +1,7 @@
 package com.x.attendance.assemble.common.excel.reader;
+
+import java.io.InputStream;
+
 public class ExcelReaderUtil {
 	
 	//excel2003扩展名
@@ -13,7 +16,7 @@ public class ExcelReaderUtil {
 	 * @param fileName
 	 * @throws Exception 
 	 */
-	public static void readExcel(IRowReader reader, String fileName, String fileKey, int startRow ) throws Exception{
+	public static void readExcel( IRowReader reader, String fileName, String fileKey, int startRow ) throws Exception{
 		// 处理excel2003文件
 		if (fileName.endsWith(EXCEL03_EXTENSION)){
 			Excel2003Reader excel03 = new Excel2003Reader();
@@ -28,4 +31,22 @@ public class ExcelReaderUtil {
 			throw new  Exception("文件格式错误,fileName的扩展名只能是xls或xlsx。");
 		}
 	}
+	
+	/**
+	 * 读取Excel文件,可能是03也可能是07版本
+	 * @param excel03
+	 * @param excel07
+	 * @param fileName
+	 * @throws Exception 
+	 */
+	public static void readExcel2003( IRowReader reader, InputStream is, String fileKey, int startRow ) throws Exception{
+		// 处理excel2003文件
+		if ( is != null ){
+			Excel2003Reader excel03 = new Excel2003Reader();
+			excel03.setRowReader( reader, fileKey, startRow );
+			excel03.process( is );
+		} else {
+			throw new  Exception("there is no input stream.");
+		}
+	}
 }

+ 6 - 3
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/common/excel/reader/UserModelEventListener.java

@@ -17,8 +17,10 @@ import org.apache.poi.hssf.record.LabelSSTRecord;
 import org.apache.poi.hssf.record.NumberRecord;
 import org.apache.poi.hssf.record.RowRecord;
 import org.apache.poi.hssf.record.SSTRecord;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import com.x.base.core.logger.Logger;
+import com.x.base.core.logger.LoggerFactory;
+
 /**
  * 基于POI HSSF的eventmodel 模型的时间解析方式
  *   优点:解析数据相当快。
@@ -34,7 +36,8 @@ import org.slf4j.LoggerFactory;
  * @version 1.0
  */
 public class UserModelEventListener implements HSSFListener {
-	private static Logger logger=LoggerFactory.getLogger(UserModelEventListener.class);
+	
+	private static Logger logger=LoggerFactory.getLogger( UserModelEventListener.class );
 	private SSTRecord sstrec;
 	/** Should we output the formula, or the value it has? */
 	private boolean outputFormulaValues = true;

+ 10 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/Business.java

@@ -13,6 +13,7 @@ import com.x.attendance.assemble.control.factory.AttendanceSettingFactory;
 import com.x.attendance.assemble.control.factory.AttendanceStatisticRequireLogFactory;
 import com.x.attendance.assemble.control.factory.AttendanceStatisticalCycleFactory;
 import com.x.attendance.assemble.control.factory.AttendanceWorkDayConfigFactory;
+import com.x.attendance.assemble.control.factory.AttendanceWorkPlaceFactory;
 import com.x.attendance.assemble.control.factory.StatisticCompanyForDayFactory;
 import com.x.attendance.assemble.control.factory.StatisticCompanyForMonthFactory;
 import com.x.attendance.assemble.control.factory.StatisticDepartmentForDayFactory;
@@ -36,6 +37,8 @@ public class Business {
 	private Organization organization;
 	//系统配置业务处理类
 	private AttendanceSettingFactory attendanceSettingFactory;
+	//工作场所配置业务处理类
+	private AttendanceWorkPlaceFactory attendanceWorkPlaceFactory;
 	//节假日工作日配置业务处理类
 	private AttendanceWorkDayConfigFactory attendanceWorkDayConfigFactory;
 	//人员考勤数据导入文件操作业务处理类
@@ -70,6 +73,13 @@ public class Business {
 	
 	private AttendanceDetailStatisticFactory attendanceDetailStatisticFactory;
 	
+	public AttendanceWorkPlaceFactory attendanceWorkPlaceFactory() throws Exception {
+		if (null == this.attendanceWorkPlaceFactory) {
+			this.attendanceWorkPlaceFactory = new AttendanceWorkPlaceFactory( this );
+		}
+		return attendanceWorkPlaceFactory;
+	}
+	
 	public AttendanceDetailMobileFactory getAttendanceDetailMobileFactory() throws Exception {
 		if (null == this.attendanceDetailMobileFactory) {
 			this.attendanceDetailMobileFactory = new AttendanceDetailMobileFactory( this );

+ 6 - 14
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/ThisApplication.java

@@ -1,25 +1,21 @@
 package com.x.attendance.assemble.control;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.x.attendance.assemble.control.jaxrs.attendanceappealinfo.AttendanceAppealInfoAction;
 import com.x.attendance.assemble.control.service.AttendanceSettingService;
 import com.x.attendance.assemble.control.task.AttendanceStatisticTask;
-import com.x.base.core.application.task.ReportTask;
+import com.x.attendance.assemble.control.task.MobileRecordAnalyseTask;
 import com.x.base.core.project.AbstractThisApplication;
-import com.x.base.core.project.server.Config;
+import com.x.base.core.project.ReportTask;
 import com.x.collaboration.core.message.Collaboration;
 
 public class ThisApplication extends AbstractThisApplication {
 	
 	public static void init() throws Exception {
 		/* 启动报告任务 */
-		scheduleWithFixedDelay(new ReportTask(), 1, 20);
+		timerWithFixedDelay(new ReportTask(), 1, 20);
 		initDatasFromCenters();
 		initStoragesFromCenters();
-		Config.workTimeConfig().initWorkTime();
-		scheduleWithFixedDelay(new AttendanceStatisticTask(), 60 * 5, 60 * 10);
+		timerWithFixedDelay(new AttendanceStatisticTask(), 60 * 20, 60 * 60 * 12 );
+		timerWithFixedDelay( new MobileRecordAnalyseTask(), 60 * 30, 60 * 60 * 10 );
 		Collaboration.start();
 		initAllSystemConfig();
 	}
@@ -29,10 +25,6 @@ public class ThisApplication extends AbstractThisApplication {
 	}
 	
 	private static void initAllSystemConfig() {
-		try {
-			new AttendanceSettingService().initAllSystemConfig();
-		} catch (Exception e) {
-			LoggerFactory.getLogger( ThisApplication.class ).error( "attendance system check all system config got an exception.", e );
-		}
+		new AttendanceSettingService().initAllSystemConfig();
 	}
 }

+ 16 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/exception/PersonHasNoIdentityException.java

@@ -0,0 +1,16 @@
+package com.x.attendance.assemble.control.exception;
+
+import com.x.base.core.exception.PromptException;
+
+public class PersonHasNoIdentityException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	public PersonHasNoIdentityException() {
+		super("用户未分配任何身份,请检查用户所在的部门信息。");
+	}
+	
+	public PersonHasNoIdentityException( String name ) {
+		super("用户'"+ name +"'未分配任何身份,请检查用户所在的部门信息。");
+	}
+}

+ 0 - 4
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceAppealInfoFactory.java

@@ -11,8 +11,6 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
@@ -27,8 +25,6 @@ import com.x.base.core.utils.annotation.MethodDescribe;
  * @author liyi
  */
 public class AttendanceAppealInfoFactory extends AbstractFactory {
-
-	private Logger logger = LoggerFactory.getLogger( AttendanceAppealInfoFactory.class );
 	
 	public AttendanceAppealInfoFactory(Business business) throws Exception {
 		super(business);

+ 14 - 2
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailFactory.java

@@ -727,8 +727,6 @@ public class AttendanceDetailFactory extends AbstractFactory {
 	public long getCountWithFilter( WrapInFilter wrapIn ) throws Exception {
 		//先获取上一页最后一条的sequence值,如果有值的话,以此sequence值作为依据取后续的count条数据
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class );
-		DateOperation dateOperation = new DateOperation();
-		Date startDate = null, endDate = null;
 		List<Object> vs = new ArrayList<>();
 		StringBuffer sql_stringBuffer = new StringBuffer();
 		Integer index = 1;
@@ -878,4 +876,18 @@ public class AttendanceDetailFactory extends AbstractFactory {
 		Predicate p = cb.isNotNull( root.get(AttendanceDetail_.archiveTime) );
 		return em.createQuery(cq.where(p)).setMaxResults(2000).getResultList();
 	}
+
+	public List<String> listAnalysenessDetailsByEmployee( String empName ) throws Exception {
+		List<Integer> statusArray = new ArrayList<Integer>();
+		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class );
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<AttendanceDetail> root = cq.from( AttendanceDetail.class);
+		cq.select(root.get(AttendanceDetail_.id));
+		Predicate p = cb.equal( root.get( AttendanceDetail_.empName ), empName );
+		statusArray.add( 0 ); //未分析的
+		statusArray.add( -1 ); //有错误的
+		p = cb.and( p, root.get( AttendanceDetail_.recordStatus).in( statusArray ));
+		return em.createQuery(cq.where(p)).setMaxResults(10000).getResultList();
+	}
 }

+ 10 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailMobileFactory.java

@@ -123,4 +123,14 @@ public class AttendanceDetailMobileFactory extends AbstractFactory {
 		return this.entityManagerContainer().find(id, AttendanceDetailMobile.class );
 	}
 
+	public List<String> listAllAnalyseWithStatus(int status) throws Exception {
+		EntityManager em = this.entityManagerContainer().get(AttendanceDetailMobile.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<AttendanceDetailMobile> root = cq.from( AttendanceDetailMobile.class);
+		cq.select(root.get(AttendanceDetailMobile_.id));
+		Predicate p = cb.equal( root.get(AttendanceDetailMobile_.recordStatus), status );
+		return em.createQuery(cq.where( p )).getResultList();
+	}
+
 }

+ 70 - 71
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailStatisticFactory.java

@@ -8,13 +8,12 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
 import com.x.attendance.entity.AttendanceDetail;
 import com.x.attendance.entity.AttendanceDetail_;
+import com.x.base.core.logger.Logger;
+import com.x.base.core.logger.LoggerFactory;
 
 /**
  * 打卡信息统计服务类,以打卡信息表为基础进行统计
@@ -38,7 +37,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countAbNormalDutyByEmployeeCycleYearAndMonth(List<String> employeeNames, String cycleYear, String cycleMonth) throws Exception{
 		if( employeeNames == null || employeeNames.size() == 0 ){
-			logger.error("employeeNames is null!");
+			logger.error( new EmployeeNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -49,12 +48,12 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isAbnormalDuty) ));
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleMonth), cycleMonth));
 		}
@@ -73,7 +72,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countLackOfTimeByEmployeeCycleYearAndMonth( List<String> employeeNames, String cycleYear, String cycleMonth) throws Exception{
 		if( employeeNames == null || employeeNames.size() == 0 ){
-			logger.error("employeeNames is null!");
+			logger.error( new EmployeeNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -84,12 +83,12 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isLackOfTime) ));
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleMonth), cycleMonth));
 		}
@@ -108,7 +107,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countLeaveEarlierByEmployeeCycleYearAndMonth( List<String> employeeNames, String cycleYear, String cycleMonth) throws Exception{
 		if( employeeNames == null || employeeNames.size() == 0 ){
-			logger.error("employeeNames is null!");
+			logger.error( new EmployeeNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -119,12 +118,12 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isLeaveEarlier ) ));
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleMonth), cycleMonth));
 		}
@@ -143,7 +142,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countLateByEmployeeCycleYearAndMonth( List<String> employeeNames, String cycleYear, String cycleMonth) throws Exception{
 		if( employeeNames == null || employeeNames.size() == 0 ){
-			logger.error("employeeNames is null!");
+			logger.error( new EmployeeNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -154,12 +153,12 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isLate ) ));
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleMonth), cycleMonth));
 		}
@@ -178,7 +177,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countOffDutyByEmployeeCycleYearAndMonth( List<String> employeeNames, String cycleYear, String cycleMonth) throws Exception{
 		if( employeeNames == null || employeeNames.size() == 0 ){
-			logger.error("employeeNames is null!");
+			logger.error( new EmployeeNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -190,12 +189,12 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, root.get( AttendanceDetail_.empName).in( employeeNames ));
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleMonth), cycleMonth));
 		}
@@ -214,7 +213,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countOnDutyByEmployeeCycleYearAndMonth( List<String> employeeNames, String cycleYear, String cycleMonth) throws Exception{
 		if( employeeNames == null || employeeNames.size() == 0 ){
-			logger.error("employeeNames is null!");
+			logger.error( new EmployeeNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -226,12 +225,12 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, root.get( AttendanceDetail_.empName).in( employeeNames ));
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleMonth), cycleMonth));
 		}
@@ -250,7 +249,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Double sumOnSelfHolidayDaysByEmployeeYearAndMonth( List<String> employeeNames, String cycleYear, String cycleMonth) throws Exception{
 		if( employeeNames == null || employeeNames.size() == 0 ){
-			logger.error("employeeNames is null!");
+			logger.error( new EmployeeNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -266,12 +265,12 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.isFalse(root.get( AttendanceDetail_.isHoliday ))); //不是节假日
 		p = cb.and( p, p1 ); //不是周末并且未调休工作晶
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleYear), cycleYear ));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(AttendanceDetail_.cycleMonth), cycleMonth ));
 		}
@@ -294,7 +293,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Double sumAbsenceDaysByEmployeeYearAndMonth( List<String> employeeNames, String cycleYear, String cycleMonth) throws Exception{
 		if( employeeNames == null || employeeNames.size() == 0 ){
-			logger.error("employeeNames is null!");
+			logger.error( new EmployeeNamesEmptyException() );
 			return null;
 		}
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -304,13 +303,13 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		Predicate p = root.get(AttendanceDetail_.empName).in( employeeNames );		
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(AttendanceDetail_.cycleYear), cycleYear));
 		}
 		
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(AttendanceDetail_.cycleMonth), cycleMonth));
 		}
@@ -329,7 +328,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countAbNormalDutyByDempartmentCycleYearAndMonth(List<String> departmentNames, String cycleYear, String cycleMonth) throws Exception{
 		if( departmentNames == null || departmentNames.size() == 0 ){
-			logger.error("departmentNames is null!");
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -340,12 +339,12 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isAbnormalDuty) ));
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleMonth), cycleMonth));
 		}
@@ -364,7 +363,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countLackOfTimeByDempartmentCycleYearAndMonth( List<String> departmentNames, String cycleYear, String cycleMonth) throws Exception{
 		if( departmentNames == null || departmentNames.size() == 0 ){
-			logger.error("departmentNames is null!");
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -375,12 +374,12 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isLackOfTime) ));
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleMonth), cycleMonth));
 		}
@@ -399,7 +398,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countLeaveEarlierByDempartmentCycleYearAndMonth( List<String> departmentNames, String cycleYear, String cycleMonth) throws Exception{
 		if( departmentNames == null || departmentNames.size() == 0 ){
-			logger.error("departmentNames is null!");
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -410,12 +409,12 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isLeaveEarlier ) ));
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleMonth), cycleMonth));
 		}
@@ -434,7 +433,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countLateByDempartmentCycleYearAndMonth( List<String> departmentNames, String cycleYear, String cycleMonth) throws Exception{
 		if( departmentNames == null || departmentNames.size() == 0 ){
-			logger.error("departmentNames is null!");
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -445,12 +444,12 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isLate ) ));
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.cycleMonth), cycleMonth));
 		}
@@ -468,7 +467,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countAbNormalDutyByDempartmentAndDate(List<String> departmentNames, String recordDate ) throws Exception{
 		if( departmentNames == null || departmentNames.size() == 0 ){
-			logger.error("departmentNames is null!");
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -479,7 +478,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isAbnormalDuty) ));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString ), recordDate));
 		}
@@ -497,7 +496,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countLackOfTimeByDempartmentAndDate( List<String> departmentNames, String recordDate ) throws Exception{
 		if( departmentNames == null || departmentNames.size() == 0 ){
-			logger.error("departmentNames is null!");
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -508,7 +507,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isLackOfTime) ));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString ), recordDate));
 		}
@@ -526,7 +525,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countLeaveEarlierByDempartmentAndDate( List<String> departmentNames, String recordDate ) throws Exception{
 		if( departmentNames == null || departmentNames.size() == 0 ){
-			logger.error("departmentNames is null!");
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -537,7 +536,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isLeaveEarlier ) ));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString ), recordDate));
 		}
@@ -555,7 +554,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countLateByDempartmentAndDate( List<String> departmentNames, String recordDate ) throws Exception{
 		if( departmentNames == null || departmentNames.size() == 0 ){
-			logger.error("departmentNames is null!");
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -566,7 +565,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isLate ) ));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString ), recordDate));
 		}
@@ -584,7 +583,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Double sumAbsenceDaysByDepartmentAndDate( List<String> departmentNames, String recordDate ) throws Exception{
 		if( departmentNames == null || departmentNames.size() == 0 ){
-			logger.error("departmentNames is null!");
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -594,7 +593,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		Predicate p = root.get( AttendanceDetail_.departmentName ).in( departmentNames );
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString ), recordDate));
 		}
@@ -612,7 +611,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Double sumOnSelfHolidayDaysByDepartmentAndDate( List<String> departmentNames, String recordDate ) throws Exception{
 		if( departmentNames == null || departmentNames.size() == 0 ){
-			logger.error("departmentNames is null!");
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -622,7 +621,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		Predicate p = root.get( AttendanceDetail_.departmentName ).in( departmentNames );
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString ), recordDate));
 		}		
@@ -641,7 +640,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countOffDutyByDepartmentAndDate( List<String> departmentNames, String recordDate ) throws Exception{
 		if( departmentNames == null || departmentNames.size() == 0 ){
-			logger.error("departmentNames is null!");
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -653,7 +652,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, root.get( AttendanceDetail_.departmentName).in( departmentNames ));
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.departmentName), recordDate));
 		}
@@ -671,7 +670,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countOnDutyByDepartmentAndDate( List<String> departmentNames, String recordDate) throws Exception{
 		if( departmentNames == null || departmentNames.size() == 0 ){
-			logger.error("departmentNames is null!");
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -683,7 +682,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, root.get( AttendanceDetail_.departmentName ).in( departmentNames ));
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.departmentName), recordDate));
 		}
@@ -701,7 +700,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countAbNormalDutyByCompanyAndDate(List<String> companyNames, String recordDate ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -712,7 +711,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isAbnormalDuty) ));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString ), recordDate));
 		}
@@ -730,7 +729,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countLackOfTimeByCompanyAndDate( List<String> companyNames, String recordDate ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -741,7 +740,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isLackOfTime) ));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString ), recordDate));
 		}
@@ -759,7 +758,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countLeaveEarlierByCompanyAndDate( List<String> companyNames, String recordDate ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -770,7 +769,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isLeaveEarlier ) ));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString ), recordDate));
 		}
@@ -788,7 +787,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countLateByCompanyAndDate( List<String> companyNames, String recordDate ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -799,7 +798,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		p = cb.and( p, cb.isTrue( root.get( AttendanceDetail_.isLate ) ));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString ), recordDate));
 		}
@@ -817,7 +816,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Double sumAbsenceDaysByCompanyAndDate( List<String> companyNames, String recordDate ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -827,7 +826,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		Predicate p = root.get( AttendanceDetail_.companyName ).in( companyNames );
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString ), recordDate));
 		}
@@ -845,7 +844,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Double sumOnSelfHolidayDaysByCompanyAndDate( List<String> companyNames, String recordDate ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -855,7 +854,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		Predicate p = root.get( AttendanceDetail_.companyName ).in( companyNames );
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString ), recordDate));
 		}		
@@ -874,7 +873,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countOffDutyByCompanyAndDate( List<String> companyNames, String recordDate ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -886,7 +885,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, root.get( AttendanceDetail_.companyName ).in( companyNames ));
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString), recordDate));
 		}
@@ -904,7 +903,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 	 */
 	public Long countOnDutyByCompanyAndDate( List<String> companyNames, String recordDate ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class);
@@ -916,7 +915,7 @@ public class AttendanceDetailStatisticFactory extends AbstractFactory {
 		p = cb.and( p, root.get( AttendanceDetail_.companyName).in( companyNames ));
 		p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordStatus ), 1));
 		if( recordDate == null || recordDate.isEmpty() ){
-			logger.error("recordDate is null!");
+			logger.error( new RecordDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( AttendanceDetail_.recordDateString), recordDate));
 		}

+ 0 - 5
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceEmployeeConfigFactory.java

@@ -9,9 +9,6 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
 import com.x.attendance.entity.AttendanceEmployeeConfig;
@@ -23,8 +20,6 @@ import com.x.base.core.utils.annotation.MethodDescribe;
  * @author liyi
  */
 public class AttendanceEmployeeConfigFactory extends AbstractFactory {
-
-	private Logger logger = LoggerFactory.getLogger( AttendanceEmployeeConfigFactory.class );
 	
 	public AttendanceEmployeeConfigFactory(Business business) throws Exception {
 		super(business);

+ 0 - 6
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceImportFileInfoFactory.java

@@ -8,10 +8,6 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
 import com.x.attendance.entity.AttendanceImportFileInfo;
@@ -23,8 +19,6 @@ import com.x.base.core.utils.annotation.MethodDescribe;
  * @author liyi
  */
 public class AttendanceImportFileInfoFactory extends AbstractFactory {
-
-	private Logger logger = LoggerFactory.getLogger( AttendanceImportFileInfoFactory.class );
 	
 	public AttendanceImportFileInfoFactory(Business business) throws Exception {
 		super(business);

+ 0 - 5
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceScheduleSettingFactory.java

@@ -9,9 +9,6 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
 import com.x.attendance.entity.AttendanceScheduleSetting;
@@ -23,8 +20,6 @@ import com.x.base.core.utils.annotation.MethodDescribe;
  * @author liyi
  */
 public class AttendanceScheduleSettingFactory extends AbstractFactory {
-
-	private Logger logger = LoggerFactory.getLogger( AttendanceScheduleSettingFactory.class );
 	
 	public AttendanceScheduleSettingFactory(Business business) throws Exception {
 		super(business);

+ 0 - 4
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceSelfHolidayFactory.java

@@ -12,8 +12,6 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
@@ -27,8 +25,6 @@ import com.x.base.core.utils.annotation.MethodDescribe;
  * @author liyi
  */
 public class AttendanceSelfHolidayFactory extends AbstractFactory {
-
-	private Logger logger = LoggerFactory.getLogger( AttendanceSelfHolidayFactory.class );
 	
 	public AttendanceSelfHolidayFactory(Business business) throws Exception {
 		super(business);

+ 0 - 6
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceSettingFactory.java

@@ -8,10 +8,6 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
 import com.x.attendance.entity.AttendanceSetting;
@@ -23,8 +19,6 @@ import com.x.base.core.utils.annotation.MethodDescribe;
  * @author liyi
  */
 public class AttendanceSettingFactory extends AbstractFactory {
-
-	private Logger logger = LoggerFactory.getLogger( AttendanceSettingFactory.class );
 	
 	public AttendanceSettingFactory(Business business) throws Exception {
 		super(business);

+ 0 - 1
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceStatisticRequireLogFactory.java

@@ -125,7 +125,6 @@ public class AttendanceStatisticRequireLogFactory extends AbstractFactory {
 		if( processStatus != null && !processStatus.isEmpty() ){
 			p = cb.and(p, cb.equal(root.get(AttendanceStatisticRequireLog_.processStatus), processStatus));
 		}
-		//logger.debug( em.createQuery(cq.where(p)).toString() );
 		return em.createQuery( cq.where(p) ).getResultList();
 	}
 }

+ 0 - 5
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceStatisticalCycleFactory.java

@@ -9,9 +9,6 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
 import com.x.attendance.entity.AttendanceStatisticalCycle;
@@ -23,8 +20,6 @@ import com.x.base.core.utils.annotation.MethodDescribe;
  * @author liyi
  */
 public class AttendanceStatisticalCycleFactory extends AbstractFactory {
-
-	private Logger logger = LoggerFactory.getLogger( AttendanceStatisticalCycleFactory.class );
 	
 	public AttendanceStatisticalCycleFactory(Business business) throws Exception {
 		super(business);

+ 0 - 6
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceWorkDayConfigFactory.java

@@ -10,9 +10,6 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.x.attendance.assemble.common.date.DateOperation;
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
@@ -27,7 +24,6 @@ import com.x.base.core.utils.annotation.MethodDescribe;
  */
 public class AttendanceWorkDayConfigFactory extends AbstractFactory {
 
-	private Logger logger = LoggerFactory.getLogger( AttendanceWorkDayConfigFactory.class );
 	private DateOperation dateOperation = new DateOperation();
 	
 	public AttendanceWorkDayConfigFactory(Business business) throws Exception {
@@ -158,7 +154,6 @@ public class AttendanceWorkDayConfigFactory extends AbstractFactory {
 						if( workDayConfig.getConfigDate().trim().equals( dateString ) && "Workday".equalsIgnoreCase( workDayConfig.getConfigType() )
 						){
 							isHoliday = false; //是配置的调休工作日
-							logger.debug( dateString + ", 判断应该是工作日。" );
 							break;
 						}
 					}
@@ -217,7 +212,6 @@ public class AttendanceWorkDayConfigFactory extends AbstractFactory {
 							if( workDayConfig.getConfigDate().trim().equals( dateString ) && "Workday".equalsIgnoreCase( workDayConfig.getConfigType() )
 							){
 								isHoliday = false; //是配置的调休工作日
-								logger.debug( dateString + ", 判断应该是工作日。" );
 								break;
 							}
 						}

+ 54 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceWorkPlaceFactory.java

@@ -0,0 +1,54 @@
+package com.x.attendance.assemble.control.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import com.x.attendance.assemble.control.AbstractFactory;
+import com.x.attendance.assemble.control.Business;
+import com.x.attendance.entity.AttendanceWorkPlace;
+import com.x.attendance.entity.AttendanceWorkPlace_;
+import com.x.base.core.exception.ExceptionWhen;
+import com.x.base.core.utils.annotation.MethodDescribe;
+/**
+ * 工作场所信息服务类
+ * @author liyi
+ */
+public class AttendanceWorkPlaceFactory extends AbstractFactory {
+	
+	public AttendanceWorkPlaceFactory(Business business) throws Exception {
+		super(business);
+	}
+
+	@MethodDescribe("获取指定Id的AttendanceWorkPlace应用信息对象")
+	public AttendanceWorkPlace get( String id ) throws Exception {
+		return this.entityManagerContainer().find(id, AttendanceWorkPlace.class, ExceptionWhen.none);
+	}
+	
+	@MethodDescribe("列示全部的AttendanceWorkPlace应用信息列表")
+	public List<AttendanceWorkPlace> listAll() throws Exception {
+		EntityManager em = this.entityManagerContainer().get(AttendanceWorkPlace.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<AttendanceWorkPlace> cq = cb.createQuery(AttendanceWorkPlace.class);
+		Root<AttendanceWorkPlace> root = cq.from( AttendanceWorkPlace.class);
+		return em.createQuery(cq).getResultList();
+	}
+	
+	@MethodDescribe("列示指定Id的AttendanceWorkPlace应用信息列表")
+	public List<AttendanceWorkPlace> list(List<String> ids) throws Exception {
+		if( ids == null || ids.size() == 0 ){
+			return new ArrayList<AttendanceWorkPlace>();
+		}
+		EntityManager em = this.entityManagerContainer().get(AttendanceWorkPlace.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<AttendanceWorkPlace> cq = cb.createQuery(AttendanceWorkPlace.class);
+		Root<AttendanceWorkPlace> root = cq.from(AttendanceWorkPlace.class);
+		Predicate p = root.get(AttendanceWorkPlace_.id).in(ids);
+		return em.createQuery(cq.where(p)).getResultList();
+	}	
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/CompanyNamesEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.factory;
+
+import com.x.base.core.exception.PromptException;
+
+class CompanyNamesEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	CompanyNamesEmptyException() {
+		super("公司名称列表不能为空.");
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/CycleMonthEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.factory;
+
+import com.x.base.core.exception.PromptException;
+
+class CycleMonthEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	CycleMonthEmptyException() {
+		super("统计月份不能为空.");
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/CycleYearEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.factory;
+
+import com.x.base.core.exception.PromptException;
+
+class CycleYearEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	CycleYearEmptyException() {
+		super("统计年份不能为空.");
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/DepartmentNamesEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.factory;
+
+import com.x.base.core.exception.PromptException;
+
+class DepartmentNamesEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	DepartmentNamesEmptyException() {
+		super("部门名称列表不能为空.");
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/EmployeeNamesEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.factory;
+
+import com.x.base.core.exception.PromptException;
+
+class EmployeeNamesEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	EmployeeNamesEmptyException() {
+		super("员工姓名列表不能为空.");
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/OganizationNamesEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.factory;
+
+import com.x.base.core.exception.PromptException;
+
+class OganizationNamesEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	OganizationNamesEmptyException() {
+		super("组织名称列表不能为空.");
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/RecordDateEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.factory;
+
+import com.x.base.core.exception.PromptException;
+
+class RecordDateEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	RecordDateEmptyException() {
+		super("打卡日期不能为空.");
+	}
+}

+ 10 - 10
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticCompanyForDayFactory.java

@@ -11,8 +11,6 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
@@ -20,6 +18,8 @@ import com.x.attendance.assemble.control.jaxrs.attendancestatistic.WrapInFilterS
 import com.x.attendance.entity.StatisticCompanyForDay;
 import com.x.attendance.entity.StatisticCompanyForDay_;
 import com.x.base.core.exception.ExceptionWhen;
+import com.x.base.core.logger.Logger;
+import com.x.base.core.logger.LoggerFactory;
 import com.x.base.core.utils.annotation.MethodDescribe;
 
 public class StatisticCompanyForDayFactory extends AbstractFactory {
@@ -60,7 +60,7 @@ public class StatisticCompanyForDayFactory extends AbstractFactory {
 
 	public List<String> listByCompanyRecordDateString(String companyName, String sDate) throws Exception{
 		if( companyName == null || companyName.isEmpty() ){
-			logger.error("companyName is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}
 		
@@ -70,7 +70,7 @@ public class StatisticCompanyForDayFactory extends AbstractFactory {
 		Root< StatisticCompanyForDay> root = cq.from( StatisticCompanyForDay.class);
 		Predicate p = cb.equal( root.get( StatisticCompanyForDay_.companyName), companyName);
 		if( sDate == null || sDate.isEmpty() ){
-			logger.error("sDate is null!");
+			logger.error( new StatisticDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticCompanyForDay_.statisticDate), sDate));
 		}
@@ -78,23 +78,23 @@ public class StatisticCompanyForDayFactory extends AbstractFactory {
 		return em.createQuery(cq.where(p)).setMaxResults(62).getResultList();
 	}
 
-	public List<String> listByNameYearAndMonth(String name, String year, String month) throws Exception {
-		if( name == null || name.isEmpty() ){
-			logger.error("name is null!");
+	public List<String> listByNameYearAndMonth(String companyName, String year, String month) throws Exception {
+		if( companyName == null || companyName.isEmpty() ){
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}
 		EntityManager em = this.entityManagerContainer().get( StatisticCompanyForDay.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root< StatisticCompanyForDay> root = cq.from( StatisticCompanyForDay.class);
-		Predicate p = cb.equal( root.get( StatisticCompanyForDay_.companyName), name);
+		Predicate p = cb.equal( root.get( StatisticCompanyForDay_.companyName), companyName);
 		if( year == null || year.isEmpty() ){
-			logger.error("year is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticCompanyForDay_.statisticYear), year));
 		}
 		if( month == null || month.isEmpty() ){
-			logger.error("month is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticCompanyForDay_.statisticMonth), month));
 		}

+ 5 - 5
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticCompanyForMonthFactory.java

@@ -11,8 +11,6 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
@@ -20,6 +18,8 @@ import com.x.attendance.assemble.control.jaxrs.attendancestatistic.WrapInFilterS
 import com.x.attendance.entity.StatisticCompanyForMonth;
 import com.x.attendance.entity.StatisticCompanyForMonth_;
 import com.x.base.core.exception.ExceptionWhen;
+import com.x.base.core.logger.Logger;
+import com.x.base.core.logger.LoggerFactory;
 import com.x.base.core.utils.annotation.MethodDescribe;
 
 public class StatisticCompanyForMonthFactory extends AbstractFactory {
@@ -60,7 +60,7 @@ public class StatisticCompanyForMonthFactory extends AbstractFactory {
 
 	public List<String> listByCompanyYearAndMonth(String companyName, String sYear, String sMonth) throws Exception {
 		if( companyName == null || companyName.isEmpty() ){
-			logger.error("organizationName is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticCompanyForMonth.class);
@@ -69,12 +69,12 @@ public class StatisticCompanyForMonthFactory extends AbstractFactory {
 		Root<StatisticCompanyForMonth> root = cq.from( StatisticCompanyForMonth.class);
 		Predicate p = cb.equal( root.get(StatisticCompanyForMonth_.companyName), companyName);
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticCompanyForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticCompanyForMonth_.statisticMonth), sMonth));
 		}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticDateEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.factory;
+
+import com.x.base.core.exception.PromptException;
+
+class StatisticDateEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	StatisticDateEmptyException() {
+		super("统计日期不能为空.");
+	}
+}

+ 13 - 13
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticDepartmentForDayFactory.java

@@ -11,8 +11,6 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
@@ -20,6 +18,8 @@ import com.x.attendance.assemble.control.jaxrs.attendancestatistic.WrapInFilterS
 import com.x.attendance.entity.StatisticDepartmentForDay;
 import com.x.attendance.entity.StatisticDepartmentForDay_;
 import com.x.base.core.exception.ExceptionWhen;
+import com.x.base.core.logger.Logger;
+import com.x.base.core.logger.LoggerFactory;
 import com.x.base.core.utils.annotation.MethodDescribe;
 
 public class StatisticDepartmentForDayFactory extends AbstractFactory {
@@ -60,7 +60,7 @@ public class StatisticDepartmentForDayFactory extends AbstractFactory {
 
 	public List<String> listByDepartmentRecordDateString( List<String> organizationName, String sDate) throws Exception {
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForDay.class);
@@ -69,7 +69,7 @@ public class StatisticDepartmentForDayFactory extends AbstractFactory {
 		Root< StatisticDepartmentForDay> root = cq.from( StatisticDepartmentForDay.class);
 		Predicate p = root.get( StatisticDepartmentForDay_.organizationName).in(organizationName);
 		if( sDate == null || sDate.isEmpty() ){
-			logger.error("sDate is null!");
+			logger.error( new StatisticDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticDepartmentForDay_.statisticDate), sDate));
 		}
@@ -79,7 +79,7 @@ public class StatisticDepartmentForDayFactory extends AbstractFactory {
 	
 	public List<String> listByDepartmentRecordDateString( String organizationName, String sDate) throws Exception {
 		if( organizationName == null || organizationName.isEmpty() ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}
 		
@@ -89,7 +89,7 @@ public class StatisticDepartmentForDayFactory extends AbstractFactory {
 		Root< StatisticDepartmentForDay> root = cq.from( StatisticDepartmentForDay.class);
 		Predicate p = cb.equal( root.get( StatisticDepartmentForDay_.organizationName), organizationName);
 		if( sDate == null || sDate.isEmpty() ){
-			logger.error("sDate is null!");
+			logger.error( new StatisticDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticDepartmentForDay_.statisticDate), sDate));
 		}
@@ -99,7 +99,7 @@ public class StatisticDepartmentForDayFactory extends AbstractFactory {
 
 	public List<String> listByDepartmentDayYearAndMonth(List<String> name, String year, String month) throws Exception {
 		if( name == null || name.size() == 0 ){
-			logger.error("name is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}
 		
@@ -109,12 +109,12 @@ public class StatisticDepartmentForDayFactory extends AbstractFactory {
 		Root< StatisticDepartmentForDay> root = cq.from( StatisticDepartmentForDay.class);
 		Predicate p = root.get( StatisticDepartmentForDay_.organizationName).in(name);
 		if( year == null || year.isEmpty() ){
-			logger.error("year is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticDepartmentForDay_.statisticYear), year));
 		}
 		if( month == null || month.isEmpty() ){
-			logger.error("month is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticDepartmentForDay_.statisticMonth), month));
 		}
@@ -124,7 +124,7 @@ public class StatisticDepartmentForDayFactory extends AbstractFactory {
 
 	public List<String> listByDepartmentDayDate(List<String> name, String date) throws Exception{
 		if( name == null || name.size() == 0 ){
-			logger.error("name is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}
 		
@@ -134,7 +134,7 @@ public class StatisticDepartmentForDayFactory extends AbstractFactory {
 		Root< StatisticDepartmentForDay> root = cq.from( StatisticDepartmentForDay.class);
 		Predicate p = root.get( StatisticDepartmentForDay_.organizationName).in( name );
 		if( date == null || date.isEmpty() ){
-			logger.error("year is null!");
+			logger.error( new StatisticDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticDepartmentForDay_.statisticDate), date));
 		}
@@ -144,7 +144,7 @@ public class StatisticDepartmentForDayFactory extends AbstractFactory {
 	
 	public List<String> listByDepartmentDayDate( String name, String date) throws Exception{
 		if( name == null || name.isEmpty() ){
-			logger.error("name is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}
 		
@@ -154,7 +154,7 @@ public class StatisticDepartmentForDayFactory extends AbstractFactory {
 		Root< StatisticDepartmentForDay> root = cq.from( StatisticDepartmentForDay.class);
 		Predicate p = cb.equal(root.get( StatisticDepartmentForDay_.organizationName), name);
 		if( date == null || date.isEmpty() ){
-			logger.error("year is null!");
+			logger.error( new StatisticDateEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticDepartmentForDay_.statisticDate), date));
 		}

+ 62 - 63
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticDepartmentForMonthFactory.java

@@ -11,15 +11,14 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
 import com.x.attendance.assemble.control.jaxrs.attendancestatistic.WrapInFilterStatisticDepartmentForMonth;
 import com.x.attendance.entity.StatisticDepartmentForMonth;
 import com.x.attendance.entity.StatisticDepartmentForMonth_;
 import com.x.base.core.exception.ExceptionWhen;
+import com.x.base.core.logger.Logger;
+import com.x.base.core.logger.LoggerFactory;
 import com.x.base.core.utils.annotation.MethodDescribe;
 
 public class StatisticDepartmentForMonthFactory extends AbstractFactory {
@@ -63,7 +62,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	
 	public List<String> listByDepartmentYearAndMonth( String organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.isEmpty() ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -72,12 +71,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		Root<StatisticDepartmentForMonth> root = cq.from( StatisticDepartmentForMonth.class);
 		Predicate p = cb.equal( root.get(StatisticDepartmentForMonth_.organizationName), organizationName);
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), sMonth));
 		}
@@ -87,7 +86,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	
 	public List<String> listByDepartmentYearAndMonth( List<String> organizationNames, String sYear, String sMonth) throws Exception{
 		if( organizationNames == null || organizationNames.size() == 0  ){
-			logger.error("organizationNames is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -96,12 +95,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		Root<StatisticDepartmentForMonth> root = cq.from( StatisticDepartmentForMonth.class);
 		Predicate p = root.get(StatisticDepartmentForMonth_.organizationName).in(organizationNames);
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), sMonth));
 		}
@@ -303,7 +302,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumLateCountByDepartmentYearAndMonth(List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -314,12 +313,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.lateCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), sMonth));
 		}
@@ -335,7 +334,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumAbNormalDutyCountByDepartmentYearAndMonth(List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -346,12 +345,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.abNormalDutyCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), sMonth));
 		}
@@ -367,7 +366,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumLackOfTimeCountByDepartmentYearAndMonth(List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -378,12 +377,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.lackOfTimeCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), sMonth));
 		}
@@ -399,7 +398,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumLeaveEarlyCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -410,12 +409,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.leaveEarlyCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), sMonth));
 		}
@@ -431,7 +430,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumOffDutyCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -442,12 +441,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.offDutyCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), sMonth));
 		}
@@ -463,7 +462,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumOnDutyCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -474,12 +473,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.onDutyCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), sMonth));
 		}
@@ -495,7 +494,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Double sumAttendanceDayCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -506,12 +505,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.onDutyEmployeeCount ) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), sMonth));
 		}
@@ -528,7 +527,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Double sumOnSelfHolidayCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -539,12 +538,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.onSelfHolidayCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), sMonth));
 		}
@@ -561,7 +560,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Double sumAbsenceDayCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -572,13 +571,13 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.absenceDayCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.organizationName).in( organizationName );		
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), sYear));
 		}
 		
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), sMonth));
 		}
@@ -595,7 +594,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumLateCountByCompanyNamesYearAndMonth(List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -606,12 +605,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.lateCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), sMonth));
 		}
@@ -628,7 +627,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Double sumAttendanceDayCountByCompanyNamesYearAndMonth( List<String> companyNames, String cycleYear, String cycleMonth ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -639,12 +638,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.onDutyEmployeeCount ) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.companyName).in( companyNames );
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), cycleMonth));
 		}
@@ -661,7 +660,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumAbNormalDutyCountByCompanyNamesYearAndMonth( List<String> companyNames, String cycleYear, String cycleMonth ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -672,12 +671,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.abNormalDutyCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.companyName).in( companyNames );
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), cycleMonth));
 		}
@@ -693,7 +692,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumLackOfTimeCountByCompanyNamesYearAndMonth( List<String> companyNames, String cycleYear, String cycleMonth ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}	
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -704,12 +703,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.lackOfTimeCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.companyName).in( companyNames );
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), cycleMonth));
 		}
@@ -725,7 +724,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumLeaveEarlyCountByCompanyNamesYearAndMonth( List<String> companyNames, String cycleYear, String cycleMonth ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}	
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -736,12 +735,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.leaveEarlyCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.companyName).in( companyNames );
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), cycleMonth));
 		}
@@ -757,7 +756,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumOffDutyCountByCompanyNamesYearAndMonth( List<String> companyNames, String cycleYear, String cycleMonth ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}	
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -768,12 +767,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.offDutyCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.companyName).in( companyNames );
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), cycleMonth));
 		}
@@ -789,7 +788,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumOnDutyCountByCompanyNamesYearAndMonth( List<String> companyNames, String cycleYear, String cycleMonth ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}	
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -800,12 +799,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.onDutyCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.companyName).in( companyNames );
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), cycleMonth));
 		}
@@ -821,7 +820,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Double sumOnSelfHolidayCountByCompanyNamesYearAndMonth( List<String> companyNames, String cycleYear, String cycleMonth ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}	
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -832,12 +831,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.onSelfHolidayCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.companyName).in( companyNames );
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), cycleMonth));
 		}
@@ -853,7 +852,7 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 	 */
 	public Double sumAbsenceDayCountByCompanyNamesYearAndMonth( List<String> companyNames, String cycleYear, String cycleMonth ) throws Exception{
 		if( companyNames == null || companyNames.size() == 0 ){
-			logger.error("companyNames is null!");
+			logger.error( new CompanyNamesEmptyException() );
 			return null;
 		}
 		EntityManager em = this.entityManagerContainer().get( StatisticDepartmentForMonth.class);
@@ -864,12 +863,12 @@ public class StatisticDepartmentForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticDepartmentForMonth_.absenceDayCount) ) );		
 		Predicate p = root.get(StatisticDepartmentForMonth_.companyName).in( companyNames );
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticYear), cycleYear));
 		}
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticDepartmentForMonth_.statisticMonth), cycleMonth));
 		}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticMonthEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.factory;
+
+import com.x.base.core.exception.PromptException;
+
+class StatisticMonthEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	StatisticMonthEmptyException() {
+		super("统计月份不能为空.");
+	}
+}

+ 41 - 41
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticPersonForMonthFactory.java

@@ -12,8 +12,6 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.x.attendance.assemble.control.AbstractFactory;
 import com.x.attendance.assemble.control.Business;
@@ -21,6 +19,8 @@ import com.x.attendance.assemble.control.jaxrs.attendancestatistic.WrapInFilterS
 import com.x.attendance.entity.StatisticPersonForMonth;
 import com.x.attendance.entity.StatisticPersonForMonth_;
 import com.x.base.core.exception.ExceptionWhen;
+import com.x.base.core.logger.Logger;
+import com.x.base.core.logger.LoggerFactory;
 import com.x.base.core.utils.annotation.MethodDescribe;
 
 public class StatisticPersonForMonthFactory extends AbstractFactory {
@@ -61,7 +61,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 
 	public List<String> listByUserYearAndMonth( String employeeName, String sYear, String sMonth ) throws Exception {
 		if( employeeName == null || employeeName.isEmpty() ){
-			logger.error("employeeName is null!");
+			logger.error( new EmployeeNamesEmptyException() );
 			return null;
 		}
 		
@@ -71,12 +71,12 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		Root<StatisticPersonForMonth> root = cq.from( StatisticPersonForMonth.class );
 		Predicate p = cb.equal( root.get( StatisticPersonForMonth_.employeeName ), employeeName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error( "sYear is null!" );
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticPersonForMonth_.statisticYear ), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticPersonForMonth_.statisticMonth ), sMonth));
 		}
@@ -87,7 +87,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 	public List<String> listByDepartmentYearAndMonth( List<String> departmentNameList, String year, String month ) throws Exception{
 		
 		if( departmentNameList == null || departmentNameList.size() == 0 ){
-			logger.error( "name is null!" );
+			logger.error( new DepartmentNamesEmptyException() );
 			return null;
 		}
 		
@@ -97,12 +97,12 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		Root<StatisticPersonForMonth> root = cq.from( StatisticPersonForMonth.class );
 		Predicate p = root.get( StatisticPersonForMonth_.organizationName ).in(departmentNameList);
 		if( year == null || year.isEmpty() ){
-			logger.error("year is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticPersonForMonth_.statisticYear ), year ) );
 		}
 		if( month == null || month.isEmpty() ){
-			logger.error("month is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticPersonForMonth_.statisticMonth ), month ));
 		}
@@ -301,7 +301,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 	
 	public StatisticPersonForMonth get(String employeeName, String cycleYear, String cycleMonth) throws Exception {
 		if( employeeName == null ){
-			logger.error("employeeName is null!");
+			logger.error( new EmployeeNamesEmptyException() );
 			return null;
 		}
 		EntityManager em = this.entityManagerContainer().get( StatisticPersonForMonth.class);
@@ -310,13 +310,13 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		Root<StatisticPersonForMonth> root = cq.from( StatisticPersonForMonth.class);	
 		Predicate p = cb.equal( root.get( StatisticPersonForMonth_.employeeName ), employeeName);		
 		if( cycleYear == null || cycleYear.isEmpty() ){
-			logger.error("cycleYear is null!");
+			logger.error( new CycleYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticPersonForMonth_.statisticYear), cycleYear));
 		}
 		
 		if( cycleMonth == null || cycleMonth.isEmpty() ){
-			logger.error("cycleMonth is null!");
+			logger.error( new CycleMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get( StatisticPersonForMonth_.statisticMonth), cycleMonth));
 		}
@@ -337,7 +337,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 	 */
 	public Long countEmployeeCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticPersonForMonth.class);
@@ -346,12 +346,12 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		Root<StatisticPersonForMonth> root = cq.from( StatisticPersonForMonth.class);
 		Predicate p = root.get(StatisticPersonForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticMonth), sMonth));
 		}
@@ -370,7 +370,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumLateCountByDepartmentYearAndMonth(List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticPersonForMonth.class);
@@ -381,12 +381,12 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticPersonForMonth_.lateTimes ) ) );		
 		Predicate p = root.get(StatisticPersonForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticMonth), sMonth));
 		}
@@ -404,7 +404,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 	 */
 	public Double sumAttendanceDayCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticPersonForMonth.class);
@@ -415,12 +415,12 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticPersonForMonth_.onDutyDayCount) ) );		
 		Predicate p = root.get(StatisticPersonForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticMonth), sMonth));
 		}
@@ -437,7 +437,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumAbNormalDutyCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticPersonForMonth.class);
@@ -448,12 +448,12 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticPersonForMonth_.abNormalDutyCount) ) );		
 		Predicate p = root.get(StatisticPersonForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticMonth), sMonth));
 		}
@@ -470,7 +470,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumLackOfTimeCountByDepartmentYearAndMonth(List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticPersonForMonth.class);
@@ -481,12 +481,12 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticPersonForMonth_.lackOfTimeCount) ) );		
 		Predicate p = root.get(StatisticPersonForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticMonth), sMonth));
 		}
@@ -503,7 +503,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumLeaveEarlyCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticPersonForMonth.class);
@@ -514,12 +514,12 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticPersonForMonth_.leaveEarlyTimes ) ) );		
 		Predicate p = root.get(StatisticPersonForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticMonth), sMonth));
 		}
@@ -536,7 +536,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumOffDutyCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticPersonForMonth.class);
@@ -547,12 +547,12 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticPersonForMonth_.offDutyTimes ) ) );		
 		Predicate p = root.get(StatisticPersonForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticMonth), sMonth));
 		}
@@ -569,7 +569,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 	 */
 	public Long sumOnDutyCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticPersonForMonth.class);
@@ -580,12 +580,12 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticPersonForMonth_.onDutyTimes ) ) );		
 		Predicate p = root.get(StatisticPersonForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticMonth), sMonth));
 		}
@@ -602,7 +602,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 	 */
 	public Double sumOnSelfHolidayCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}		
 		EntityManager em = this.entityManagerContainer().get( StatisticPersonForMonth.class);
@@ -613,12 +613,12 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		cq.select( cb.sum( root.get(StatisticPersonForMonth_.onSelfHolidayCount) ) );		
 		Predicate p = root.get(StatisticPersonForMonth_.organizationName).in( organizationName );
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticYear), sYear));
 		}
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticMonth), sMonth));
 		}
@@ -635,7 +635,7 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 	 */
 	public Double sumAbsenceDayCountByDepartmentYearAndMonth( List<String> organizationName, String sYear, String sMonth) throws Exception{
 		if( organizationName == null || organizationName.size() == 0 ){
-			logger.error("organizationName is null!");
+			logger.error( new OganizationNamesEmptyException() );
 			return null;
 		}
 		EntityManager em = this.entityManagerContainer().get( StatisticPersonForMonth.class);
@@ -648,13 +648,13 @@ public class StatisticPersonForMonthFactory extends AbstractFactory {
 		Predicate p = root.get(StatisticPersonForMonth_.organizationName).in( organizationName );
 		
 		if( sYear == null || sYear.isEmpty() ){
-			logger.error("sYear is null!");
+			logger.error( new StatisticYearEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticYear), sYear));
 		}
 		
 		if( sMonth == null || sMonth.isEmpty() ){
-			logger.error("sMonth is null!");
+			logger.error( new StatisticMonthEmptyException() );
 		}else{
 			p = cb.and( p, cb.equal( root.get(StatisticPersonForMonth_.statisticMonth), sMonth));
 		}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticYearEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.factory;
+
+import com.x.base.core.exception.PromptException;
+
+class StatisticYearEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	StatisticYearEmptyException() {
+		super("统计年份不能为空.");
+	}
+}

+ 2 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/ActionApplication.java

@@ -21,6 +21,7 @@ import com.x.attendance.assemble.control.jaxrs.fileimport.AttendanceDetailFileIm
 import com.x.attendance.assemble.control.jaxrs.selfholiday.AttendanceSelfHolidayAction;
 import com.x.attendance.assemble.control.jaxrs.selfholiday.AttendanceSelfHolidaySimpleAction;
 import com.x.attendance.assemble.control.jaxrs.uuid.UUIDAction;
+import com.x.attendance.assemble.control.jaxrs.workplace.AttendanceWorkPlaceAction;
 import com.x.base.core.application.jaxrs.AbstractActionApplication;
 
 @ApplicationPath("jaxrs")
@@ -28,6 +29,7 @@ public class ActionApplication extends AbstractActionApplication {
 
 	public Set<Class<?>> getClasses() {
 		this.classes.add(UUIDAction.class);
+		this.classes.add(AttendanceWorkPlaceAction.class);
 		this.classes.add(AttendanceDetailAction.class);
 		this.classes.add(AttendanceDetailMobileAction.class);
 		this.classes.add(AttendanceImportFileInfoAction.class);

+ 2 - 1
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/AttendanceJaxrsFilter.java

@@ -8,7 +8,8 @@ import com.x.base.core.application.jaxrs.ManagerUserJaxrsFilter;
  * web服务过滤器,将指定的URL定义为需要用户认证的服务,如果用户未登录,则无法访问该服务
  * @author liyi *
  */
-@WebFilter(urlPatterns = { 
+@WebFilter(urlPatterns = {
+		"/jaxrs/workplace/*",
 		"/jaxrs/attendanceadmin/*",
 		"/jaxrs/attendancedetail/*",
 		"/jaxrs/attendancedetail/mobile/*",

+ 0 - 40
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/WrapOutMessage.java

@@ -1,40 +0,0 @@
-package com.x.attendance.assemble.control.jaxrs;
-
-import java.io.Serializable;
-import java.util.List;
-
-import com.x.base.core.gson.GsonPropertyObject;
-
-public class WrapOutMessage extends GsonPropertyObject implements Serializable{
-	private static final long serialVersionUID = 1L;
-	
-	private String message;
-	private String status;
-	private String exceptionMessage;
-	private List<DateRecord> dateRecordList;
-	
-	public String getMessage() {
-		return message;
-	}
-	public void setMessage(String message) {
-		this.message = message;
-	}
-	public String getStatus() {
-		return status;
-	}
-	public void setStatus(String status) {
-		this.status = status;
-	}
-	public String getExceptionMessage() {
-		return exceptionMessage;
-	}
-	public void setExceptionMessage(String exceptionMessage) {
-		this.exceptionMessage = exceptionMessage;
-	}
-	public List<DateRecord> getDateRecordList() {
-		return dateRecordList;
-	}
-	public void setDateRecordList(List<DateRecord> dateRecordList) {
-		this.dateRecordList = dateRecordList;
-	}	
-}

+ 50 - 50
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminAction.java

@@ -14,10 +14,7 @@ import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.x.attendance.assemble.control.jaxrs.WrapOutMessage;
+import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.service.AttendanceAdminServiceAdv;
 import com.x.attendance.assemble.control.service.UserManagerService;
 import com.x.attendance.entity.AttendanceAdmin;
@@ -28,13 +25,17 @@ import com.x.base.core.http.ActionResult;
 import com.x.base.core.http.EffectivePerson;
 import com.x.base.core.http.HttpMediaType;
 import com.x.base.core.http.ResponseFactory;
+import com.x.base.core.http.WrapOutId;
 import com.x.base.core.http.annotation.HttpMethodDescribe;
+import com.x.base.core.logger.Logger;
+import com.x.base.core.logger.LoggerFactory;
 
 
 @Path("attendanceadmin")
 public class AttendanceAdminAction extends StandardJaxrsAction{
 	
 	private Logger logger = LoggerFactory.getLogger( AttendanceAdminAction.class );
+	
 	private BeanCopyTools<WrapInAttendanceAdmin, AttendanceAdmin> wrapin_copier = BeanCopyToolsBuilder.create( WrapInAttendanceAdmin.class, AttendanceAdmin.class, null, WrapInAttendanceAdmin.Excludes );
 	private BeanCopyTools<AttendanceAdmin, WrapOutAttendanceAdmin> wrapout_copier = BeanCopyToolsBuilder.create( AttendanceAdmin.class, WrapOutAttendanceAdmin.class, null, WrapOutAttendanceAdmin.Excludes);
 	private AttendanceAdminServiceAdv attendanceAdminServiceAdv = new AttendanceAdminServiceAdv();
@@ -49,17 +50,19 @@ public class AttendanceAdminAction extends StandardJaxrsAction{
 		ActionResult<List<WrapOutAttendanceAdmin>> result = new ActionResult<>();
 		List<WrapOutAttendanceAdmin> wraps = null;
 		List<AttendanceAdmin> attendanceAdminList = null;
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
+		
 		if( check ){
 			try {
 				attendanceAdminList = attendanceAdminServiceAdv.listAll();
 			} catch (Exception e) {
 				check = false;
 				result.error( e );
-				result.setUserMessage("系统在获取所有管理员信息时发生异常!");
-				logger.error( "system list all attendance admin info got an exception.", e );
+				logger.error( new AttendanceAdminListAllException(), effectivePerson, request, null);
 			}
 		}
+		
 		if( check ){
 			if( attendanceAdminList != null && !attendanceAdminList.isEmpty() ){
 				try {
@@ -67,9 +70,9 @@ public class AttendanceAdminAction extends StandardJaxrsAction{
 					result.setData(wraps);
 				} catch (Exception e) {
 					check = false;
-					result.error( e );
-					result.setUserMessage("系统在转换所有管理员信息为输出对象时发生异常!");
-					logger.error( "system copy all attendance admin info to wrap out got an exception.", e );
+					Exception exception = new AttendanceAdminWrapCopyException( e );
+					result.error( exception );
+					logger.error( exception, effectivePerson, request, null);
 				}
 			}
 		}
@@ -83,6 +86,7 @@ public class AttendanceAdminAction extends StandardJaxrsAction{
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response get( @Context HttpServletRequest request, @PathParam("id") String id ) {
 		ActionResult<WrapOutAttendanceAdmin> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		WrapOutAttendanceAdmin wrap = null;
 		AttendanceAdmin attendanceAdmin = null;
 		Boolean check = true;
@@ -92,8 +96,9 @@ public class AttendanceAdminAction extends StandardJaxrsAction{
 			} catch (Exception e) {
 				check = false;
 				result.error( e );
-				result.setUserMessage("系统在根据ID获取管理员信息时发生异常!");
-				logger.error( "system get attendance admin info by id got an exception.", e );
+				Exception exception = new AttendanceAdminQueryByIdException( e, id );
+				result.error( exception );
+				logger.error( exception, effectivePerson, request, null);
 			}
 		}
 		if( check ){
@@ -103,43 +108,44 @@ public class AttendanceAdminAction extends StandardJaxrsAction{
 					result.setData(wrap);
 				} catch (Exception e) {
 					check = false;
-					result.error( e );
-					result.setUserMessage("系统在转换管理员信息为输出对象时发生异常!");
-					logger.error( "system copy attendance admin info to wrap out got an exception.", e );
+					Exception exception = new AttendanceAdminWrapCopyException( e );
+					result.error( exception );
+					logger.error( exception, effectivePerson, request, null);
 				}
-				
 			}
 		}
 		return ResponseFactory.getDefaultActionResultResponse(result);
 	}
 	
-	@HttpMethodDescribe(value = "新建或者更新AttendanceAdmin对象.", request = WrapInAttendanceAdmin.class, response = WrapOutMessage.class)
+	@HttpMethodDescribe(value = "新建或者更新AttendanceAdmin对象.", request = JsonElement.class, response = WrapOutId.class)
 	@POST
 	@Produces( HttpMediaType.APPLICATION_JSON_UTF_8 )
 	@Consumes( MediaType.APPLICATION_JSON )
-	public Response post(@Context HttpServletRequest request, WrapInAttendanceAdmin wrapIn) {
-		ActionResult<WrapOutMessage> result = new ActionResult<>();
-		WrapOutMessage wrapOutMessage = new WrapOutMessage();
+	public Response post(@Context HttpServletRequest request, JsonElement jsonElement ) {
+		ActionResult<WrapOutId> result = new ActionResult<>();
+		WrapInAttendanceAdmin wrapIn = null;
 		EffectivePerson currentPerson = this.effectivePerson(request);
 		AttendanceAdmin attendanceAdmin = null;
 		String companyName = null;
 		Boolean check = true;
 		
-		if( wrapIn == null){
+		try {
+			wrapIn = this.convertToWrapIn( jsonElement, WrapInAttendanceAdmin.class );
+		} catch (Exception e ) {
 			check = false;
-			result.error( new Exception("系统未获取到传入的参数,无法继续保存信息!") );
-			result.setUserMessage("系统未获取到传入的参数,无法继续保存信息!");
-			logger.error( "wrapIn object is null." );
-		}		
+			Exception exception = new WrapInConvertException( e, jsonElement );
+			result.error( exception );
+			logger.error( exception, currentPerson, request, null);
+		}
 		if( check ){
 			if( wrapIn.getOrganizationName() == null  || wrapIn.getOrganizationName().isEmpty() ){
 				try {
 					companyName = userManagerService.getCompanyNameByEmployeeName( currentPerson.getName() );
 				} catch (Exception e) {
 					check = false;
-					result.error( e );
-					result.setUserMessage("系统获取登录用户所属公司时发生异常!");
-					logger.error( "system get company name by user name got an exception{'name':'"+ currentPerson.getName() +"'}." );
+					Exception exception = new GetCurrentPersonCompanyNameException( e, currentPerson.getName() );
+					result.error( exception );
+					logger.error( exception, currentPerson, request, null);
 				}
 				wrapIn.setOrganizationName( companyName );
 			}
@@ -151,39 +157,35 @@ public class AttendanceAdminAction extends StandardJaxrsAction{
 				if(  wrapIn.getId() != null && !wrapIn.getId().isEmpty() ){
 					attendanceAdmin.setId( wrapIn.getId() );
 				}
-			} catch (Exception e) {
+			} catch ( Exception e ) {
 				check = false;
-				wrapOutMessage.setStatus( "ERROR");
-				wrapOutMessage.setMessage( "系统在COPY传入信息到考勤员对象时发生异常." );
-				wrapOutMessage.setExceptionMessage( e.getMessage() );
-				logger.error( "system copy wrap in to attendance admin object got an exception.", e );
+				Exception exception = new AttendanceAdminWrapCopyException( e );
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}
 		if( check ){
 			try {
 				attendanceAdmin = attendanceAdminServiceAdv.save( attendanceAdmin );
-				wrapOutMessage.setStatus( "SUCCESS");
-				wrapOutMessage.setMessage( attendanceAdmin.getId() );
-			} catch (Exception e) {
+				result.setData( new WrapOutId( attendanceAdmin.getId() ) );
+			} catch ( Exception e ) {
 				check = false;
-				wrapOutMessage.setStatus( "ERROR");
-				wrapOutMessage.setMessage( "保存AttendanceAdmin过程中发生异常." );
-				wrapOutMessage.setExceptionMessage( e.getMessage() );
-				logger.error( "system save attendance admin info got an exception.", e );
+				Exception exception = new AttendanceAdminSaveException( e );
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}
-		result.setData( wrapOutMessage );
 		return ResponseFactory.getDefaultActionResultResponse(result);
 	}
 	
-	@HttpMethodDescribe(value = "根据ID删除AttendanceAdminAttendanceAdmin对象.", response = WrapOutMessage.class)
+	@HttpMethodDescribe(value = "根据ID删除AttendanceAdminAttendanceAdmin对象.", response = WrapOutId.class)
 	@DELETE
 	@Path("{id}")
 	@Produces( HttpMediaType.APPLICATION_JSON_UTF_8 )
 	@Consumes( MediaType.APPLICATION_JSON )
 	public Response delete( @Context HttpServletRequest request, @PathParam("id") String id ) {
-		ActionResult<WrapOutMessage> result = new ActionResult<>();
-		WrapOutMessage wrapOutMessage = new WrapOutMessage();
+		ActionResult<WrapOutId> result = new ActionResult<>();
+		EffectivePerson currentPerson = this.effectivePerson(request);
 		Boolean check = true;
 		
         if( check ){
@@ -195,16 +197,14 @@ public class AttendanceAdminAction extends StandardJaxrsAction{
         if( check ){
         	try {
         		attendanceAdminServiceAdv.delete( id );
-    			wrapOutMessage.setStatus("SUCCESS");
-    			wrapOutMessage.setMessage( "成功删除AttendanceAdmin信息。id=" + id );
+        		result.setData( new WrapOutId(id) );
     		} catch (Exception e) {
-    			wrapOutMessage.setStatus("ERROR");
-    			wrapOutMessage.setMessage( "删除AttendanceAdmin过程中发生异常。" );
-    			wrapOutMessage.setExceptionMessage( e.getMessage() );
-    			logger.error( "system delete attendance admin info got an exception.", e );
+    			check = false;
+    			Exception exception = new AttendanceAdminDeleteException( e, id );
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
     		}
         }
-        result.setData( wrapOutMessage );
 		return ResponseFactory.getDefaultActionResultResponse(result);
 	}
 }

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminDeleteException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceadmin;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceAdminDeleteException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceAdminDeleteException( Throwable e, String id ) {
+		super("系统在根据ID删除管理员信息时发生异常.ID:" + id, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminListAllException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceadmin;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceAdminListAllException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceAdminListAllException() {
+		super("系统在获取所有管理员信息时发生异常.");
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminQueryByIdException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceadmin;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceAdminQueryByIdException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceAdminQueryByIdException( Throwable e, String id ) {
+		super("系统在根据ID获取管理员信息时发生异常!ID:" + id, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminSaveException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceadmin;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceAdminSaveException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceAdminSaveException( Throwable e ) {
+		super("系统保存管理员信息时发生异常.", e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminWrapCopyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceadmin;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceAdminWrapCopyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceAdminWrapCopyException( Throwable e ) {
+		super("系统在转换所有管理员信息为输出对象时发生异常.", e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/GetCurrentPersonCompanyNameException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceadmin;
+
+import com.x.base.core.exception.PromptException;
+
+class GetCurrentPersonCompanyNameException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	GetCurrentPersonCompanyNameException( Throwable e, String name ) {
+		super("系统获取登录用户所属公司时发生异常。姓名:" + name, e );
+	}
+}

+ 13 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/WrapInConvertException.java

@@ -0,0 +1,13 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceadmin;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.exception.PromptException;
+
+class WrapInConvertException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	public WrapInConvertException( Throwable e, JsonElement jsonElement) {
+		super( "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString(), e);
+	}
+}

+ 4 - 5
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/WrapInFilter.java

@@ -3,22 +3,21 @@ package com.x.attendance.assemble.control.jaxrs.attendanceadmin;
 import java.util.List;
 
 import com.x.attendance.entity.AttendanceSetting;
-import com.x.base.core.bean.NameValueCountPair;
 import com.x.base.core.gson.GsonPropertyObject;
 import com.x.base.core.http.annotation.Wrap;
 
 @Wrap( AttendanceSetting.class)
 public class WrapInFilter extends GsonPropertyObject {
 
-	private List<NameValueCountPair> appIdList;
+	private List<String> appIdList;
 
 	private String key;	
-
-	public List<NameValueCountPair> getAppIdList() {
+	
+	public List<String> getAppIdList() {
 		return appIdList;
 	}
 
-	public void setAppIdList(List<NameValueCountPair> appIdList) {
+	public void setAppIdList(List<String> appIdList) {
 		this.appIdList = appIdList;
 	}
 

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealArchiveException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceAppealArchiveException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceAppealArchiveException( Throwable e, String id ) {
+		super("用户在根据ID归档申诉信息时发生异常!ID:" + id, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealDeleteException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceAppealDeleteException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceAppealDeleteException( Throwable e, String id ) {
+		super("系统在根据ID删除申诉信息时发生异常.ID:" + id, e );
+	}
+}

+ 212 - 148
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealInfoAction.java

@@ -17,12 +17,10 @@ import javax.ws.rs.core.Response;
 
 import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
+import com.google.gson.JsonElement;
 import com.x.attendance.assemble.common.date.DateOperation;
 import com.x.attendance.assemble.control.Business;
-import com.x.attendance.assemble.control.jaxrs.WrapOutMessage;
 import com.x.attendance.assemble.control.service.AttendanceAppealInfoServiceAdv;
 import com.x.attendance.assemble.control.service.AttendanceDetailServiceAdv;
 import com.x.attendance.assemble.control.service.AttendanceNoticeService;
@@ -34,13 +32,15 @@ import com.x.base.core.bean.BeanCopyTools;
 import com.x.base.core.bean.BeanCopyToolsBuilder;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
-import com.x.base.core.exception.ExceptionWhen;
 import com.x.base.core.http.ActionResult;
 import com.x.base.core.http.EffectivePerson;
 import com.x.base.core.http.HttpAttribute;
 import com.x.base.core.http.HttpMediaType;
 import com.x.base.core.http.ResponseFactory;
+import com.x.base.core.http.WrapOutId;
 import com.x.base.core.http.annotation.HttpMethodDescribe;
+import com.x.base.core.logger.Logger;
+import com.x.base.core.logger.LoggerFactory;
 import com.x.organization.core.express.wrap.WrapDepartment;
 import com.x.organization.core.express.wrap.WrapPerson;
 
@@ -61,6 +61,7 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response get(@Context HttpServletRequest request, @PathParam("id") String id) {
 		ActionResult<WrapOutAttendanceAppealInfo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		WrapOutAttendanceAppealInfo wrap = null;
 		AttendanceAppealInfo attendanceAppealInfo = null;
         Boolean check = true;	
@@ -74,10 +75,10 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
         	try {
 				attendanceAppealInfo = attendanceAppealInfoServiceAdv.get( id );
 			} catch (Exception e) {
-				check = false;
-				result.error( e );
-				result.setUserMessage( "系统在根据Id查询申诉信息时发生异常!" );
-				logger.error( "system get appeal info by id got an exception.", e );
+				check = false;				
+				Exception exception = new AttendanceAppealQueryByIdException( e, id );
+				result.error( exception );
+				logger.error( exception, effectivePerson, request, null);
 			}
         }
         if( check ){
@@ -87,22 +88,23 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 					result.setData(wrap);
 				} catch (Exception e) {
 					check = false;
-					result.error( e );
-					result.setUserMessage( "系统转换申诉对象为输出格式时发生异常!" );
-					logger.error( "system copy appeal info to wrap out got an exception.", e );
+					Exception exception = new AttendanceAppealWrapCopyException( e );
+					result.error( exception );
+					logger.error( exception, effectivePerson, request, null);
 				}
         	}
         }
 		return ResponseFactory.getDefaultActionResultResponse(result);
 	}
 
-	@HttpMethodDescribe(value = "根据ID删除AttendanceAppealInfo申诉信息对象.", response = WrapOutMessage.class)
+	@HttpMethodDescribe(value = "根据ID删除AttendanceAppealInfo申诉信息对象.", response = WrapOutId.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response delete(@Context HttpServletRequest request, @PathParam("id") String id) {
-		ActionResult<WrapOutMessage> result = new ActionResult<>();
+		ActionResult<WrapOutId> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 		
         if( check ){
@@ -114,12 +116,12 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 		if( check ){
 			try {
 				attendanceAppealInfoServiceAdv.delete( id );
-				result.setUserMessage( "成功删除申诉信息信息。id=" + id );
+				result.setData( new WrapOutId(id) );
 			} catch (Exception e) {
 				check = false;
-				result.error( e );
-				result.setUserMessage( "删除申诉信息过程中发生异常!" );
-				logger.error( "system delete appeal info by id got an exception.", e );
+				Exception exception = new AttendanceAppealDeleteException( e, id );
+				result.error( exception );
+				logger.error( exception, effectivePerson, request, null);
 			}
 		}
 		return ResponseFactory.getDefaultActionResultResponse(result);
@@ -133,29 +135,38 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 	 * @param wrapIn
 	 * @return
 	 */
-	@HttpMethodDescribe(value = "对某条打卡记录进行申诉", request = WrapInAttendanceAppealInfo.class, response = WrapOutMessage.class)
+	@HttpMethodDescribe(value = "对某条打卡记录进行申诉", request = JsonElement.class, response = WrapOutId.class)
 	@PUT
 	@Path("appeal/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response appealAttendanceDetail(@Context HttpServletRequest request, @PathParam("id") String id, WrapInAttendanceAppealInfo wrapIn) {
-		ActionResult<WrapOutMessage> result = new ActionResult<>();
-		WrapOutMessage wrapOutMessage = new WrapOutMessage();
+	public Response appealAttendanceDetail(@Context HttpServletRequest request, @PathParam("id") String id, JsonElement jsonElement) {
+		ActionResult<WrapOutId> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		DateOperation dateOperation = new DateOperation();
 		AttendanceAppealInfo attendanceAppealInfo = null;
 		AttendanceDetail attendanceDetail = null;
 		WrapDepartment department = null;
 		WrapPerson person = null;
+		WrapInAttendanceAppealInfo wrapIn = null;
 		Boolean check = true;
 		
+		try {
+			wrapIn = this.convertToWrapIn( jsonElement, WrapInAttendanceAppealInfo.class );
+		} catch (Exception e ) {
+			check = false;
+			Exception exception = new WrapInConvertException( e, jsonElement );
+			result.error( exception );
+			logger.error( exception, effectivePerson, request, null);
+		}
 		if( check ){
 			try {
 				attendanceDetail = attendanceDetailServiceAdv.get( id );
 			} catch (Exception e) {
 				check = false;
-				logger.error("system get attendance detail with id got an exception.", e );
-				result.error( e );
-				result.setUserMessage( "系统根据ID查询打卡明细时发生异常。" );
+				Exception exception = new AttendanceDetailQueryByIdException( e, id );
+				result.error( exception );
+				logger.error( exception, effectivePerson, request, null);
 			}
 		}		
 		if( check ){
@@ -186,9 +197,9 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 				attendanceAppealInfo.setCurrentProcessor( attendanceAppealInfo.getProcessPerson1() );
 			}else{// 打卡记录不存在
 				check = false;
-				result.error( new Exception("打卡信息不存在,无法继续进行申诉") );
-				result.setUserMessage( "打卡信息不存在,无法继续进行申诉!" );
-				logger.error( "attendanceDetailInfo{'id':'" + id + "'} not exists, system can not appeal attendance detail." );
+				Exception exception = new AttendanceDetailNotExistsException( id );
+				result.error( exception );
+				logger.error( exception, effectivePerson, request, null);
 			}
 		}
 		if( check ){
@@ -217,21 +228,21 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 									attendanceAppealInfo.setProcessPersonCompany1( department.getCompany() );
 								}else{
 									check = false;
-									result.error( new Exception("系统无法根据员工身份查询到审核人信息!身份:" + wrapIn.getProcessPerson1() ) );
-									result.setUserMessage( "系统无法根据员工身份查询到审核人信息!" );
-									logger.error("system can not find any person by employee identity for processor1:" + wrapIn.getProcessPerson1() );
+									Exception exception = new PersonHasNoIdenitityException( wrapIn.getProcessPerson1() );
+									result.error( exception );
+									logger.error( exception, effectivePerson, request, null);
 								}
 							}else{
 								check = false;
-								result.error( new Exception("系统无法根据员工姓名以及身份查询到部门信息,请检查该审核人的部门信息!KEY:"+ wrapIn.getProcessPerson1() ) );
-								result.setUserMessage( "系统无法根据员工姓名以及身份查询到部门信息,请检查该审核人的部门信息!" );
-								logger.error("system can not find any department by employee name for processor1:" + wrapIn.getProcessPerson1() );
+								Exception exception = new PersonHasNoDepartmentException( wrapIn.getProcessPerson1() );
+								result.error( exception );
+								logger.error( exception, effectivePerson, request, null);
 							}
-						} catch (Exception e) {
+						} catch ( Exception e) {
 							check = false;
-							result.error( e );
-							result.setUserMessage( "系统根据员工姓名查询部门信息时发生异常!" );
-							logger.error("system query department by employee name got an exception", e );
+							Exception exception = new QeuryDepartmentWithPersonException( e, wrapIn.getProcessPerson1() );
+							result.error( exception );
+							logger.error( exception, effectivePerson, request, null);
 						}
 					}
 				}
@@ -263,21 +274,21 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 									attendanceAppealInfo.setProcessPersonCompany2( department.getCompany() );
 								}else{
 									check = false;
-									result.error( new Exception("系统无法根据员工身份查询到人员信息!" ) );
-									result.setUserMessage( "系统无法根据员工身份查询到人员信息!" );
-									logger.error("system can not find any department by employee identity for processor2:" + wrapIn.getProcessPerson2() );
+									Exception exception = new PersonHasNoIdenitityException( wrapIn.getProcessPerson2() );
+									result.error( exception );
+									logger.error( exception, effectivePerson, request, null);
 								}
 							}else{
 								check = false;
-								result.error( new Exception("系统无法根据员工姓名查询到部门信息,请检查该员工的部门信息!" ) );
-								result.setUserMessage( "系统无法根据员工姓名查询到部门信息,请检查该员工的部门信息!" );
-								logger.error("system can not find any department by employee name for processor2:" + wrapIn.getProcessPerson2() );
+								Exception exception = new PersonHasNoDepartmentException( wrapIn.getProcessPerson2() );
+								result.error( exception );
+								logger.error( exception, effectivePerson, request, null);
 							}
 						} catch (Exception e) {
 							check = false;
-							result.error( e );
-							result.setUserMessage( "系统根据员工姓名查询部门信息时发生异常!" );
-							logger.error("system query department by employee name got an exception", e );
+							Exception exception = new QeuryDepartmentWithPersonException( e, wrapIn.getProcessPerson2() );
+							result.error( exception );
+							logger.error( exception, effectivePerson, request, null);
 						}
 					}
 				}	
@@ -286,11 +297,12 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 		if( check ){
 			try {
 				attendanceAppealInfo = attendanceAppealInfoServiceAdv.saveNewAppeal( attendanceAppealInfo );
+				result.setData( new WrapOutId( id ) );
 			} catch (Exception e) {
 				check = false;
-				result.error( e );
-				result.setUserMessage( "系统在保存申诉信息时发生异常!" );
-				logger.error("system save appeal info got an exception", e );
+				Exception exception = new AttendanceAppealSaveException( e );
+				result.error( exception );
+				logger.error( exception, effectivePerson, request, null);
 			}
 		}
 		if( check ){
@@ -299,110 +311,130 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 				attendanceNoticeService.notifyAttendanceAppealProcessness1Message( attendanceAppealInfo);
 			} catch (Exception e) {
 				check = false;
-				result.error( e );
-				result.setUserMessage( "申诉信息提交成功,向申诉当前处理人发送通知消息发生异常!" );
-				logger.error("system send notice to current processor got an exception.name:" + wrapIn.getProcessPerson1(), e );
+				Exception exception = new NotifyAttendanceAppealException( e, attendanceAppealInfo.getProcessPerson1() );
+				result.error( exception );
+				logger.error( exception, effectivePerson, request, null);
 			}
 		}
-		result.setData( wrapOutMessage );
 		return ResponseFactory.getDefaultActionResultResponse(result);
 	}
 
-	@HttpMethodDescribe(value = "审核人处理申诉记录", request = WrapInAttendanceAppealInfo.class, response = WrapOutMessage.class)
+	@HttpMethodDescribe(value = "审核人处理申诉记录", request = JsonElement.class, response = WrapOutId.class)
 	@PUT
 	@Path("process/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response firstProcessAttendanceAppeal( @Context HttpServletRequest request, @PathParam("id") String id,
-			WrapInAttendanceAppealInfo wrapIn ) {
-		ActionResult<WrapOutMessage> result = new ActionResult<>();
-		EffectivePerson currentPerson = this.effectivePerson( request );
+			JsonElement jsonElement ) {
+		ActionResult<WrapOutId> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		WrapDepartment department = null;
 		AttendanceAppealInfo attendanceAppealInfo = null;
 		String departmentName = null, companyName = null;
+		WrapInAttendanceAppealInfo wrapIn = null;
 		Boolean check = true;
 		
+		try {
+			wrapIn = this.convertToWrapIn( jsonElement, WrapInAttendanceAppealInfo.class );
+		} catch (Exception e ) {
+			check = false;
+			Exception exception = new WrapInConvertException( e, jsonElement );
+			result.error( exception );
+			logger.error( exception, effectivePerson, request, null);
+		}
+		
 		if( check ){
 			try{
 				attendanceAppealInfo = attendanceAppealInfoServiceAdv.get( id );
 				if( attendanceAppealInfo == null ){
 					check = false;
-					result.error( new Exception( "申诉信息不存在,申诉处理不成功!" ) );
-					result.setUserMessage( "申诉信息不存在,申诉处理不成功!" );
-					logger.error("attendanceAppealInfo{'id':'" + id + "'} not exists, system can not process appeal info." );
+					Exception exception = new AttendanceAppealNotExistsException( id );
+					result.error( exception );
+					logger.error( exception, effectivePerson, request, null);
 				}
 			} catch ( Exception e ) {
 				check = false;
-				result.error( e );
-				result.setUserMessage( "系统在根据ID查询申诉信息对象时发生异常!" );
-				logger.error("system get appeal info with id got an exception.id:" + id, e );
+				Exception exception = new AttendanceAppealQueryByIdException( e, id );
+				result.error( exception );
+				logger.error( exception, effectivePerson, request, null);
 			}
 		}
 		if( check ){
 			try{
-				department = userManagerService.getDepartmentByEmployeeName( currentPerson.getName() );
+				department = userManagerService.getDepartmentByEmployeeName( effectivePerson.getName() );
 				if (department != null) {
 					departmentName = department.getName();
 					companyName = department.getCompany();
 				}else{
 					check = false;
-					result.error( new Exception( "抱歉,未能在系统中查询到您所在的部门信息,申诉信息暂时无法处理,请联系管理员。") );
-					result.setUserMessage( "抱歉,未能在系统中查询到您所在的部门信息,申诉信息暂时无法处理,请联系管理员。" );
+					Exception exception = new PersonHasNoDepartmentException( effectivePerson.getName() );
+					result.error( exception );
+					logger.error( exception, effectivePerson, request, null);
 				}
 			}catch( Exception e ){
 				check = false;
-				result.error( e );
-				result.setUserMessage( "系统在根据登录用户姓名查询用户所在的部门时发生异常!" );
-				logger.error("system get department with user name got an exception.id:" + id, e );
+				Exception exception = new QeuryDepartmentWithPersonException( e, effectivePerson.getName() );
+				result.error( exception );
+				logger.error( exception, effectivePerson, request, null);
 			}
 		}
 		if( check ){
 			try{
 				attendanceAppealInfo = attendanceAppealInfoServiceAdv.firstProcessAttendanceAppeal(
-						id, departmentName, companyName, currentPerson.getName(), //processorName
+						id, departmentName, companyName, effectivePerson.getName(), //processorName
 						new Date(), //processTime
 						wrapIn.getOpinion1(),  //opinion
 						wrapIn.getStatus() //status审批状态:0-待处理,1-审批通过,-1-审批不能过,2-需要下一次审批
 				);
-				result.setUserMessage( "申诉信息审核处理成功!" );
+				result.setData( new WrapOutId(id) );
 			} catch ( Exception e ) {
 				check = false;
-				result.error( e );
-				result.setUserMessage( "系统在更新申诉处理信息对象时发生异常!" );
-				logger.error("system update appeal first process info got an exception.id:" + id, e );
+				Exception exception = new AttendanceAppealProcessException( e, id );
+				result.error( exception );
+				logger.error( exception, effectivePerson, request, null);
 			}
 		}
 		return ResponseFactory.getDefaultActionResultResponse(result);
 	}
 
-	@HttpMethodDescribe(value = "复核人处理申诉记录", request = WrapInAttendanceAppealInfo.class, response = WrapOutMessage.class)
+	@HttpMethodDescribe(value = "复核人处理申诉记录", request = JsonElement.class, response = WrapOutId.class)
 	@PUT
 	@Path("process2/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response secondProcessAttendanceAppeal( @Context HttpServletRequest request, @PathParam("id") String id,
-			WrapInAttendanceAppealInfo wrapIn) {
-		ActionResult<WrapOutMessage> result = new ActionResult<>();
+			JsonElement jsonElement) {
+		ActionResult<WrapOutId> result = new ActionResult<>();
 		EffectivePerson currentPerson = this.effectivePerson(request);
 		WrapDepartment department = null;
 		AttendanceAppealInfo attendanceAppealInfo = null;
 		String departmentName = null, companyName = null;
+		WrapInAttendanceAppealInfo wrapIn = null;
 		Boolean check = true;
 		
+		try {
+			wrapIn = this.convertToWrapIn( jsonElement, WrapInAttendanceAppealInfo.class );
+		} catch (Exception e ) {
+			check = false;
+			Exception exception = new WrapInConvertException( e, jsonElement );
+			result.error( exception );
+			logger.error( exception, currentPerson, request, null);
+		}
+		
 		if( check ){
 			try{
 				attendanceAppealInfo = attendanceAppealInfoServiceAdv.get( id );
 				if( attendanceAppealInfo == null ){
 					check = false;
-					result.error( new Exception( "申诉信息不存在,申诉处理不成功!" ) );
-					result.setUserMessage( "申诉信息不存在,申诉处理不成功!" );
-					logger.error("attendanceAppealInfo{'id':'" + id + "'} not exists, system can not process appeal info." );
+					Exception exception = new AttendanceAppealNotExistsException( id );
+					result.error( exception );
+					logger.error( exception, currentPerson, request, null);
 				}
 			} catch ( Exception e ) {
 				check = false;
-				result.error( e );
-				result.setUserMessage( "系统在根据ID查询申诉信息对象时发生异常!" );
-				logger.error("system get appeal info with id got an exception.id:" + id, e );
+				Exception exception = new AttendanceAppealQueryByIdException( e, id );
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}
 		if( check ){
@@ -413,14 +445,16 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 					companyName = department.getCompany();
 				}else{
 					check = false;
-					result.error( new Exception( "抱歉,未能在系统中查询到您所在的部门信息,申诉信息暂时无法处理,请联系管理员。") );
-					result.setUserMessage( "抱歉,未能在系统中查询到您所在的部门信息,申诉信息暂时无法处理,请联系管理员。" );
+					Exception exception = new PersonHasNoDepartmentException( currentPerson.getName() );
+					result.error( exception );
+					logger.error( exception, currentPerson, request, null);
 				}
 			}catch( Exception e ){
 				check = false;
 				result.error( e );
-				result.setUserMessage( "系统在根据登录用户姓名查询用户所在的部门时发生异常!" );
-				logger.error("system get department with user name got an exception.id:" + id, e );
+				Exception exception = new QeuryDepartmentWithPersonException( e, currentPerson.getName() );
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}
 		if( check ){
@@ -431,126 +465,156 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 						wrapIn.getOpinion2(),  //opinion
 						wrapIn.getStatus() //status
 				);
-				result.setUserMessage( "申诉信息复核处理成功!" );
+				result.setData( new WrapOutId(id) );
 			} catch ( Exception e ) {
 				check = false;
 				result.error( e );
-				result.setUserMessage( "系统在更新申诉处理信息对象时发生异常!" );
-				logger.error("system update appeal first process info got an exception.id:" + id, e );
+				Exception exception = new AttendanceAppealProcessException( e, id );
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}
 		return ResponseFactory.getDefaultActionResultResponse(result);
 	}
 
-	@HttpMethodDescribe(value = "列示根据过滤条件的AttendanceAppealInfo,下一页.", response = WrapOutAttendanceAppealInfo.class, request = WrapInFilterAppeal.class)
+	@HttpMethodDescribe(value = "列示根据过滤条件的AttendanceAppealInfo,下一页.", response = WrapOutAttendanceAppealInfo.class, request = JsonElement.class)
 	@PUT
 	@Path("filter/list/{id}/next/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response listNextWithFilter(@Context HttpServletRequest request, @PathParam("id") String id,
-			@PathParam("count") Integer count, WrapInFilterAppeal wrapIn) {
+			@PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<WrapOutAttendanceAppealInfo>> result = new ActionResult<>();
+		EffectivePerson currentPerson = this.effectivePerson(request);
 		List<WrapOutAttendanceAppealInfo> wraps = null;
 		Long total = 0L;
 		List<AttendanceAppealInfo> detailList = null;
+		WrapInFilterAppeal wrapIn = null;
+		Boolean check = true;
 		
 		try {
-			EntityManagerContainer emc = EntityManagerContainerFactory.instance().create();
-			Business business = new Business(emc);
+			wrapIn = this.convertToWrapIn( jsonElement, WrapInFilterAppeal.class );
+		} catch (Exception e ) {
+			check = false;
+			Exception exception = new WrapInConvertException( e, jsonElement );
+			result.error( exception );
+			logger.error( exception, currentPerson, request, null);
+		}
+		if( check ){
+			try {
+				EntityManagerContainer emc = EntityManagerContainerFactory.instance().create();
+				Business business = new Business(emc);
 
-			// 查询出ID对应的记录的sequence
-			Object sequence = null;
-			if (id == null || "(0)".equals(id) || id.isEmpty()) {
-				logger.debug("第一页查询,没有id传入");
-			} else {
-				if (!StringUtils.equalsIgnoreCase(id, HttpAttribute.x_empty_symbol)) {
-					sequence = PropertyUtils.getProperty( emc.find(id, AttendanceAppealInfo.class, ExceptionWhen.not_found), "sequence");
+				// 查询出ID对应的记录的sequence
+				Object sequence = null;
+				if (id == null || "(0)".equals(id) || id.isEmpty()) {
+					logger.debug("第一页查询,没有id传入");
+				} else {
+					if (!StringUtils.equalsIgnoreCase(id, HttpAttribute.x_empty_symbol)) {
+						sequence = PropertyUtils.getProperty( emc.find(id, AttendanceAppealInfo.class ), "sequence");
+					}
 				}
-			}
-			// 从数据库中查询符合条件的一页数据对象
-			detailList = business.getAttendanceAppealInfoFactory().listIdsNextWithFilter(id, count, sequence, wrapIn);
-			// 从数据库中查询符合条件的对象总数
-			total = business.getAttendanceAppealInfoFactory().getCountWithFilter(wrapIn);
-			// 将所有查询出来的有状态的对象转换为可以输出的过滤过属性的对象
-			wraps = wrapout_copier.copy(detailList);
+				// 从数据库中查询符合条件的一页数据对象
+				detailList = business.getAttendanceAppealInfoFactory().listIdsNextWithFilter(id, count, sequence, wrapIn);
+				// 从数据库中查询符合条件的对象总数
+				total = business.getAttendanceAppealInfoFactory().getCountWithFilter(wrapIn);
+				// 将所有查询出来的有状态的对象转换为可以输出的过滤过属性的对象
+				wraps = wrapout_copier.copy(detailList);
 
-			// 对查询的列表进行排序
-			result.setCount(total);
-			result.setData(wraps);
+				// 对查询的列表进行排序
+				result.setCount(total);
+				result.setData(wraps);
 
-		} catch (Throwable th) {
-			th.printStackTrace();
-			result.error(th);
+			} catch (Throwable th) {
+				th.printStackTrace();
+				result.error(th);
+			}
 		}
+		
 		return ResponseFactory.getDefaultActionResultResponse(result);
 	}
 
-	@HttpMethodDescribe(value = "列示根据过滤条件的AttendanceAppealInfo,上一页.", response = WrapOutAttendanceAppealInfo.class, request = WrapInFilterAppeal.class)
+	@HttpMethodDescribe(value = "列示根据过滤条件的AttendanceAppealInfo,上一页.", response = WrapOutAttendanceAppealInfo.class, request = JsonElement.class)
 	@PUT
 	@Path("filter/list/{id}/prev/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response listPrevWithFilter(@Context HttpServletRequest request, @PathParam("id") String id,
-			@PathParam("count") Integer count, WrapInFilterAppeal wrapIn) {
+			@PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<WrapOutAttendanceAppealInfo>> result = new ActionResult<>();
+		EffectivePerson currentPerson = this.effectivePerson(request);
 		List<WrapOutAttendanceAppealInfo> wraps = null;
 		Long total = 0L;
 		List<AttendanceAppealInfo> detailList = null;
+		WrapInFilterAppeal wrapIn = null;
+		Boolean check = true;
+		
 		try {
-			EntityManagerContainer emc = EntityManagerContainerFactory.instance().create();
-			Business business = new Business(emc);
+			wrapIn = this.convertToWrapIn( jsonElement, WrapInFilterAppeal.class );
+		} catch (Exception e ) {
+			check = false;
+			Exception exception = new WrapInConvertException( e, jsonElement );
+			result.error( exception );
+			logger.error( exception, currentPerson, request, null);
+		}
+		if( check ){
+			try {
+				EntityManagerContainer emc = EntityManagerContainerFactory.instance().create();
+				Business business = new Business(emc);
+
+				// 查询出ID对应的记录的sequence
+				Object sequence = null;
 
-			// 查询出ID对应的记录的sequence
-			Object sequence = null;
-			logger.debug("传入的ID=" + id);
-			if (id == null || "(0)".equals(id) || id.isEmpty()) {
-				logger.debug("第一页查询,没有id传入");
-			} else {
-				if (!StringUtils.equalsIgnoreCase(id, HttpAttribute.x_empty_symbol)) {
-					sequence = PropertyUtils
-							.getProperty(emc.find(id, AttendanceAppealInfo.class, ExceptionWhen.not_found), "sequence");
+				if (id == null || "(0)".equals(id) || id.isEmpty()) {
+					logger.debug("第一页查询,没有id传入");
+				} else {
+					if (!StringUtils.equalsIgnoreCase(id, HttpAttribute.x_empty_symbol)) {
+						sequence = PropertyUtils
+								.getProperty(emc.find(id, AttendanceAppealInfo.class ), "sequence");
+					}
 				}
+				// 从数据库中查询符合条件的一页数据对象
+				detailList = business.getAttendanceAppealInfoFactory().listIdsPrevWithFilter(id, count, sequence, wrapIn);
+				// 从数据库中查询符合条件的对象总数
+				total = business.getAttendanceAppealInfoFactory().getCountWithFilter(wrapIn);
+				// 将所有查询出来的有状态的对象转换为可以输出的过滤过属性的对象
+				wraps = wrapout_copier.copy(detailList);
+				result.setCount(total);
+				result.setData(wraps);
+			} catch (Throwable th) {
+				th.printStackTrace();
+				result.error(th);
 			}
-			// 从数据库中查询符合条件的一页数据对象
-			detailList = business.getAttendanceAppealInfoFactory().listIdsPrevWithFilter(id, count, sequence, wrapIn);
-			// 从数据库中查询符合条件的对象总数
-			total = business.getAttendanceAppealInfoFactory().getCountWithFilter(wrapIn);
-			// 将所有查询出来的有状态的对象转换为可以输出的过滤过属性的对象
-			wraps = wrapout_copier.copy(detailList);
-			result.setCount(total);
-			result.setData(wraps);
-		} catch (Throwable th) {
-			th.printStackTrace();
-			result.error(th);
 		}
+		
 		return ResponseFactory.getDefaultActionResultResponse(result);
 	}
 
-	@HttpMethodDescribe(value = "将指定的申诉信息记录归档", response = WrapOutMessage.class)
+	@HttpMethodDescribe(value = "将指定的申诉信息记录归档", response = WrapOutId.class)
 	@GET
 	@Path("archive/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response archiveAttendanceAppeal(@Context HttpServletRequest request, @PathParam("id") String id) {
-		ActionResult<WrapOutMessage> result = new ActionResult<>();
-		
+		ActionResult<WrapOutId> result = new ActionResult<>();
+		EffectivePerson currentPerson = this.effectivePerson(request);
 		if ( id != null && !id.isEmpty() ) { //归档指定的考勤申诉记录
 			try{
 				attendanceAppealInfoServiceAdv.archive( id );
-				result.setUserMessage( "对指定申诉信息进行归档操作成功完成!" );
+				result.setData( new WrapOutId(id) );
 			}catch( Exception e ){
 				result.error( e );
-				result.setUserMessage( "系统在根据ID对申诉信息进行归档操作时发生异常!" );
-				logger.error("system archive appeal info with id{'"+ id +"'} got an exception.id:" + id, e );
+				Exception exception = new AttendanceAppealArchiveException( e, id );
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}else{ //归档所有的考勤申诉记录
 			try{
 				attendanceAppealInfoServiceAdv.archiveAll();
-				result.setUserMessage( "对所有申诉信息进行归档操作成功完成!" );
 			}catch( Exception e ){
-				result.error( e );
-				result.setUserMessage( "系统在对所有申诉信息进行归档操作时发生异常!" );
-				logger.error("system archive all appeal info got an exception.id:" + id, e );
+				Exception exception = new AttendanceAppealArchiveException( e, null );
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}
 		return ResponseFactory.getDefaultActionResultResponse(result);

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealNotExistsException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceAppealNotExistsException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceAppealNotExistsException( String id ) {
+		super("员工打卡申诉信息不存在!ID:" + id );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealProcessException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceAppealProcessException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceAppealProcessException( Throwable e, String id ) {
+		super("用户在根据ID处理申诉信息时发生异常!ID:" + id, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealQueryByIdException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceAppealQueryByIdException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceAppealQueryByIdException( Throwable e, String id ) {
+		super("系统在根据ID查询申诉信息时发生异常!ID:" + id, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealSaveException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceAppealSaveException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceAppealSaveException( Throwable e ) {
+		super("系统在保存申诉信息时发生异常.", e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealWrapCopyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceAppealWrapCopyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceAppealWrapCopyException( Throwable e ) {
+		super("系统在转换申诉信息为输出对象时发生异常.", e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceDetailNotExistsException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailNotExistsException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailNotExistsException( String id ) {
+		super("员工打卡信息不存在!ID:" + id );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceDetailQueryByIdException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailQueryByIdException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailQueryByIdException( Throwable e, String id ) {
+		super("系统在根据ID查询员工打卡信息时发生异常!ID:" + id, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/NotifyAttendanceAppealException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class NotifyAttendanceAppealException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	NotifyAttendanceAppealException( Throwable e, String name ) {
+		super("申诉信息提交成功,向申诉当前处理人发送通知消息发生异常!name:" + name, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/PersonHasNoDepartmentException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class PersonHasNoDepartmentException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	PersonHasNoDepartmentException( String name ) {
+		super( "未能根据员工姓名查询到任何部门信息!name:" + name );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/PersonHasNoIdenitityException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class PersonHasNoIdenitityException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	PersonHasNoIdenitityException( String name ) {
+		super("员工未设置身份信息,请检查员工所在部门是否正常!name:" + name );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/QeuryDepartmentWithPersonException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.x.base.core.exception.PromptException;
+
+class QeuryDepartmentWithPersonException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	QeuryDepartmentWithPersonException( Throwable e, String name ) {
+		super("系统根据员工姓名查询部门信息时发生异常!name:" + name, e );
+	}
+}

+ 13 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/WrapInConvertException.java

@@ -0,0 +1,13 @@
+package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.exception.PromptException;
+
+class WrapInConvertException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	public WrapInConvertException( Throwable e, JsonElement jsonElement) {
+		super( "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString(), e);
+	}
+}

+ 3 - 3
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/WrapInFilter.java

@@ -10,17 +10,17 @@ import com.x.base.core.http.annotation.Wrap;
 @Wrap( AttendanceAppealInfo.class)
 public class WrapInFilter extends GsonPropertyObject {
 
-	private List<NameValueCountPair> appIdList;
+	private List<String> appIdList;
 	
 	private List<NameValueCountPair> orAtrribute;
 
 	private String key;	
 
-	public List<NameValueCountPair> getAppIdList() {
+	public List<String> getAppIdList() {
 		return appIdList;
 	}
 
-	public void setAppIdList(List<NameValueCountPair> appIdList) {
+	public void setAppIdList(List<String> appIdList) {
 		this.appIdList = appIdList;
 	}
 

Разлика између датотеке није приказан због своје велике величине
+ 319 - 247
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailAction.java


+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailAnalyseException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailAnalyseException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailAnalyseException( Throwable e, String id ) {
+		super("系统分析员工打卡信息时发生异常!ID:" + id, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailArchiveException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailArchiveException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailArchiveException( Throwable e, String id ) {
+		super("系统归档员工打卡信息时发生异常!ID:" + id, e );
+	}
+}

+ 14 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailCheckAndReplenishException.java

@@ -0,0 +1,14 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import java.util.Date;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailCheckAndReplenishException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	public AttendanceDetailCheckAndReplenishException(Exception e, Date cycleStartDate, Date cycleEndDate) {
+		super("系统根据时间列表核对和补充员工打卡信息时发生异常.CycleStartDate:" + cycleStartDate + ", CycleEndDate:" + cycleEndDate, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailCycleMonthEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailCycleMonthEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailCycleMonthEmptyException() {
+		super("员工打卡记录统计月份为空,无法进行数据查询." );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailCycleYearEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailCycleYearEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailCycleYearEmptyException() {
+		super("员工打卡记录统计年份为空,无法进行数据查询." );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailDeleteException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailDeleteException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailDeleteException( Throwable e, String id ) {
+		super("系统在删除员工打卡信息时发生异常。ID:" + id, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailEmployeeNameEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailEmployeeNameEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailEmployeeNameEmptyException() {
+		super("员打卡信息中员工姓名不能为空." );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailIdEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailIdEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailIdEmptyException() {
+		super("员工打卡记录ID为空,无法进行数据查询." );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailImportFileIdEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailImportFileIdEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailImportFileIdEmptyException() {
+		super("员工打卡记录导入文件ID为空,无法进行数据查询." );
+	}
+}

+ 14 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailListByCompanyYearMonthException.java

@@ -0,0 +1,14 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import java.util.List;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailListByCompanyYearMonthException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	public AttendanceDetailListByCompanyYearMonthException( Exception e, List<String> companyName, String q_year, String q_month) {
+		super("系统在根据公司名称,年份月份查询打卡详细信息ID列表时发生异常!Company:"+companyName+", Year:"+q_year+", Month:"+q_month, e );
+	}
+}

+ 14 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailListByDepartmentYearMonthException.java

@@ -0,0 +1,14 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import java.util.List;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailListByDepartmentYearMonthException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	public AttendanceDetailListByDepartmentYearMonthException( Exception e, List<String> departmentNames, String q_year, String q_month) {
+		super("系统在根据公司名称,年份月份查询打卡详细信息ID列表时发生异常!Department:"+departmentNames+", Year:"+q_year+", Month:"+q_month, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailListByIdsException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailListByIdsException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailListByIdsException( Throwable e ) {
+		super("系统根据开始时间和结束时间查询需要分析的员工打卡信息ID列表时发生异常!", e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailListByImportFileIdException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailListByImportFileIdException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailListByImportFileIdException( Throwable e, String fileId ) {
+		super("系统在根据打卡信息导入文件ID查询员工打卡信息时发生异常!FileId:" + fileId, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailListByNameYearMonthException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailListByNameYearMonthException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	public AttendanceDetailListByNameYearMonthException(Exception e, String q_empName, String q_year, String q_month) {
+		super("系统在根据员工姓名,年份月份查询打卡详细信息ID列表时发生异常!Name:"+q_empName+", Year:"+q_year+", Month:"+q_month, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailListNeedAnalyseException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailListNeedAnalyseException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	public AttendanceDetailListNeedAnalyseException( Throwable e, String startDate, String endDate) {
+		super("系统根据开始时间和结束时间查询需要分析的员工打卡信息ID列表时发生异常.StartDate:" + startDate + ", EndDate:" + endDate, e );
+	}
+}

+ 92 - 96
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileAction.java

@@ -17,11 +17,7 @@ import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.x.attendance.assemble.common.date.DateOperation;
-import com.x.attendance.assemble.control.jaxrs.WrapOutMessage;
 import com.x.attendance.assemble.control.service.AttendanceDetailServiceAdv;
 import com.x.attendance.entity.AttendanceDetailMobile;
 import com.x.base.core.application.jaxrs.StandardJaxrsAction;
@@ -31,11 +27,13 @@ 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.http.ActionResult;
+import com.x.base.core.http.EffectivePerson;
 import com.x.base.core.http.HttpMediaType;
 import com.x.base.core.http.ResponseFactory;
 import com.x.base.core.http.WrapOutId;
 import com.x.base.core.http.annotation.HttpMethodDescribe;
-import com.x.base.core.utils.SortTools;
+import com.x.base.core.logger.Logger;
+import com.x.base.core.logger.LoggerFactory;
 
 
 @Path("attendancedetail/mobile")
@@ -52,6 +50,7 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response get(@Context HttpServletRequest request, @PathParam("id") String id ) {
 		ActionResult<WrapOutAttendanceDetailMobile> result = new ActionResult<>();
+		EffectivePerson currentPerson = this.effectivePerson(request);
 		WrapOutAttendanceDetailMobile wrap = null;
 		AttendanceDetailMobile attendanceDetailMobile = null;
 		Boolean check = true;
@@ -59,8 +58,9 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 		if( check ){
 			if( id == null ){
 				check = false;
-				result.error( new Exception("需要查询的打卡详细记录ID为空,无法进行数据查询。") );
-				result.setUserMessage( "需要查询的打卡详细记录ID为空,无法进行数据查询。" );
+				Exception exception = new AttendanceDetailMobileIdEmptyException();
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}		
 		if( check ){
@@ -68,16 +68,17 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 				attendanceDetailMobile = attendanceDetailServiceAdv.getMobile( id );
 			} catch (Exception e) {
 				check = false;
-				result.error( new Exception("系统在根据用户传入的ID查询打卡详细信息记录时发生异常。") );
-				result.setUserMessage( "系统在根据用户传入的ID查询打卡详细信息记录时发生异常。" );
-				logger.error( "system get attendance detail Mobile info with id:"+ id +" got an exception.", e );
+				Exception exception = new AttendanceDetailMobileQueryByIdException( e, id);
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}		
 		if( check ){
 			if( attendanceDetailMobile == null ){
 				check = false;
-				result.error( new Exception("系统在根据用户传入的ID未能查询到任何打卡详细信息记录常。" ) );
-				result.setUserMessage( "系统在根据用户传入的ID未能查询到任何打卡详细信息记录常。" );
+				Exception exception = new AttendanceDetaillMobileNotExistsException( id);
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}		
 		if( check ){
@@ -86,9 +87,9 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 				result.setData(wrap);
 			} catch (Exception e) {
 				check = false;
-				result.error( new Exception("系统在转换数据库对象attendanceDetailMobile为输出对象时发生异常。") );
-				result.setUserMessage( "系统在转换数据库对象为输出对象时发生异常。" );
-				logger.error( "system copy attendanceDetailMobile to wrap got an exception.", e );
+				Exception exception = new AttendanceDetailMobileWrapCopyException( e );
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}
 		return ResponseFactory.getDefaultActionResultResponse(result);
@@ -101,6 +102,7 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response listDataForMobile(@Context HttpServletRequest request, @PathParam("page") Integer page, @PathParam("count") Integer count, WrapInAttendanceDetailMobileQuery wrapIn ) {
 		ActionResult<List<WrapOutAttendanceDetailMobile>> result = new ActionResult<>();
+		EffectivePerson currentPerson = this.effectivePerson(request);
 		List<WrapOutAttendanceDetailMobile> wraps = new ArrayList<>();
 		List<WrapOutAttendanceDetailMobile> allResultWrap = null;
 		List<AttendanceDetailMobile> attendanceDetailMobileList = null;
@@ -111,11 +113,11 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 		Boolean check = true;
 		Boolean queryConditionIsNull = true;
 		
-		if( wrapIn == null ){
-			check = false;
-			result.error( new Exception("系统未获取到需要保存的数据!") );
-			result.setUserMessage( "系统未获取到需要保存的数据!" );
-		}
+//		if( wrapIn == null ){
+//			check = false;
+//			result.error( new Exception("系统未获取到需要保存的数据!") );
+//			result.setUserMessage( "系统未获取到需要保存的数据!" );
+//		}
 		if( check ){
 			if( page == null ){
 				page = 1;
@@ -147,8 +149,9 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 			}
 			if( queryConditionIsNull ){
 				check = false;
-				result.error( new Exception("员工号,员工姓名和查询日期不能全部为空!") );
-				result.setUserMessage( "员工号,员工姓名和查询日期不能全部为空!" );
+				Exception exception = new AttendanceDetailMobileQueryParameterEmptyException();
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}
 		if( check ){
@@ -158,9 +161,9 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 					wrapIn.setEndDate( dateOperation.getDateStringFromDate( datetime, "YYYY-MM-DD") ); //结束日期
 				}catch( Exception e ){
 					check = false;
-					result.error( new Exception("结束日期格式异常,日期:" + wrapIn.getEndDate() ) );
-					result.setUserMessage( "结束日期格式异常,日期:" + wrapIn.getEndDate() );
-					logger.error("end date string error:" + wrapIn.getEndDate(), e);
+					Exception exception = new AttendanceDetailMobileEndDateFormatException( e, wrapIn.getEndDate() );
+					result.error( exception );
+					logger.error( exception, currentPerson, request, null);
 				}
 				if( wrapIn.getEndDate() == null || wrapIn.getEndDate().isEmpty() ){
 					wrapIn.setEndDate( wrapIn.getStartDate() );
@@ -172,9 +175,9 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 					wrapIn.setStartDate( dateOperation.getDateStringFromDate( datetime, "YYYY-MM-DD") ); //开始日期
 				}catch( Exception e ){
 					check = false;
-					result.error( new Exception("开始日期格式异常,日期:" + wrapIn.getStartDate() ) );
-					result.setUserMessage( "开始日期格式异常,日期:" + wrapIn.getStartDate() );
-					logger.error("start date string error:" + wrapIn.getStartDate(), e);
+					Exception exception = new AttendanceDetailMobileStartDateFormatException( e, wrapIn.getEndDate() );
+					result.error( exception );
+					logger.error( exception, currentPerson, request, null);
 				}
 			}
 		}
@@ -186,9 +189,9 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 					total = attendanceDetailServiceAdv.countAttendanceDetailMobileForPage( wrapIn.getEmpNo(), wrapIn.getEmpName(), wrapIn.getSignDescription(), wrapIn.getStartDate(), wrapIn.getEndDate() );
 				} catch (Exception e) {
 					check = false;
-					result.error( e );
-					result.setUserMessage( "根据ID信息查询版块信息时发生异常!" );
-					logger.error( "system query all top subject info with section info got an exceptin.", e );
+					Exception exception = new AttendanceDetailMobileCountException( e, wrapIn.getEmpNo(), wrapIn.getEmpName(), wrapIn.getSignDescription(), wrapIn.getStartDate(), wrapIn.getEndDate() );
+					result.error( exception );
+					logger.error( exception, currentPerson, request, null);
 				}
 			}
 		}
@@ -198,9 +201,9 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 					attendanceDetailMobileList = attendanceDetailServiceAdv.listAttendanceDetailMobileForPage( wrapIn.getEmpNo(), wrapIn.getEmpName(), wrapIn.getSignDescription(), wrapIn.getStartDate(), wrapIn.getEndDate(), selectTotal );
 				} catch (Exception e) {
 					check = false;
-					result.error( e );
-					result.setUserMessage( "根据ID信息查询版块信息时发生异常!" );
-					logger.error( "system query all top subject info with section info got an exceptin.", e );
+					Exception exception = new AttendanceDetailMobileListByParameterException( e, wrapIn.getEmpNo(), wrapIn.getEmpName(), wrapIn.getSignDescription(), wrapIn.getStartDate(), wrapIn.getEndDate() );
+					result.error( exception );
+					logger.error( exception, currentPerson, request, null);
 				}
 			}
 		}
@@ -210,9 +213,9 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 					allResultWrap = wrapout_copier.copy( attendanceDetailMobileList );
 				} catch (Exception e) {
 					check = false;
-					result.error( e );
-					result.setUserMessage( "系统将列表转换为输出格式时发生异常!" );
-					logger.error( "system copy list to wraps got an exceptin.", e );
+					Exception exception = new AttendanceDetailMobileWrapCopyException( e );
+					result.error( exception );
+					logger.error( exception, currentPerson, request, null);
 				}
 			}
 		}
@@ -251,19 +254,21 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 		WrapOutId wrapOutId = null;
 		Date datetime = null;
 		DateOperation dateOperation = new DateOperation();
+		EffectivePerson currentPerson = this.effectivePerson( request );
 		AttendanceDetailMobile attendanceDetailMobile = new AttendanceDetailMobile();
 		Boolean check = true;
 		
-		if( wrapIn == null ){
-			check = false;
-			result.error( new Exception("系统未获取到需要保存的数据!") );
-			result.setUserMessage( "系统未获取到需要保存的数据!" );
-		}
+//		if( wrapIn == null ){
+//			check = false;
+//			result.error( new Exception("系统未获取到需要保存的数据!") );
+//			result.setUserMessage( "系统未获取到需要保存的数据!" );
+//		}
 		if( check ){
 			if( wrapIn.getRecordAddress() == null || wrapIn.getRecordAddress().isEmpty() ){
 				check = false;
-				result.error( new Exception("打卡信息中打卡地址描述 不能为空!") );
-				result.setUserMessage( "打卡信息中打卡地址描述 不能为空!" );
+				Exception exception = new AttendanceDetailMobileRecordAddressEmptyException();
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}else{
 				attendanceDetailMobile.setRecordAddress( wrapIn.getRecordAddress() );
 			}
@@ -271,8 +276,9 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 		if( check ){
 			if( wrapIn.getLatitude() == null || wrapIn.getLatitude().isEmpty() ){
 				check = false;
-				result.error( new Exception("打卡信息中打卡地址纬度信息不能为空!") );
-				result.setUserMessage( "打卡信息中打卡地址纬度信息不能为空!" );
+				Exception exception = new AttendanceDetailMobileLatitudeEmptyException();
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}else{
 				attendanceDetailMobile.setLatitude( wrapIn.getLatitude() );
 			}
@@ -280,41 +286,15 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 		if( check ){
 			if( wrapIn.getLongitude() == null || wrapIn.getLongitude().isEmpty() ){
 				check = false;
-				result.error( new Exception("打卡信息中打卡地址经度信息不能为空!") );
-				result.setUserMessage( "打卡信息中打卡地址经度信息不能为空!" );
+				Exception exception = new AttendanceDetailMobileLongitudeEmptyException();
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}else{
 				attendanceDetailMobile.setLongitude( wrapIn.getLongitude() );
 			}
 		}
 		if( check ){
-			if( wrapIn.getRecordDateString() == null || wrapIn.getRecordDateString().isEmpty() ){
-				check = false;
-				result.error( new Exception("打卡信息中打卡日期不能为空,格式: yyyy-mm-dd!") );
-				result.setUserMessage( "打卡信息中打卡日期不能为空,格式: yyyy-mm-dd!" );
-			}else{
-				attendanceDetailMobile.setRecordDateString( wrapIn.getRecordDateString() );
-			}
-		}
-		if( check ){
-			if( wrapIn.getEmpName() == null || wrapIn.getEmpName().isEmpty() ){
-				check = false;
-				result.error( new Exception("打卡信息中打卡员工姓名不能为空!") );
-				result.setUserMessage( "打卡信息中打卡员工姓名不能为空!" );
-			}else{
-				attendanceDetailMobile.setEmpName( wrapIn.getEmpName() );
-			}
-		}
-		if( check ){
-			try{
-				datetime = dateOperation.getDateFromString( wrapIn.getRecordDateString() );
-				attendanceDetailMobile.setRecordDate( datetime );
-				attendanceDetailMobile.setRecordDateString( dateOperation.getDateStringFromDate( datetime, "YYYY-MM-DD") );
-			}catch( Exception e ){
-				check = false;
-				result.error( new Exception("打卡日期格式异常,时间:" + wrapIn.getRecordDateString() ) );
-				result.setUserMessage( "打卡日期格式异常,时间:" + wrapIn.getRecordDateString() );
-				logger.error("record date string error:" + wrapIn.getRecordDateString(), e);
-			}
+			attendanceDetailMobile.setEmpName( currentPerson.getName() );
 		}
 		if( check ){
 			if( wrapIn.getSignTime() != null && wrapIn.getSignTime().trim().length() > 0 ){
@@ -323,10 +303,27 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 					attendanceDetailMobile.setSignTime( dateOperation.getDateStringFromDate( datetime, "HH:mm:ss") ); //打卡时间
 				}catch( Exception e ){
 					check = false;
-					result.error( new Exception("打卡时间格式异常,时间:" + wrapIn.getSignTime() ) );
-					result.setUserMessage( "打卡时间格式异常,时间:" + wrapIn.getSignTime() );
-					logger.error("sign time string error:" + wrapIn.getSignTime(), e);
+					Exception exception = new AttendanceDetailMobileSignTimeFormatException( e, wrapIn.getSignTime() );
+					result.error( exception );
+					logger.error( exception, currentPerson, request, null);
 				}
+			}else{//打卡时间没有填写就填写为当前时间
+				attendanceDetailMobile.setSignTime( dateOperation.getNowTime() ); //打卡时间
+			}
+		}
+		if( check ){
+			if( wrapIn.getRecordDateString() != null && !wrapIn.getRecordDateString().isEmpty() ){
+				try{
+					datetime = dateOperation.getDateFromString( wrapIn.getRecordDateString() );
+					attendanceDetailMobile.setRecordDateString( dateOperation.getDateStringFromDate( datetime, "yyyy-MM-dd") ); //打卡时间
+				}catch( Exception e ){
+					check = false;
+					Exception exception = new AttendanceDetailMobileRecordDateFormatException( e, wrapIn.getRecordDateString() );
+					result.error( exception );
+					logger.error( exception, currentPerson, request, null);
+				}				
+			}else{
+				attendanceDetailMobile.setRecordDateString( dateOperation.getNowDate() ); //打卡日期
 			}
 		}
 		if( check ){
@@ -340,43 +337,42 @@ public class AttendanceDetailMobileAction extends StandardJaxrsAction{
 				result.setData( wrapOutId );
 			} catch (Exception e) {
 				check = false;
-				result.error( new Exception("系统在保存打卡数据信息时发生异常。" ) );
-				result.setUserMessage( "系统在保存打卡数据信息时发生异常。" );
-				logger.error("system save attendanceDetailMobile got an exception.", e);
+				Exception exception = new AttendanceDetailMobileSaveException( e );
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}
 		}
 		return ResponseFactory.getDefaultActionResultResponse(result);
 	}
 	
-	@HttpMethodDescribe(value = "根据ID删除AttendanceDetailMobile数据对象.", response = WrapOutMessage.class)
+	@HttpMethodDescribe(value = "根据ID删除AttendanceDetailMobile数据对象.", response = WrapOutId.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response delete(@Context HttpServletRequest request, @PathParam("id") String id) {
-		ActionResult<WrapOutMessage> result = new ActionResult<>();
-		WrapOutMessage wrapOutMessage = new WrapOutMessage();
+		ActionResult<WrapOutId> result = new ActionResult<>();
+		EffectivePerson currentPerson = this.effectivePerson( request );
 		try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
 			//先判断需要操作的应用信息是否存在,根据ID进行一次查询,如果不存在不允许继续操作
 			AttendanceDetailMobile attendanceDetailMobile = emc.find(id, AttendanceDetailMobile.class);
-			if (null == attendanceDetailMobile) {
-				wrapOutMessage.setStatus("ERROR");
-				wrapOutMessage.setMessage( "需要删除的打卡数据信息不存在。id=" + id );
+			if ( null == attendanceDetailMobile ) {
+				Exception exception = new AttendanceDetaillMobileNotExistsException( id );
+				result.error( exception );
+				logger.error( exception, currentPerson, request, null);
 			}else{
 				//进行数据库持久化操作				
 				emc.beginTransaction( AttendanceDetailMobile.class );
 				emc.remove( attendanceDetailMobile, CheckRemoveType.all );
-				emc.commit();			
-				wrapOutMessage.setStatus("SUCCESS");
-				wrapOutMessage.setMessage( "成功删除打卡数据信息。id=" + id );
+				emc.commit();
+				result.setData( new WrapOutId(id) );
+				logger.info( "成功删除打卡数据信息。id=" + id );
 			}			
 		} catch ( Exception e ) {
-			e.printStackTrace();
-			wrapOutMessage.setStatus("ERROR");
-			wrapOutMessage.setMessage( "删除打卡数据过程中发生异常。" );
-			wrapOutMessage.setExceptionMessage( e.getMessage() );
+			Exception exception = new AttendanceDetaillMobileNotExistsException( id );
+			result.error( exception );
+			logger.error( exception, currentPerson, request, null);
 		}
-		result.setData( wrapOutMessage );
 		return ResponseFactory.getDefaultActionResultResponse(result);
 	}
 }

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileCountException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileCountException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+	
+	AttendanceDetailMobileCountException(Exception e, String empNo, String empName, String signDescription, String startDate, String endDate) {
+		super("根据条件查询员工手机打卡信息条目数时发生异常.EmpNo:"+ empNo +", EmpName:"+ empName +", SignDescription:"+ signDescription +", StartDate:"+ startDate +", EndDate:" + endDate, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileDeleteException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileDeleteException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileDeleteException( Throwable e, String id ) {
+		super("系统在保存员工手机打卡信息时发生异常.ID:" + id, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileEndDateFormatException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileEndDateFormatException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileEndDateFormatException( Throwable e, String date ) {
+		super("查询结束日期格式异常,格式:yyyy-mm-dd.日期:" + date, e);
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileIdEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileIdEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileIdEmptyException() {
+		super("员工手机打卡记录ID为空,无法进行数据查询." );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileLatitudeEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileLatitudeEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileLatitudeEmptyException() {
+		super("员工手机打卡信息中打卡地址纬度信息不能为空." );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileListByParameterException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileListByParameterException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+	
+	AttendanceDetailMobileListByParameterException(Exception e, String empNo, String empName, String signDescription, String startDate, String endDate) {
+		super("根据条件查询员工手机打卡信息列表时发生异常.EmpNo:"+ empNo +", EmpName:"+ empName +", SignDescription:"+ signDescription +", StartDate:"+ startDate +", EndDate:" + endDate, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileLongitudeEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileLongitudeEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileLongitudeEmptyException() {
+		super("员工手机打卡信息中打卡地址经度信息不能为空." );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileQueryByIdException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileQueryByIdException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileQueryByIdException( Throwable e, String id ) {
+		super("系统在根据ID查询员工手机打卡信息时发生异常!ID:" + id, e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileQueryParameterEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileQueryParameterEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileQueryParameterEmptyException() {
+		super("员工号,员工姓名和查询日期不能全部为空, 无法继续进行查询操作。" );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileRecordAddressEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileRecordAddressEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileRecordAddressEmptyException() {
+		super("员工手机打卡信息中打卡地址描述不能为空." );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileRecordDateEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileRecordDateEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileRecordDateEmptyException() {
+		super("员工手机打卡信息中打卡日期不能为空,格式: yyyy-mm-dd." );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileRecordDateFormatException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileRecordDateFormatException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileRecordDateFormatException(Exception e, String recordDateString) {
+		super("员工手机打卡信息中打卡日期格式异常,格式: yyyy-mm-dd. 日期:" + recordDateString );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileSaveException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileSaveException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileSaveException( Throwable e ) {
+		super("系统在保存员工手机打卡信息时发生异常.", e );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileSignTimeEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileSignTimeEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileSignTimeEmptyException() {
+		super("员工手机打卡信息中打卡时间不能为空,格式: HH:mm:ss." );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileSignTimeFormatException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileSignTimeFormatException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileSignTimeFormatException(Exception e, String signTime) {
+		super("员工手机打卡信息中打卡时间格式异常,格式:  HH:mm:ss. 时间:" + signTime );
+	}
+}

+ 12 - 0
x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileStartDateFormatException.java

@@ -0,0 +1,12 @@
+package com.x.attendance.assemble.control.jaxrs.attendancedetail;
+
+import com.x.base.core.exception.PromptException;
+
+class AttendanceDetailMobileStartDateFormatException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	AttendanceDetailMobileStartDateFormatException( Throwable e, String date ) {
+		super("查询开始日期格式异常,格式:yyyy-mm-dd.日期:" + date, e);
+	}
+}

Неке датотеке нису приказане због велике количине промена