Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ghsby
o2oa
提交
0233947d
o2oa
项目概览
ghsby
/
o2oa
落后 Fork 源项目 2880 个版本
Fork自
浙江兰德纵横网络技术股份有限公司 / o2oa
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
o2oa
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0233947d
编写于
7月 15, 2020
作者:
L
luojing
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
考勤新增部分更新打卡记录接口
上级
819c0b70
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
359 addition
and
2 deletion
+359
-2
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailFactory.java
...nce/assemble/control/factory/AttendanceDetailFactory.java
+23
-0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionReciveSingleAttendance.java
.../jaxrs/attendancedetail/ActionReciveSingleAttendance.java
+258
-0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailAction.java
...ontrol/jaxrs/attendancedetail/AttendanceDetailAction.java
+26
-0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ExceptionSingleDetailNotExists.java
...axrs/attendancedetail/ExceptionSingleDetailNotExists.java
+12
-0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailService.java
...nce/assemble/control/service/AttendanceDetailService.java
+20
-2
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailServiceAdv.java
.../assemble/control/service/AttendanceDetailServiceAdv.java
+20
-0
未找到文件。
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailFactory.java
浏览文件 @
0233947d
...
...
@@ -535,6 +535,29 @@ public class AttendanceDetailFactory extends AbstractFactory {
return
em
.
createQuery
(
cq
.
where
(
p
)).
getResultList
();
}
//根据人员和打卡日期查找打卡记录
public
List
<
String
>
listDetailByNameAndDate
(
String
user
,
String
dateStr
)
throws
Exception
{
if
(
user
==
null
||
user
.
isEmpty
()
||
dateStr
==
null
){
return
null
;
}
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
));
//一般始终为true, id is not null
Predicate
p
=
cb
.
isNotNull
(
root
.
get
(
AttendanceDetail_
.
id
)
);
if
(
StringUtils
.
isNotEmpty
(
user
)
){
p
=
cb
.
and
(
p
,
cb
.
equal
(
root
.
get
(
AttendanceDetail_
.
empName
),
user
));
}
if
(
StringUtils
.
isNotEmpty
(
dateStr
)
){
p
=
cb
.
and
(
p
,
cb
.
equal
(
root
.
get
(
AttendanceDetail_
.
recordDateString
),
dateStr
));
}
return
em
.
createQuery
(
cq
.
where
(
p
)).
getResultList
();
}
//@MethodDescribe("按年份月份查询某组织的打卡数据记录列表")
public
List
<
String
>
listUnitAttendanceDetailByYearAndMonth
(
List
<
String
>
unitNames
,
String
year
,
String
month
)
throws
Exception
{
EntityManager
em
=
this
.
entityManagerContainer
().
get
(
AttendanceDetail
.
class
);
...
...
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionReciveSingleAttendance.java
0 → 100644
浏览文件 @
0233947d
package
com.x.attendance.assemble.control.jaxrs.attendancedetail
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
javax.persistence.Column
;
import
javax.servlet.http.HttpServletRequest
;
import
com.google.gson.JsonElement
;
import
com.x.attendance.assemble.common.date.DateOperation
;
import
com.x.attendance.assemble.control.ExceptionWrapInConvert
;
import
com.x.attendance.assemble.control.ThisApplication
;
import
com.x.attendance.entity.AttendanceDetail
;
import
com.x.attendance.entity.AttendanceScheduleSetting
;
import
com.x.attendance.entity.AttendanceSelfHoliday
;
import
com.x.attendance.entity.AttendanceStatisticalCycle
;
import
com.x.attendance.entity.AttendanceWorkDayConfig
;
import
com.x.base.core.entity.JpaObject
;
import
com.x.base.core.entity.annotation.CheckPersist
;
import
com.x.base.core.project.annotation.FieldDescribe
;
import
com.x.base.core.project.http.ActionResult
;
import
com.x.base.core.project.http.EffectivePerson
;
import
com.x.base.core.project.jaxrs.WoId
;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
com.x.base.core.project.organization.Person
;
import
com.x.base.core.project.tools.ListTools
;
import
org.apache.commons.lang3.StringUtils
;
public
class
ActionReciveSingleAttendance
extends
BaseAction
{
/*
* =============================================================================
* =====用于部分更新打卡数据,例如只更新下午打卡数据而不影响上午的打卡数据
* =============================================================================
* =====
*/
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
ActionReciveSingleAttendance
.
class
);
protected
ActionResult
<
Wo
>
execute
(
HttpServletRequest
request
,
EffectivePerson
effectivePerson
,
JsonElement
jsonElement
)
throws
Exception
{
ActionResult
<
Wo
>
result
=
new
ActionResult
<>();
DateOperation
dateOperation
=
new
DateOperation
();
AttendanceDetail
attendanceDetail
=
null
;
Boolean
check
=
true
;
List
<
String
>
ids
=
null
;
Wi
wrapIn
=
null
;
try
{
wrapIn
=
this
.
convertToWrapIn
(
jsonElement
,
Wi
.
class
);
}
catch
(
Exception
e
)
{
check
=
false
;
Exception
exception
=
new
ExceptionWrapInConvert
(
e
,
jsonElement
);
result
.
error
(
exception
);
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
}
if
(
check
)
{
if
(
wrapIn
.
getRecordDateString
()
==
null
||
wrapIn
.
getRecordDateString
().
isEmpty
())
{
check
=
false
;
Exception
exception
=
new
ExceptionRecordDateEmpty
();
result
.
error
(
exception
);
}
}
if
(
check
)
{
if
(
wrapIn
.
getEmpName
()
==
null
||
wrapIn
.
getEmpName
().
isEmpty
())
{
check
=
false
;
Exception
exception
=
new
ExceptionPersonNameEmpty
();
result
.
error
(
exception
);
}
}
Date
datetime
=
null
;
if
(
check
)
{
try
{
ids
=
attendanceDetailServiceAdv
.
listDetailByNameAndDate
(
wrapIn
.
getEmpName
(),
wrapIn
.
getRecordDateString
()
);
if
(
ListTools
.
isNotEmpty
(
ids
)){
attendanceDetail
=
attendanceDetailServiceAdv
.
get
(
ids
.
get
(
0
));
if
(
attendanceDetail
==
null
){
/*try {
datetime = dateOperation.getDateFromString(wrapIn.getRecordDateString());
attendanceDetail.setRecordDate(datetime);
attendanceDetail.setRecordDateString(dateOperation.getDateStringFromDate(datetime, "YYYY-MM-DD"));
attendanceDetail.setYearString(dateOperation.getYear(datetime));
attendanceDetail.setMonthString(dateOperation.getMonth(datetime));
} catch (Exception e) {
check = false;
Exception exception = new ExceptionAttendanceDetailProcess(e, "员工打卡信息中打卡日期格式异常,格式: yyyy-mm-dd. 日期:" + wrapIn.getRecordDateString());
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}else{*/
check
=
false
;
Exception
exception
=
new
ExceptionDetailNotExists
(
ids
.
get
(
0
));
result
.
error
(
exception
);
}
}
else
{
check
=
false
;
Exception
exception
=
new
ExceptionSingleDetailNotExists
();
result
.
error
(
exception
);
}
}
catch
(
Exception
e
)
{
check
=
false
;
Exception
exception
=
new
ExceptionAttendanceDetailProcess
(
e
,
"系统在根据员工姓名,打卡日期查询打卡详细信息ID列表时发生异常!"
+
"Name:"
+
wrapIn
.
getEmpName
()
+
", RecordDate:"
+
wrapIn
.
getRecordDateString
());
result
.
error
(
exception
);
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
}
}
if
(
check
)
{
if
(
wrapIn
.
getOnDutyTime
()
!=
null
&&
wrapIn
.
getOnDutyTime
().
trim
().
length
()
>
0
)
{
try
{
datetime
=
dateOperation
.
getDateFromString
(
wrapIn
.
getOnDutyTime
());
attendanceDetail
.
setOnDutyTime
(
dateOperation
.
getDateStringFromDate
(
datetime
,
"HH:mm:ss"
));
// 上班打卡时间
}
catch
(
Exception
e
)
{
check
=
false
;
Exception
exception
=
new
ExceptionAttendanceDetailProcess
(
e
,
"员工上班打卡时间格式异常,格式: HH:mm:ss. 日期:"
+
wrapIn
.
getOnDutyTime
());
result
.
error
(
exception
);
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
}
}
}
if
(
check
)
{
if
(
wrapIn
.
getOffDutyTime
()
!=
null
&&
wrapIn
.
getOffDutyTime
().
trim
().
length
()
>
0
)
{
try
{
datetime
=
dateOperation
.
getDateFromString
(
wrapIn
.
getOffDutyTime
());
attendanceDetail
.
setOffDutyTime
(
dateOperation
.
getDateStringFromDate
(
datetime
,
"HH:mm:ss"
));
// 上班打卡时间
}
catch
(
Exception
e
)
{
check
=
false
;
Exception
exception
=
new
ExceptionAttendanceDetailProcess
(
e
,
"员工下班打卡时间格式异常,格式: HH:mm:ss. 日期:"
+
wrapIn
.
getOffDutyTime
());
result
.
error
(
exception
);
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
}
}
}
if
(
check
){
String
distinguishedName
=
wrapIn
.
getEmpName
();
if
(
StringUtils
.
isEmpty
(
distinguishedName
)){
distinguishedName
=
effectivePerson
.
getDistinguishedName
();
}
Person
person
=
userManagerService
.
getPersonObjByName
(
distinguishedName
);
if
(
person
!=
null
){
attendanceDetail
.
setEmpName
(
person
.
getDistinguishedName
()
);
if
(
StringUtils
.
isEmpty
(
wrapIn
.
getEmpNo
()
)){
if
(
person
!=
null
){
if
(
StringUtils
.
isNotEmpty
(
person
.
getEmployee
()
)){
attendanceDetail
.
setEmpNo
(
person
.
getEmployee
());
}
else
{
attendanceDetail
.
setEmpNo
(
distinguishedName
);
}
}
}
}
else
{
//人员不存在
check
=
false
;
Exception
exception
=
new
ExceptionAttendanceDetailProcess
(
"考勤人员不存在.DistinguishedName:"
+
distinguishedName
);
result
.
error
(
exception
);
}
}
if
(
check
)
{
try
{
attendanceDetail
=
attendanceDetailServiceAdv
.
save
(
attendanceDetail
);
result
.
setData
(
new
Wo
(
attendanceDetail
.
getId
()
));
}
catch
(
Exception
e
)
{
check
=
false
;
Exception
exception
=
new
ExceptionAttendanceDetailProcess
(
e
,
"系统在保存员工打卡信息时发生异常。"
);
result
.
error
(
exception
);
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
}
}
if
(
check
)
{
//分析保存好的考勤数据
try
{
ThisApplication
.
detailAnalyseQueue
.
send
(
attendanceDetail
.
getId
()
);
}
catch
(
Exception
e1
)
{
e1
.
printStackTrace
();
}
}
return
result
;
}
public
static
class
Wi
{
@FieldDescribe
(
"员工标识,<font color='red'>必填</font>,员工的distinguishedName."
)
private
String
empName
=
null
;
private
String
empNo
=
null
;
@FieldDescribe
(
"打卡日期,格式yyyy-mm-dd,可以为空."
)
private
String
recordDateString
=
null
;
@FieldDescribe
(
"上午上班打卡时间,格式hh24:mi:ss,可以为空,为空就是未打卡."
)
private
String
onDutyTime
=
null
;
@FieldDescribe
(
"上班下午打卡签退时间,打卡策略2和3时使用,格式hh24:mi:ss,可以为空,为空就是未打卡."
)
private
String
morningOffdutyTime
;
@FieldDescribe
(
"下午上班打卡签到时间,打卡策略2和3时使用,格式hh24:mi:ss,可以为空,为空就是未打卡."
)
private
String
afternoonOnDutyTime
;
@FieldDescribe
(
"下午下班打卡时间,hh24:mi:ss,可以为空,为空就是未打卡."
)
private
String
offDutyTime
=
null
;
public
String
getMorningOffdutyTime
()
{
return
morningOffdutyTime
;
}
public
void
setMorningOffdutyTime
(
String
morningOffdutyTime
)
{
this
.
morningOffdutyTime
=
morningOffdutyTime
;
}
public
String
getAfternoonOnDutyTime
()
{
return
afternoonOnDutyTime
;
}
public
void
setAfternoonOnDutyTime
(
String
afternoonOnDutyTime
)
{
this
.
afternoonOnDutyTime
=
afternoonOnDutyTime
;
}
public
String
getEmpName
()
{
return
empName
;
}
public
void
setEmpName
(
String
empName
)
{
this
.
empName
=
empName
;
}
public
String
getEmpNo
()
{
return
empNo
;
}
public
void
setEmpNo
(
String
empNo
)
{
this
.
empNo
=
empNo
;
}
public
String
getRecordDateString
()
{
return
recordDateString
;
}
public
void
setRecordDateString
(
String
recordDateString
)
{
this
.
recordDateString
=
recordDateString
;
}
public
String
getOnDutyTime
()
{
return
onDutyTime
;
}
public
void
setOnDutyTime
(
String
onDutyTime
)
{
this
.
onDutyTime
=
onDutyTime
;
}
public
String
getOffDutyTime
()
{
return
offDutyTime
;
}
public
void
setOffDutyTime
(
String
offDutyTime
)
{
this
.
offDutyTime
=
offDutyTime
;
}
}
public
static
class
Wo
extends
WoId
{
public
Wo
(
String
id
)
{
setId
(
id
);
}
}
}
\ No newline at end of file
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailAction.java
浏览文件 @
0233947d
...
...
@@ -398,6 +398,32 @@ public class AttendanceDetailAction extends StandardJaxrsAction {
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
/**
* 部分更新打卡记录
*/
@JaxrsMethodDescribe
(
value
=
"部分更新打卡记录,接入完成后直接分析"
,
action
=
ActionReciveSingleAttendance
.
class
)
@Path
(
"reciveSingle"
)
@POST
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
reciveSingle
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
JsonElement
jsonElement
)
{
ActionResult
<
ActionReciveSingleAttendance
.
Wo
>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
Boolean
check
=
true
;
if
(
check
)
{
try
{
result
=
new
ActionReciveSingleAttendance
().
execute
(
request
,
effectivePerson
,
jsonElement
);
}
catch
(
Exception
e
)
{
result
=
new
ActionResult
<>();
Exception
exception
=
new
ExceptionAttendanceDetailProcess
(
e
,
"接入上下班打卡信息时发生异常!"
);
result
.
error
(
exception
);
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
}
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
@JaxrsMethodDescribe
(
value
=
"根据ID删除打卡信息记录"
,
action
=
ActionDelete
.
class
)
@DELETE
...
...
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ExceptionSingleDetailNotExists.java
0 → 100644
浏览文件 @
0233947d
package
com.x.attendance.assemble.control.jaxrs.attendancedetail
;
import
com.x.base.core.project.exception.PromptException
;
class
ExceptionSingleDetailNotExists
extends
PromptException
{
private
static
final
long
serialVersionUID
=
1859164370743532895L
;
public
ExceptionSingleDetailNotExists
(
)
{
super
(
"根据人员和打卡日期查找员工打卡信息不存在!"
);
}
}
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailService.java
浏览文件 @
0233947d
...
...
@@ -109,6 +109,12 @@ public class AttendanceDetailService {
Business
business
=
new
Business
(
emc
);
return
business
.
getAttendanceDetailFactory
().
listDetailByCycleYearAndMonthWithOutStatus
(
user
,
year
,
month
);
}
//根据人员和打卡日期查找打卡记录
public
List
<
String
>
listDetailByNameAndDate
(
EntityManagerContainer
emc
,
String
user
,
String
datestr
)
throws
Exception
{
Business
business
=
new
Business
(
emc
);
return
business
.
getAttendanceDetailFactory
().
listDetailByNameAndDate
(
user
,
datestr
);
}
public
List
<
String
>
listUserAttendanceDetailByCycleYearAndMonth
(
EntityManagerContainer
emc
,
String
q_empName
,
String
cycleYear
,
String
cycleMonth
)
throws
Exception
{
...
...
@@ -206,9 +212,10 @@ public class AttendanceDetailService {
attendanceDetail_old
.
setRecordDateString
(
attendanceDetail
.
getRecordDateString
()
);
attendanceDetail_old
.
setRecordStatus
(
0
);
attendanceDetail_old
.
setOnDutyTime
(
attendanceDetail
.
getOnDutyTime
()
);
attendanceDetail_old
.
setOffDutyTime
(
attendanceDetail
.
getO
nWork
Time
()
);
attendanceDetail_old
.
setOffDutyTime
(
attendanceDetail
.
getO
ffDuty
Time
()
);
emc
.
beginTransaction
(
AttendanceSetting
.
class
);
//emc.beginTransaction( AttendanceSetting.class );
emc
.
beginTransaction
(
AttendanceDetail
.
class
);
emc
.
check
(
attendanceDetail_old
,
CheckPersistType
.
all
);
emc
.
commit
();
attendanceDetail
=
attendanceDetail_old
;
...
...
@@ -224,6 +231,17 @@ public class AttendanceDetailService {
return
attendanceDetail
;
}
public
AttendanceDetail
saveSingle
(
EntityManagerContainer
emc
,
AttendanceDetail
attendanceDetail
)
throws
Exception
{
if
(
attendanceDetail
==
null
){
throw
new
Exception
(
"attendanceDetail can not be null!"
);
}
emc
.
beginTransaction
(
AttendanceDetail
.
class
);
emc
.
persist
(
attendanceDetail
,
CheckPersistType
.
all
);
emc
.
commit
();
return
attendanceDetail
;
}
// public AttendanceDetail save( EntityManagerContainer emc, AttendanceDetail attendanceDetail ) throws Exception {
// if( attendanceDetail == null ){
// throw new Exception("attendanceDetail can not be null!");
...
...
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailServiceAdv.java
浏览文件 @
0233947d
...
...
@@ -104,6 +104,15 @@ public class AttendanceDetailServiceAdv {
throw
e
;
}
}
//根据人员和打卡日期查找打卡记录
public
List
<
String
>
listDetailByNameAndDate
(
String
q_empName
,
String
datestr
)
throws
Exception
{
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
return
attendanceDetailService
.
listDetailByNameAndDate
(
emc
,
q_empName
,
datestr
);
}
catch
(
Exception
e
)
{
throw
e
;
}
}
public
List
<
String
>
listUserAttendanceDetailByCycleYearAndMonth
(
String
q_empName
,
String
cycleYear
,
String
cycleMonth
)
throws
Exception
{
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
...
...
@@ -188,6 +197,17 @@ public class AttendanceDetailServiceAdv {
throw
e
;
}
}
public
synchronized
AttendanceDetail
saveSingle
(
AttendanceDetail
attendanceDetail
)
throws
Exception
{
if
(
attendanceDetail
==
null
){
throw
new
Exception
(
"attendanceDetail is null!"
);
}
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
return
attendanceDetailService
.
saveSingle
(
emc
,
attendanceDetail
);
}
catch
(
Exception
e
)
{
throw
e
;
}
}
public
AttendanceDetailMobile
save
(
AttendanceDetailMobile
attendanceDetailMobile
)
throws
Exception
{
if
(
attendanceDetailMobile
==
null
){
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录