Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
8
8timerapiv200
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
8timerv2
8timerapiv200
Commits
c928be85
Commit
c928be85
authored
Jul 15, 2020
by
lal
Committed by
chenzg
Jul 05, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提交
parent
131e5ab3
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
763 additions
and
576 deletions
+763
-576
src/main/java/cn/timer/api/controller/kqgl/ClockInController.java
+642
-567
src/main/java/cn/timer/api/controller/kqgl/ClockInTool.java
+13
-0
src/main/java/cn/timer/api/controller/kqgl/atttimer/AttendanceTaskTiming.java
+24
-6
src/main/java/cn/timer/api/controller/spmk/SpmkController.java
+41
-0
src/main/java/cn/timer/api/dao/kqmk/KqglAssoRelationSummaryMapper.java
+2
-0
src/main/java/cn/timer/api/dao/spmk/SpmkApproveSummaryMapper.java
+4
-0
src/main/java/cn/timer/api/dto/kqmk/AttSchedule.java
+1
-0
src/main/java/cn/timer/api/dto/spmk/ApprovedQuantityDto.java
+23
-0
src/main/java/cn/timer/api/dto/spmk/MySummaryQueryDto.java
+3
-3
src/main/resources/mapping/kqmk/KqglAssoRelationSummaryMapper.xml
+10
-0
No files found.
src/main/java/cn/timer/api/controller/kqgl/ClockInController.java
View file @
c928be85
...
...
@@ -58,6 +58,7 @@ import cn.timer.api.dao.kqmk.KqglAssoBcszMapper;
import
cn.timer.api.dao.kqmk.KqglAssoDkjlMapper
;
import
cn.timer.api.dao.kqmk.KqglAssoDkmxMapper
;
import
cn.timer.api.dao.kqmk.KqglAssoPbmxMapper
;
import
cn.timer.api.dao.kqmk.KqglAssoRelationSummaryMapper
;
import
cn.timer.api.dao.kqmk.KqglAssoTeshuMapper
;
import
cn.timer.api.dao.kqmk.KqglMainKqzMapper
;
import
cn.timer.api.dto.kqmk.AttClockMethod
;
...
...
@@ -89,6 +90,8 @@ public class ClockInController {
private
KqglAssoDkjlMapper
kqglassodkjlmapper
;
@Autowired
private
KqglAssoBcszMapper
kqglassobcszmapper
;
@Autowired
private
KqglAssoRelationSummaryMapper
kqglassorelationsummarymapper
;
SimpleDateFormat
sdf1
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
...
...
@@ -119,6 +122,7 @@ public class ClockInController {
String
msg
=
"未知错误,请联系管理员"
;
int
sbyf
=
1
;
//0:失败;1:成功
int
status_
=
0
;
JSONObject
jsonArray
=
new
JSONObject
(
json
);
String
asDevId
=
jsonArray
.
get
(
"dev_id"
).
toString
();
//考勤机编码
...
...
@@ -139,6 +143,8 @@ public class ClockInController {
/*******/
long
time_
=
DateUtil
.
getStringTime
(
sStdIoTime
,
"yyyy-MM-dd HH:mm:ss"
);
//打卡时间戳
String
putime
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
).
format
(
time_
);
//转换打卡时间格式 年月日
String
putimehhmm
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
);
//转换打卡时间格式 年月日
//打卡当天开始时间,打卡当天结束时间
Long
startDate
=
DateUtil
.
getStartTime
(
0
,
DateUtil
.
getStringTime
(
putime
,
"yyyy-MM-dd"
)).
getTime
();
Long
endDate
=
DateUtil
.
getnowEndTime
(
23
,
DateUtil
.
getStringTime
(
putime
,
"yyyy-MM-dd"
)).
getTime
();
...
...
@@ -161,7 +167,7 @@ public class ClockInController {
* 当考勤组为“固定排班”和“自定义排班”时 方可使用
*/
if
(
attdate
.
getAttgrouptype
()
!=
3
)
{
//查询打卡当天是否有记录**********************************
//查询打卡当天是否有记录**********************************
KqglAssoDkmx
dkmc
=
KqglAssoDkmx
.
builder
().
build
();
String
dakariqi
=
new
SimpleDateFormat
(
"yy-MM-dd"
).
format
(
Double
.
valueOf
(
startDateyesterday
))+
" "
+
ClockInTool
.
dateToWeek2
(
yesterday
);
//检查昨日的班次是否存在次日打卡
...
...
@@ -233,557 +239,573 @@ public class ClockInController {
if
(
EmptyUtil
.
isEmpty
(
attdate
.
getAttsch
()))
{
msg
=
"当前未排班"
;
sbyf
=
0
;
status_
=
2
;
}
else
{
long
starttime1
=
0
,
starttime1ks
=
0
,
starttime1js
=
0
,
endtime1
=
0
,
endtime1ks
=
0
,
endtime1js
=
0
,
starttime2
=
0
,
starttime2ks
=
0
,
starttime2js
=
0
,
endtime2
=
0
,
endtime2ks
=
0
,
endtime2js
=
0
,
starttime3
=
0
,
starttime3ks
=
0
,
starttime3js
=
0
,
endtime3
=
0
,
endtime3ks
=
0
,
endtime3js
=
0
;
if
(
attdate
.
getAttsch
().
size
()
>
0
)
{
List
<
AttSchedule
>
ash
=
attdate
.
getAttsch
();
int
y
=
0
;
clockt
.
setShifid
(
ash
.
get
(
y
).
getId
());
shifid
=
ash
.
get
(
y
).
getId
();
//班次id
if
(
attdate
.
getAttsch
().
size
()
==
2
||
attdate
.
getAttsch
().
size
()
==
4
||
attdate
.
getAttsch
().
size
()
==
6
)
{
starttime1
=
ash
.
get
(
0
).
getTime
();
starttime1ks
=
ash
.
get
(
0
).
getStarttime
();
starttime1js
=
ash
.
get
(
0
).
getEndtime
();
endtime1
=
ash
.
get
(
1
).
getTime
();
endtime1ks
=
ash
.
get
(
1
).
getStarttime
();
endtime1js
=
ash
.
get
(
1
).
getEndtime
();
}
if
(
attdate
.
getAttsch
().
size
()
==
4
||
attdate
.
getAttsch
().
size
()
==
6
)
{
starttime2
=
ash
.
get
(
2
).
getTime
();
starttime2ks
=
ash
.
get
(
2
).
getStarttime
();
starttime2js
=
ash
.
get
(
2
).
getEndtime
();
endtime2
=
ash
.
get
(
3
).
getTime
();
endtime2ks
=
ash
.
get
(
3
).
getStarttime
();
endtime2js
=
ash
.
get
(
3
).
getEndtime
();
}
if
(
attdate
.
getAttsch
().
size
()
==
6
)
{
starttime3
=
ash
.
get
(
4
).
getTime
();
starttime3ks
=
ash
.
get
(
4
).
getStarttime
();
starttime3js
=
ash
.
get
(
4
).
getEndtime
();
endtime3
=
ash
.
get
(
5
).
getTime
();
endtime3ks
=
ash
.
get
(
5
).
getStarttime
();
endtime3js
=
ash
.
get
(
5
).
getEndtime
();
}
if
(
dkmc
==
null
)
{
kskd
=
false
;
if
(
attdate
.
getAttsch
().
size
()
==
2
)
{
//一套上下班 上班1
Date
sd1
=
df1
.
parse
(
ClockInTool
.
stampToDate
(
String
.
valueOf
(
starttime1
)));
//应打卡时间
Date
sd2
=
df1
.
parse
(
sStdIoTime
);
//打卡时间
Date
sd3
=
df1
.
parse
(
ClockInTool
.
stampToDate
(
String
.
valueOf
(
endtime1
)));
//应打卡时间
if
(
sd2
.
before
(
sd3
))
{
atttype
=
1
;
}
if
(
sd2
.
after
(
sd1
)
&&
sd2
.
after
(
sd3
))
{
atttype
=
2
;
}
}
else
{
boolean
getinto
=
true
;
//打卡时间 对比班次 接近哪个时间就打哪个时间的卡
//排查请假是否在最后一次打卡范围内 查询当月的请假所有日期
KqglAssoRelationSummary
leainv
=
kqglassorelationsummarymapper
.
leaveinvesti
(
userid
,
2
,
putime
,
qyid
);
boolean
adopt
=
false
;
if
(
leainv
!=
null
)
{
adopt
=
ClockInTool
.
hourMinuteBetween
(
putimehhmm
,
leainv
.
getStartTime
().
substring
(
0
,
16
),
leainv
.
getEndTime
().
substring
(
0
,
16
),
"yyyy-MM-dd HH:mm"
);
}
if
(
adopt
)
{
msg
=
"已请假"
;
sbyf
=
0
;
status_
=
2
;
}
else
{
long
starttime1
=
0
,
starttime1ks
=
0
,
starttime1js
=
0
,
endtime1
=
0
,
endtime1ks
=
0
,
endtime1js
=
0
,
starttime2
=
0
,
starttime2ks
=
0
,
starttime2js
=
0
,
endtime2
=
0
,
endtime2ks
=
0
,
endtime2js
=
0
,
starttime3
=
0
,
starttime3ks
=
0
,
starttime3js
=
0
,
endtime3
=
0
,
endtime3ks
=
0
,
endtime3js
=
0
;
if
(
attdate
.
getAttsch
().
size
()
>
0
)
{
List
<
AttSchedule
>
ash
=
attdate
.
getAttsch
();
int
y
=
0
;
clockt
.
setShifid
(
ash
.
get
(
y
).
getId
());
shifid
=
ash
.
get
(
y
).
getId
();
//班次id
if
(
attdate
.
getAttsch
().
size
()
==
2
||
attdate
.
getAttsch
().
size
()
==
4
||
attdate
.
getAttsch
().
size
()
==
6
)
{
starttime1
=
ash
.
get
(
0
).
getTime
();
starttime1ks
=
ash
.
get
(
0
).
getStarttime
();
starttime1js
=
ash
.
get
(
0
).
getEndtime
();
endtime1
=
ash
.
get
(
1
).
getTime
();
endtime1ks
=
ash
.
get
(
1
).
getStarttime
();
endtime1js
=
ash
.
get
(
1
).
getEndtime
();
}
if
(
attdate
.
getAttsch
().
size
()
==
4
||
attdate
.
getAttsch
().
size
()
==
6
)
{
starttime2
=
ash
.
get
(
2
).
getTime
();
starttime2ks
=
ash
.
get
(
2
).
getStarttime
();
starttime2js
=
ash
.
get
(
2
).
getEndtime
();
endtime2
=
ash
.
get
(
3
).
getTime
();
endtime2ks
=
ash
.
get
(
3
).
getStarttime
();
endtime2js
=
ash
.
get
(
3
).
getEndtime
();
}
if
(
attdate
.
getAttsch
().
size
()
==
6
)
{
starttime3
=
ash
.
get
(
4
).
getTime
();
starttime3ks
=
ash
.
get
(
4
).
getStarttime
();
starttime3js
=
ash
.
get
(
4
).
getEndtime
();
endtime3
=
ash
.
get
(
5
).
getTime
();
endtime3ks
=
ash
.
get
(
5
).
getStarttime
();
endtime3js
=
ash
.
get
(
5
).
getEndtime
();
}
if
(
dkmc
==
null
)
{
kskd
=
false
;
if
(
attdate
.
getAttsch
().
size
()
==
2
)
{
//一套上下班 上班1
Date
sd1
=
df1
.
parse
(
ClockInTool
.
stampToDate
(
String
.
valueOf
(
starttime1
)));
//应打卡时间
Date
sd2
=
df1
.
parse
(
sStdIoTime
);
//打卡时间
Date
sd3
=
df1
.
parse
(
ClockInTool
.
stampToDate
(
String
.
valueOf
(
endtime1
)));
//应打卡时间
if
(
sd2
.
before
(
sd3
))
{
atttype
=
1
;
}
if
(
sd2
.
after
(
sd1
)
&&
sd2
.
after
(
sd3
))
{
atttype
=
2
;
}
}
else
{
boolean
getinto
=
true
;
//打卡时间 对比班次 接近哪个时间就打哪个时间的卡
if
(
attdate
.
getAttsch
().
size
()
==
4
||
attdate
.
getAttsch
().
size
()
==
6
)
{
//punchstart 应打卡开始时间 punchend:应打卡结束时间 time_:打卡时间
boolean
effectiveDate1
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime1ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime1js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate1
)
{
//在范围内就打卡
atttype
=
1
;
getinto
=
false
;
}
else
{
if
(
getinto
)
{
isRange
=
false
;
}
}
boolean
effectiveDate2
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime1ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime1js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate2
)
{
//在范围内就打卡
atttype
=
2
;
isRange
=
true
;
//在范围
getinto
=
false
;
}
else
{
if
(
getinto
)
{
isRange
=
false
;
}
}
boolean
effectiveDate3
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime2ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime2js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate3
)
{
//在范围内就打卡
atttype
=
3
;
isRange
=
true
;
//在范围
getinto
=
false
;
}
else
{
if
(
getinto
)
{
isRange
=
false
;
}
}
boolean
effectiveDate4
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime2ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime2js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate4
)
{
//在范围内就打卡
atttype
=
4
;
isRange
=
true
;
//在范围
getinto
=
false
;
}
else
{
if
(
getinto
)
{
isRange
=
false
;
}
}
}
if
(
attdate
.
getAttsch
().
size
()
==
6
)
{
boolean
effectiveDate5
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime3ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime3js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate5
)
{
//在范围内就打卡
atttype
=
5
;
isRange
=
true
;
//在范围
getinto
=
false
;
}
else
{
if
(
getinto
)
{
isRange
=
false
;
}
}
boolean
effectiveDate6
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime3ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime3js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate6
)
{
//在范围内就打卡
atttype
=
6
;
isRange
=
true
;
//在范围
getinto
=
false
;
}
else
{
if
(
getinto
)
{
isRange
=
false
;
}
}
}
}
execution_status
=
1
;
}
else
{
boolean
getinto2
=
true
;
execution_status
=
2
;
if
(
attdate
.
getAttsch
().
size
()
==
2
)
{
//下班1
if
(
dkmc
.
getSbdk1
()
!=
null
&&
dkmc
.
getXbdk1
()
==
null
){
//如果第二次后打卡,未超过上班时间 即为打卡失效
Date
sd1
=
df1
.
parse
(
ClockInTool
.
stampToDate
(
String
.
valueOf
(
starttime1
)));
//应打卡时间
Date
sd2
=
df1
.
parse
(
sStdIoTime
);
//打卡时间
if
(
sd1
.
after
(
sd2
))
{
sbdkkd
=
true
;
//打卡无效
// atttype = 1;
}
else
{
kskd
=
false
;
// atttype = 2;
}
}
else
{
//最后一次卡的时候 再继续打视为更新最后一次打卡
kskd
=
true
;
atttype
=
2
;
}
}
if
(
attdate
.
getAttsch
().
size
()
==
4
||
attdate
.
getAttsch
().
size
()
==
6
)
{
//punchstart 应打卡开始时间 punchend:应打卡结束时间 time_:打卡时间
boolean
effectiveDate1
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime1ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime1js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate1
)
{
//在范围内就打卡
atttype
=
1
;
getinto
=
false
;
}
else
{
if
(
getinto
)
{
isRange
=
false
;
if
(
dkmc
.
getSbdk1
()
!=
null
)
{
sbdkkd
=
true
;
//打卡无效
// atttype = 1;
}
else
{
atttype
=
1
;
getinto2
=
false
;
isRange
=
true
;
//在范围
}
}
else
{
if
(
getinto2
)
{
isRange
=
false
;
}
}
boolean
effectiveDate2
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime1ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime1js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate2
)
{
//在范围内就打卡
atttype
=
2
;
isRange
=
true
;
//在范围
getinto
=
false
;
}
else
{
if
(
getinto
)
{
isRange
=
false
;
if
(
dkmc
.
getXbdk1
()
!=
null
)
{
kskd
=
true
;
atttype
=
2
;
}
else
{
kskd
=
false
;
// atttype = 2;
getinto2
=
false
;
isRange
=
true
;
//在范围
}
}
boolean
effectiveDate3
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime2ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime2js
),
"yyyy-MM-dd HH:mm"
);
}
else
{
if
(
getinto2
)
{
isRange
=
false
;
}
}
boolean
effectiveDate3
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime2ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime2js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate3
)
{
//在范围内就打卡
atttype
=
3
;
isRange
=
true
;
//在范围
getinto
=
false
;
}
else
{
if
(
getinto
)
{
isRange
=
false
;
if
(
dkmc
.
getSbdk2
()
!=
null
)
{
sbdkkd
=
true
;
//
// atttype = 3;
}
else
{
atttype
=
3
;
getinto2
=
false
;
isRange
=
true
;
//在范围
}
}
else
{
if
(
getinto2
)
{
isRange
=
false
;
}
}
boolean
effectiveDate4
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime2ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime2js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate4
)
{
//在范围内就打卡
atttype
=
4
;
isRange
=
true
;
//在范围
getinto
=
false
;
}
else
{
if
(
getinto
)
{
isRange
=
false
;
if
(
dkmc
.
getXbdk2
()
!=
null
)
{
kskd
=
true
;
//更新最后一次打卡
atttype
=
4
;
}
else
{
kskd
=
false
;
// atttype = 4;
getinto2
=
false
;
isRange
=
true
;
//在范围
}
}
else
{
if
(
getinto2
)
{
isRange
=
false
;
}
}
}
if
(
attdate
.
getAttsch
().
size
()
==
6
)
{
boolean
effectiveDate5
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime3ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime3js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate5
)
{
//在范围内就打卡
atttype
=
5
;
isRange
=
true
;
//在范围
getinto
=
false
;
}
else
{
if
(
getinto
)
{
isRange
=
false
;
if
(
dkmc
.
getSbdk2
()
!=
null
)
{
sbdkkd
=
true
;
//
// atttype = 5;
}
else
{
atttype
=
5
;
getinto2
=
false
;
isRange
=
true
;
//在范围
}
}
else
{
if
(
getinto2
)
{
isRange
=
false
;
}
}
boolean
effectiveDate6
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime3ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime3js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate6
)
{
//在范围内就打卡
atttype
=
6
;
isRange
=
true
;
//在范围
getinto
=
false
;
}
else
{
if
(
getinto
)
{
isRange
=
false
;
if
(
dkmc
.
getXbdk2
()
!=
null
)
{
kskd
=
true
;
////更新最后一次打卡
atttype
=
6
;
}
else
{
kskd
=
false
;
// atttype = 6;
getinto2
=
false
;
isRange
=
true
;
//在范围
}
}
else
{
if
(
getinto2
)
{
isRange
=
false
;
}
}
}
}
execution_status
=
1
;
}
else
{
boolean
getinto2
=
true
;
execution_status
=
2
;
if
(
attdate
.
getAttsch
().
size
()
==
2
)
{
//下班1
if
(
dkmc
.
getSbdk1
()
!=
null
&&
dkmc
.
getXbdk1
()
==
null
){
//如果第二次后打卡,未超过上班时间 即为打卡失效
Date
sd1
=
df1
.
parse
(
ClockInTool
.
stampToDate
(
String
.
valueOf
(
starttime1
)));
//应打卡时间
Date
sd2
=
df1
.
parse
(
sStdIoTime
);
//打卡时间
if
(
sd1
.
after
(
sd2
))
{
sbdkkd
=
true
;
//打卡无效
// atttype = 1;
}
else
{
kskd
=
false
;
// atttype = 2;
}
}
else
{
//最后一次卡的时候 再继续打视为更新最后一次打卡
kskd
=
true
;
atttype
=
2
;
}
}
if
(
attdate
.
getAttsch
().
size
()
==
4
||
attdate
.
getAttsch
().
size
()
==
6
)
{
boolean
effectiveDate1
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime1ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime1js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate1
)
{
//在范围内就打卡
if
(
dkmc
.
getSbdk1
()
!=
null
)
{
sbdkkd
=
true
;
//打卡无效
// atttype = 1;
}
else
{
atttype
=
1
;
getinto2
=
false
;
isRange
=
true
;
//在范围
}
}
else
{
if
(
getinto2
)
{
isRange
=
false
;
}
}
boolean
effectiveDate2
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime1ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime1js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate2
)
{
//在范围内就打卡
if
(
dkmc
.
getXbdk1
()
!=
null
)
{
kskd
=
true
;
atttype
=
2
;
}
else
{
kskd
=
false
;
// atttype = 2;
getinto2
=
false
;
isRange
=
true
;
//在范围
}
}
else
{
if
(
getinto2
)
{
isRange
=
false
;
}
}
boolean
effectiveDate3
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime2ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime2js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate3
)
{
//在范围内就打卡
if
(
dkmc
.
getSbdk2
()
!=
null
)
{
sbdkkd
=
true
;
//
// atttype = 3;
}
else
{
atttype
=
3
;
getinto2
=
false
;
isRange
=
true
;
//在范围
}
}
else
{
if
(
getinto2
)
{
isRange
=
false
;
}
}
boolean
effectiveDate4
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime2ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime2js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate4
)
{
//在范围内就打卡
if
(
dkmc
.
getXbdk2
()
!=
null
)
{
kskd
=
true
;
//更新最后一次打卡
atttype
=
4
;
}
else
{
kskd
=
false
;
// atttype = 4;
getinto2
=
false
;
isRange
=
true
;
//在范围
}
}
else
{
if
(
getinto2
)
{
isRange
=
false
;
}
}
}
if
(
attdate
.
getAttsch
().
size
()
==
6
)
{
boolean
effectiveDate5
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime3ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
starttime3js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate5
)
{
//在范围内就打卡
if
(
dkmc
.
getSbdk2
()
!=
null
)
{
sbdkkd
=
true
;
//
// atttype = 5;
}
else
{
atttype
=
5
;
getinto2
=
false
;
isRange
=
true
;
//在范围
}
}
else
{
if
(
getinto2
)
{
isRange
=
false
;
}
}
boolean
effectiveDate6
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime3ks
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
endtime3js
),
"yyyy-MM-dd HH:mm"
);
if
(
effectiveDate6
)
{
//在范围内就打卡
if
(
dkmc
.
getXbdk2
()
!=
null
)
{
kskd
=
true
;
////更新最后一次打卡
atttype
=
6
;
}
else
{
kskd
=
false
;
// atttype = 6;
getinto2
=
false
;
isRange
=
true
;
//在范围
}
}
else
{
if
(
getinto2
)
{
isRange
=
false
;
}
}
}
}
}
if
(
atttype
==
1
)
{
punchcardtime
=
starttime1
;
punchstart
=
starttime1ks
;
punchend
=
starttime1js
;
}
else
if
(
atttype
==
2
)
{
punchcardtime
=
endtime1
;
punchstart
=
endtime1ks
;
punchend
=
endtime1js
;
}
else
if
(
atttype
==
3
)
{
punchcardtime
=
starttime2
;
punchstart
=
starttime2ks
;
punchend
=
starttime2js
;
}
else
if
(
atttype
==
4
)
{
punchcardtime
=
endtime2
;
punchstart
=
endtime2ks
;
punchend
=
endtime2js
;
}
else
if
(
atttype
==
5
)
{
punchcardtime
=
starttime3
;
punchstart
=
starttime3ks
;
punchend
=
starttime3js
;
}
else
if
(
atttype
==
6
)
{
punchcardtime
=
endtime3
;
punchstart
=
endtime3ks
;
punchend
=
endtime3js
;
}
if
(
clockt
.
getShifid
()
!=
0
)
{
KqglAssoBcsz
shif
=
KqglAssoBcsz
.
builder
().
build
();
if
(
attdate
.
getAttsch
().
size
()
>
0
&&
clockt
.
getShifid
()
>
0
){
//有无班次
shif
=
shif
.
selectOne
(
new
QueryWrapper
<
KqglAssoBcsz
>().
lambda
().
eq
(
KqglAssoBcsz:
:
getId
,
clockt
.
getShifid
()));
}
}
//打卡记录录入 -- 打卡是否有时间范围限制
if
(
attdate
.
getAttsch
().
size
()
==
2
)
{
if
(
punchstart
>
0
&&
punchend
>
0
)
{
String
staputime
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
punchstart
);
//应打卡开始时间
String
entputime
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
punchend
);
//应打卡结束时间
String
DKputime
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
);
//打卡时间
boolean
effectiveDate
=
ClockInTool
.
hourMinuteBetween
(
DKputime
,
staputime
,
entputime
,
"yyyy-MM-dd HH:mm"
);
if
(!
effectiveDate
)
{
System
.
out
.
println
(
"当前打卡时间不在范围内"
);
// 手动抛出异常
isRange
=
false
;
// throw new Exception();
if
(
atttype
==
1
)
{
punchcardtime
=
starttime1
;
punchstart
=
starttime1ks
;
punchend
=
starttime1js
;
}
else
if
(
atttype
==
2
)
{
punchcardtime
=
endtime1
;
punchstart
=
endtime1ks
;
punchend
=
endtime1js
;
}
else
if
(
atttype
==
3
)
{
punchcardtime
=
starttime2
;
punchstart
=
starttime2ks
;
punchend
=
starttime2js
;
}
else
if
(
atttype
==
4
)
{
punchcardtime
=
endtime2
;
punchstart
=
endtime2ks
;
punchend
=
endtime2js
;
}
else
if
(
atttype
==
5
)
{
punchcardtime
=
starttime3
;
punchstart
=
starttime3ks
;
punchend
=
starttime3js
;
}
else
if
(
atttype
==
6
)
{
punchcardtime
=
endtime3
;
punchstart
=
endtime3ks
;
punchend
=
endtime3js
;
}
if
(
clockt
.
getShifid
()
!=
0
)
{
KqglAssoBcsz
shif
=
KqglAssoBcsz
.
builder
().
build
();
if
(
attdate
.
getAttsch
().
size
()
>
0
&&
clockt
.
getShifid
()
>
0
){
//有无班次
shif
=
shif
.
selectOne
(
new
QueryWrapper
<
KqglAssoBcsz
>().
lambda
().
eq
(
KqglAssoBcsz:
:
getId
,
clockt
.
getShifid
()));
}
//打卡记录录入 -- 打卡是否有时间范围限制
if
(
attdate
.
getAttsch
().
size
()
==
2
)
{
if
(
punchstart
>
0
&&
punchend
>
0
)
{
String
staputime
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
punchstart
);
//应打卡开始时间
String
entputime
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
punchend
);
//应打卡结束时间
String
DKputime
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
time_
);
//打卡时间
boolean
effectiveDate
=
ClockInTool
.
hourMinuteBetween
(
DKputime
,
staputime
,
entputime
,
"yyyy-MM-dd HH:mm"
);
if
(!
effectiveDate
)
{
System
.
out
.
println
(
"当前打卡时间不在范围内"
);
// 手动抛出异常
isRange
=
false
;
// throw new Exception();
}
}
}
}
if
(
isRange
)
{
int
yzcd
=
shif
.
getYzcdfzs
();
//严重迟到分钟数
int
kgcdfzs
=
shif
.
getKgcdfzs
();
//旷工迟到分钟数
int
dkcs_
=
shif
.
getSxbcs
();
//上下班打卡次数
int
iswzwd
=
shif
.
getIsWzwd
();
//是否开启晚走晚到(0:否;1:是)
long
rest_time
=
0
;
if
(
shif
.
getStartTime
()
!=
null
&&
shif
.
getEndTime
()
!=
null
)
{
long
kaishixiuxi
=
Long
.
valueOf
(
ClockInTool
.
dateToStamp
(
putime
+
" "
+
shif
.
getStartTime
()+
":00"
));
long
jieshuxiuxi
=
Long
.
valueOf
(
ClockInTool
.
dateToStamp
(
putime
+
" "
+
shif
.
getEndTime
()+
":00"
));
rest_time
=
(
jieshuxiuxi
-
kaishixiuxi
)/
1000
/
60
;
//休息时间
}
double
xbwz1
=
0
,
xbwz2
=
0
,
xbwz3
=
0
;
int
sbwd1
=
0
,
sbwd2
=
0
,
sbwd3
=
0
;
int
arrive_late
=
0
;
//晚到时间
String
clock_date
=
""
;
//应打卡时间
Long
latetime
=
0
l
;
//前天晚走时长(分钟)
KqglAssoDkmx
yesterdaymx
=
KqglAssoDkmx
.
builder
().
build
();
AttendanceCardListDto
attdateyesterday
;
long
yesendtime1
=
0
,
yesendtime2
=
0
,
yesendtime3
=
0
;
//存在晚走玩到
if
(
iswzwd
>
0
)
{
//统一分钟数
xbwz1
=
Double
.
valueOf
(
shif
.
getXbwz1
())
*
60
;
//下班晚走1
String
sbwd1_
=
String
.
valueOf
(
Double
.
valueOf
(
shif
.
getSbwd1
())
*
60
);
sbwd1
=
Integer
.
valueOf
(
sbwd1_
.
substring
(
0
,
sbwd1_
.
lastIndexOf
(
"."
)));
//上班晚到1
if
(
isRange
)
{
int
yzcd
=
shif
.
getYzcdfzs
();
//严重迟到分钟数
int
kgcdfzs
=
shif
.
getKgcdfzs
();
//旷工迟到分钟数
xbwz2
=
Double
.
valueOf
(
shif
.
getXbwz2
())
*
60
;
//下班晚走2
String
sbwd2_
=
String
.
valueOf
(
Double
.
valueOf
(
shif
.
getSbwd2
())
*
60
);
sbwd2
=
Integer
.
valueOf
(
sbwd2_
.
substring
(
0
,
sbwd2_
.
lastIndexOf
(
"."
)));
//上班晚到2
int
dkcs_
=
shif
.
getSxbcs
();
//上下班打卡次数
int
iswzwd
=
shif
.
getIsWzwd
();
//是否开启晚走晚到(0:否;1:是)
xbwz3
=
Double
.
valueOf
(
shif
.
getXbwz3
())
*
60
;
//下班晚走3
String
sbwd3_
=
String
.
valueOf
(
Double
.
valueOf
(
shif
.
getSbwd3
())
*
60
);
sbwd3
=
Integer
.
valueOf
(
sbwd3_
.
substring
(
0
,
sbwd3_
.
lastIndexOf
(
"."
)));
//上班晚到3
//获取前一天最后下班的时间
yesterdaymx
=
KqglAssoDkmx
.
builder
().
build
().
selectOne
(
new
QueryWrapper
<
KqglAssoDkmx
>().
lambda
().
eq
(
KqglAssoDkmx:
:
getUserid
,
userid
)
.
ge
(
KqglAssoDkmx:
:
getDksj
,
startDateyesterday
).
le
(
KqglAssoDkmx:
:
getDksj
,
endDateyesterday
));
attdateyesterday
=
MethodCall
(
qyid
,
userid
,
yesterday
);
List
<
AttSchedule
>
ash
=
attdateyesterday
.
getAttsch
();
if
(
attdateyesterday
.
getAttsch
().
size
()
==
2
||
attdateyesterday
.
getAttsch
().
size
()
==
4
||
attdateyesterday
.
getAttsch
().
size
()
==
6
)
{
yesendtime1
=
ash
.
get
(
1
).
getTime
();
}
if
(
attdateyesterday
.
getAttsch
().
size
()
==
4
||
attdateyesterday
.
getAttsch
().
size
()
==
6
)
{
yesendtime2
=
ash
.
get
(
3
).
getTime
();
}
if
(
attdateyesterday
.
getAttsch
().
size
()
==
6
)
{
yesendtime3
=
ash
.
get
(
5
).
getTime
();
}
}
if
(
execution_status
==
1
)
{
//上班1 ****新增
KqglAssoDkmx
pcd
=
KqglAssoDkmx
.
builder
().
userid
(
userid
).
data
(
putime
).
qyid
(
qyid
).
dksj
(
startDate
).
build
();
int
sbdkjg
=
0
,
yzcdsc
=
0
,
yzcdcs
=
0
,
kgcdcs
=
0
;
if
(
punchcardtime
!=
0
){
//有应打卡时间时
Long
time
=
(
time_
-
punchcardtime
)/
1000
/
60
;
if
((
atttype
)%
2
>
0
){
//上班
if
(
time
>
0
){
sbdkjg
=
Integer
.
valueOf
(
time
.
toString
());
}
// 打卡结果
}
else
{
//下班
if
(
time
>
0
){}
else
{
sbdkjg
=
Math
.
abs
(
Integer
.
valueOf
(
time
.
toString
()));
}
// 打卡结果
}
//存在晚走玩到
if
(
iswzwd
>
0
&&
yesterdaymx
!=
null
)
{
if
(
dkcs_
==
1
)
{
if
(
yesterdaymx
.
getXbdk1
()
!=
null
&&
yesterdaymx
.
getXbdk1jg
()
==
0
)
{
latetime
=
(
yesterdaymx
.
getXbdk1
()
-
yesendtime1
)/
1000
/
60
;
}
}
else
if
(
dkcs_
==
2
){
if
(
yesterdaymx
.
getXbdk2
()
!=
null
&&
yesterdaymx
.
getXbdk2jg
()
==
0
)
{
latetime
=
(
yesterdaymx
.
getXbdk2
()
-
yesendtime2
)/
1000
/
60
;
}
}
else
{
if
(
yesterdaymx
.
getXbdk3
()
!=
null
&&
yesterdaymx
.
getXbdk3jg
()
==
0
)
{
latetime
=
(
yesterdaymx
.
getXbdk3
()
-
yesendtime3
)/
1000
/
60
;
}
}
if
(
latetime
!=
0
)
{
double
latetime_
=
Double
.
valueOf
(
String
.
valueOf
(
latetime
));
//前天晚走时长(分钟)
if
(
latetime_
>
xbwz1
&&
latetime_
<
xbwz2
)
{
arrive_late
=
sbwd1
;
}
else
if
(
latetime_
>
xbwz2
&&
latetime_
<
xbwz3
)
{
arrive_late
=
sbwd2
;
}
else
if
(
latetime_
>
xbwz3
)
{
arrive_late
=
sbwd3
;
}
clock_date
=
ClockInTool
.
stampToDate
(
String
.
valueOf
(
punchcardtime
));
Long
changed_time
=
Long
.
valueOf
(
ClockInTool
.
dateToStamp
(
ClockInTool
.
addtime
(
clock_date
,
"+"
+
arrive_late
)));
//晚到后应打卡时间
punchcardtime
=
changed_time
;
//更换当天打卡时间
Long
timeyes
=
(
time_
-
changed_time
)/
1000
/
60
;
//
if
((
atttype
)%
2
>
0
){
//上班
if
(
timeyes
>
0
){
sbdkjg
=
Integer
.
valueOf
(
timeyes
.
toString
());
}
else
{
sbdkjg
=
0
;
}
}
else
{
//下班
if
(
timeyes
>
0
){
sbdkjg
=
0
;
}
else
{
sbdkjg
=
Math
.
abs
(
Integer
.
valueOf
(
timeyes
.
toString
()));
}
}
}
}
}
if
(
atttype
==
1
)
{
pcd
.
setSbdk1
(
time_
);
pcd
.
setSbdk1jg
(
sbdkjg
);
}
else
if
(
atttype
==
2
)
{
pcd
.
setXbdk1
(
time_
);
pcd
.
setXbdk1jg
(
sbdkjg
);
}
else
if
(
atttype
==
3
)
{
pcd
.
setSbdk2
(
time_
);
pcd
.
setSbdk2jg
(
sbdkjg
);
}
else
if
(
atttype
==
4
)
{
pcd
.
setXbdk2
(
time_
);
pcd
.
setXbdk2jg
(
sbdkjg
);
}
else
if
(
atttype
==
5
)
{
pcd
.
setSbdk3
(
time_
);
pcd
.
setSbdk3jg
(
sbdkjg
);
}
else
if
(
atttype
==
6
)
{
pcd
.
setXbdk3
(
time_
);
pcd
.
setXbdk3jg
(
sbdkjg
);
long
rest_time
=
0
;
if
(
shif
.
getStartTime
()
!=
null
&&
shif
.
getEndTime
()
!=
null
)
{
long
kaishixiuxi
=
Long
.
valueOf
(
ClockInTool
.
dateToStamp
(
putime
+
" "
+
shif
.
getStartTime
()+
":00"
));
long
jieshuxiuxi
=
Long
.
valueOf
(
ClockInTool
.
dateToStamp
(
putime
+
" "
+
shif
.
getEndTime
()+
":00"
));
rest_time
=
(
jieshuxiuxi
-
kaishixiuxi
)/
1000
/
60
;
//休息时间
}
int
ydkcs
=
0
;
if
(
shif
!=
null
){
ydkcs
=
shif
.
getSxbcs
()*
2
;}
//应打卡次数
if
(
sbdkjg
>
yzcd
&&
yzcd
>
0
)
{
yzcdcs
++;
yzcdsc
=
sbdkjg
-
yzcd
;
}
if
(
sbdkjg
>
kgcdfzs
&&
kgcdfzs
>
0
)
{
kgcdcs
++;}
pcd
.
setYdkcs
(
ydkcs
);
pcd
.
setYzcdcs
(
yzcdcs
);
pcd
.
setYzcdsc
(
Double
.
valueOf
(
yzcdsc
));
pcd
.
setKgcdfzs
(
kgcdcs
);
if
(!
pcd
.
insert
())
{
throw
new
CustomException
(
"打卡明细-新增异常-1"
);
}
dkmx
=
pcd
.
getId
();
}
else
if
(
execution_status
==
2
){
//*****修改
dkmx
=
dkmc
.
getId
();
KqglAssoDkmx
pcd
=
KqglAssoDkmx
.
builder
().
build
();
if
(
atttype
==
2
){
//下班1
pcd
.
setId
(
dkmc
.
getId
());
pcd
.
setXbdk1
(
time_
);
//下班1打卡时间
if
(
punchcardtime
!=
0
){
//有应打卡时间时
Long
time
=
(
time_
-
punchcardtime
)/
1000
/
60
;
if
(
time
>
0
){
pcd
.
setXbdk1jg
(
0
);
// 打卡结果
}
else
{
pcd
.
setXbdk1jg
(
Math
.
abs
(
Integer
.
valueOf
(
time
.
toString
())));
}
}
if
(
dkmc
.
getSbdk1
()
!=
null
){
Long
time
=
(
time_
-
dkmc
.
getSbdk1
())/
1000
/
60
-
rest_time
;
pcd
.
setGzsc
(
Math
.
abs
(
Double
.
valueOf
(
time
.
toString
())));
//只打一次卡时计算工作时长
}
kqglassodkmxmapper
.
updateByPrimaryKeySelective
(
pcd
);
//修改打卡记录
double
xbwz1
=
0
,
xbwz2
=
0
,
xbwz3
=
0
;
int
sbwd1
=
0
,
sbwd2
=
0
,
sbwd3
=
0
;
int
arrive_late
=
0
;
//晚到时间
String
clock_date
=
""
;
//应打卡时间
Long
latetime
=
0
l
;
//前天晚走时长(分钟)
KqglAssoDkmx
yesterdaymx
=
KqglAssoDkmx
.
builder
().
build
();
AttendanceCardListDto
attdateyesterday
;
long
yesendtime1
=
0
,
yesendtime2
=
0
,
yesendtime3
=
0
;
//存在晚走玩到
if
(
iswzwd
>
0
)
{
//统一分钟数
xbwz1
=
Double
.
valueOf
(
shif
.
getXbwz1
())
*
60
;
//下班晚走1
String
sbwd1_
=
String
.
valueOf
(
Double
.
valueOf
(
shif
.
getSbwd1
())
*
60
);
sbwd1
=
Integer
.
valueOf
(
sbwd1_
.
substring
(
0
,
sbwd1_
.
lastIndexOf
(
"."
)));
//上班晚到1
xbwz2
=
Double
.
valueOf
(
shif
.
getXbwz2
())
*
60
;
//下班晚走2
String
sbwd2_
=
String
.
valueOf
(
Double
.
valueOf
(
shif
.
getSbwd2
())
*
60
);
sbwd2
=
Integer
.
valueOf
(
sbwd2_
.
substring
(
0
,
sbwd2_
.
lastIndexOf
(
"."
)));
//上班晚到2
xbwz3
=
Double
.
valueOf
(
shif
.
getXbwz3
())
*
60
;
//下班晚走3
String
sbwd3_
=
String
.
valueOf
(
Double
.
valueOf
(
shif
.
getSbwd3
())
*
60
);
sbwd3
=
Integer
.
valueOf
(
sbwd3_
.
substring
(
0
,
sbwd3_
.
lastIndexOf
(
"."
)));
//上班晚到3
//获取前一天最后下班的时间
yesterdaymx
=
KqglAssoDkmx
.
builder
().
build
().
selectOne
(
new
QueryWrapper
<
KqglAssoDkmx
>().
lambda
().
eq
(
KqglAssoDkmx:
:
getUserid
,
userid
)
.
ge
(
KqglAssoDkmx:
:
getDksj
,
startDateyesterday
).
le
(
KqglAssoDkmx:
:
getDksj
,
endDateyesterday
));
attdateyesterday
=
MethodCall
(
qyid
,
userid
,
yesterday
);
}
else
if
(
atttype
==
3
){
//上班2
int
sbdk2jg
=
0
,
yzcdsc
=
0
,
yzcdcs
=
0
,
kgcdcs
=
0
;
if
(
punchcardtime
!=
0
){
//有应打卡时间时
Long
time
=
(
time_
-
punchcardtime
)/
1000
/
60
;
if
(
time
>
0
){
sbdk2jg
=
Math
.
abs
(
Integer
.
valueOf
(
time
.
toString
()));}
List
<
AttSchedule
>
ash
=
attdateyesterday
.
getAttsch
();
if
(
attdateyesterday
.
getAttsch
().
size
()
==
2
||
attdateyesterday
.
getAttsch
().
size
()
==
4
||
attdateyesterday
.
getAttsch
().
size
()
==
6
)
{
yesendtime1
=
ash
.
get
(
1
).
getTime
();
}
if
(
sbdk2jg
>
yzcd
&&
yzcd
>
0
)
{
yzcdcs
=
dkmc
.
getYzcdcs
()+
1
;
yzcdsc
=
sbdk2jg
-
yzcd
;
if
(
attdateyesterday
.
getAttsch
().
size
()
==
4
||
attdateyesterday
.
getAttsch
().
size
()
==
6
)
{
yesendtime2
=
ash
.
get
(
3
).
getTime
();
}
if
(
sbdk2jg
>
kgcdfzs
&&
kgcdfzs
>
0
)
{
kgcdcs
++;}
pcd
.
setId
(
dkmc
.
getId
());
pcd
.
setSbdk2
(
time_
);
//上班1打卡时间
pcd
.
setSbdk2jg
(
sbdk2jg
);
pcd
.
setYzcdcs
(
yzcdcs
);
pcd
.
setYzcdsc
(
Double
.
valueOf
(
yzcdsc
));
pcd
.
setKgcdfzs
(
kgcdcs
);
kqglassodkmxmapper
.
updateByPrimaryKeySelective
(
pcd
);
//修改打卡记录
}
else
if
(
atttype
==
4
){
//下班2
pcd
.
setId
(
dkmc
.
getId
());
pcd
.
setXbdk2
(
time_
);
//下班1打卡时间
if
(
attdateyesterday
.
getAttsch
().
size
()
==
6
)
{
yesendtime3
=
ash
.
get
(
5
).
getTime
();
}
}
if
(
execution_status
==
1
)
{
//上班1 ****新增
KqglAssoDkmx
pcd
=
KqglAssoDkmx
.
builder
().
userid
(
userid
).
data
(
putime
).
qyid
(
qyid
).
dksj
(
startDate
).
build
();
int
sbdkjg
=
0
,
yzcdsc
=
0
,
yzcdcs
=
0
,
kgcdcs
=
0
;
if
(
punchcardtime
!=
0
){
//有应打卡时间时
Long
time
=
(
time_
-
punchcardtime
)/
1000
/
60
;
if
(
time
>
0
){
pcd
.
setXbdk2jg
(
0
);
// 打卡结果
}
else
{
pcd
.
setXbdk2jg
(
Math
.
abs
(
Integer
.
valueOf
(
time
.
toString
())));
if
((
atttype
)%
2
>
0
){
//上班
if
(
time
>
0
){
sbdkjg
=
Integer
.
valueOf
(
time
.
toString
());
}
// 打卡结果
}
else
{
//下班
if
(
time
>
0
){}
else
{
sbdkjg
=
Math
.
abs
(
Integer
.
valueOf
(
time
.
toString
()));
}
// 打卡结果
}
}
//班次为4次时,计算工作时长
if
(
dkmc
.
getSbdk2
()
!=
null
){
Long
time
=
(
time_
-
dkmc
.
getSbdk2
())/
1000
/
60
;
BigDecimal
om
=
new
BigDecimal
(
dkmc
.
getGzsc
());
BigDecimal
on
=
new
BigDecimal
(
time
);
BigDecimal
worktime_
=
new
BigDecimal
(
Math
.
abs
(
om
.
add
(
on
).
doubleValue
()));
BigDecimal
xx
=
new
BigDecimal
(
rest_time
);
double
worktime
=
Math
.
abs
(
worktime_
.
subtract
(
xx
).
doubleValue
());
//存在晚走玩到
if
(
iswzwd
>
0
&&
yesterdaymx
!=
null
)
{
if
(
dkcs_
==
1
)
{
if
(
yesterdaymx
.
getXbdk1
()
!=
null
&&
yesterdaymx
.
getXbdk1jg
()
==
0
)
{
latetime
=
(
yesterdaymx
.
getXbdk1
()
-
yesendtime1
)/
1000
/
60
;
}
}
else
if
(
dkcs_
==
2
){
if
(
yesterdaymx
.
getXbdk2
()
!=
null
&&
yesterdaymx
.
getXbdk2jg
()
==
0
)
{
latetime
=
(
yesterdaymx
.
getXbdk2
()
-
yesendtime2
)/
1000
/
60
;
}
}
else
{
if
(
yesterdaymx
.
getXbdk3
()
!=
null
&&
yesterdaymx
.
getXbdk3jg
()
==
0
)
{
latetime
=
(
yesterdaymx
.
getXbdk3
()
-
yesendtime3
)/
1000
/
60
;
}
}
if
(
latetime
!=
0
)
{
double
latetime_
=
Double
.
valueOf
(
String
.
valueOf
(
latetime
));
//前天晚走时长(分钟)
if
(
latetime_
>
xbwz1
&&
latetime_
<
xbwz2
)
{
arrive_late
=
sbwd1
;
}
else
if
(
latetime_
>
xbwz2
&&
latetime_
<
xbwz3
)
{
arrive_late
=
sbwd2
;
}
else
if
(
latetime_
>
xbwz3
)
{
arrive_late
=
sbwd3
;
}
clock_date
=
ClockInTool
.
stampToDate
(
String
.
valueOf
(
punchcardtime
));
Long
changed_time
=
Long
.
valueOf
(
ClockInTool
.
dateToStamp
(
ClockInTool
.
addtime
(
clock_date
,
"+"
+
arrive_late
)));
//晚到后应打卡时间
punchcardtime
=
changed_time
;
//更换当天打卡时间
Long
timeyes
=
(
time_
-
changed_time
)/
1000
/
60
;
//
if
((
atttype
)%
2
>
0
){
//上班
if
(
timeyes
>
0
){
sbdkjg
=
Integer
.
valueOf
(
timeyes
.
toString
());
}
else
{
sbdkjg
=
0
;
}
}
else
{
//下班
if
(
timeyes
>
0
){
sbdkjg
=
0
;
}
else
{
sbdkjg
=
Math
.
abs
(
Integer
.
valueOf
(
timeyes
.
toString
()));
}
}
}
}
pcd
.
setGzsc
(
worktime
);
}
kqglassodkmxmapper
.
updateByPrimaryKeySelective
(
pcd
);
//修改打卡记录
}
else
if
(
atttype
==
5
){
//上班3
int
sbdk3jg
=
0
,
yzcdsc
=
0
,
yzcdcs
=
0
,
kgcdcs
=
0
;
if
(
punchcardtime
!=
0
){
//有应打卡时间时
Long
time
=
(
time_
-
punchcardtime
)/
1000
/
60
;
if
(
time
>
0
){
sbdk3jg
=
Math
.
abs
(
Integer
.
valueOf
(
time
.
toString
()));}
}
if
(
sbdk3jg
>
yzcd
&&
yzcd
>
0
)
{
yzcdcs
=
dkmc
.
getYzcdcs
()+
1
;
yzcdsc
=
sbdk3jg
-
yzcd
;
if
(
atttype
==
1
)
{
pcd
.
setSbdk1
(
time_
);
pcd
.
setSbdk1jg
(
sbdkjg
);
}
else
if
(
atttype
==
2
)
{
pcd
.
setXbdk1
(
time_
);
pcd
.
setXbdk1jg
(
sbdkjg
);
}
else
if
(
atttype
==
3
)
{
pcd
.
setSbdk2
(
time_
);
pcd
.
setSbdk2jg
(
sbdkjg
);
}
else
if
(
atttype
==
4
)
{
pcd
.
setXbdk2
(
time_
);
pcd
.
setXbdk2jg
(
sbdkjg
);
}
else
if
(
atttype
==
5
)
{
pcd
.
setSbdk3
(
time_
);
pcd
.
setSbdk3jg
(
sbdkjg
);
}
else
if
(
atttype
==
6
)
{
pcd
.
setXbdk3
(
time_
);
pcd
.
setXbdk3jg
(
sbdkjg
);
}
int
ydkcs
=
0
;
if
(
shif
!=
null
){
ydkcs
=
shif
.
getSxbcs
()*
2
;}
//应打卡次数
if
(
sbdkjg
>
yzcd
&&
yzcd
>
0
)
{
yzcdcs
++;
yzcdsc
=
sbdkjg
-
yzcd
;
}
if
(
sbdk3jg
>
kgcdfzs
&&
kgcdfzs
>
0
)
{
kgcdcs
++;}
pcd
.
setId
(
dkmc
.
getId
());
pcd
.
setSbdk3
(
time_
);
//上班1打卡时间
pcd
.
setSbdk3jg
(
sbdk3jg
);
if
(
sbdkjg
>
kgcdfzs
&&
kgcdfzs
>
0
)
{
kgcdcs
++;}
pcd
.
setYdkcs
(
ydkcs
);
pcd
.
setYzcdcs
(
yzcdcs
);
pcd
.
setYzcdsc
(
Double
.
valueOf
(
yzcdsc
));
pcd
.
setKgcdfzs
(
kgcdcs
);
kqglassodkmxmapper
.
updateByPrimaryKeySelective
(
pcd
);
//修改打卡记录
}
else
if
(
atttype
==
6
){
//下班3
pcd
.
setId
(
dkmc
.
getId
());
pcd
.
setXbdk3
(
time_
);
//下班1打卡时间
if
(
punchcardtime
!=
0
){
//有应打卡时间时
Long
time
=
(
time_
-
punchcardtime
)/
1000
/
60
;
if
(
time
>
0
){
pcd
.
setXbdk3jg
(
0
);
// 打卡结果
}
else
{
pcd
.
setXbdk3jg
(
Math
.
abs
(
Integer
.
valueOf
(
time
.
toString
())));
}
if
(!
pcd
.
insert
())
{
throw
new
CustomException
(
"打卡明细-新增异常-1"
);
}
//班次为6次时,计算工作时长
if
(
dkmc
.
getSbdk3
()
!=
null
){
Long
time
=
(
time_
-
dkmc
.
getSbdk3
())/
1000
/
60
;
BigDecimal
om
=
new
BigDecimal
(
dkmc
.
getGzsc
());
//第二次
BigDecimal
on
=
new
BigDecimal
(
time
);
BigDecimal
worktime_
=
new
BigDecimal
(
Math
.
abs
(
om
.
add
(
on
).
doubleValue
()));
BigDecimal
xx
=
new
BigDecimal
(
rest_time
);
dkmx
=
pcd
.
getId
();
}
else
if
(
execution_status
==
2
){
//*****修改
dkmx
=
dkmc
.
getId
();
KqglAssoDkmx
pcd
=
KqglAssoDkmx
.
builder
().
build
();
if
(
atttype
==
2
){
//下班1
pcd
.
setId
(
dkmc
.
getId
());
pcd
.
setXbdk1
(
time_
);
//下班1打卡时间
if
(
punchcardtime
!=
0
){
//有应打卡时间时
Long
time
=
(
time_
-
punchcardtime
)/
1000
/
60
;
if
(
time
>
0
){
pcd
.
setXbdk1jg
(
0
);
// 打卡结果
}
else
{
pcd
.
setXbdk1jg
(
Math
.
abs
(
Integer
.
valueOf
(
time
.
toString
())));
}
}
if
(
dkmc
.
getSbdk1
()
!=
null
){
Long
time
=
(
time_
-
dkmc
.
getSbdk1
())/
1000
/
60
-
rest_time
;
pcd
.
setGzsc
(
Math
.
abs
(
Double
.
valueOf
(
time
.
toString
())));
//只打一次卡时计算工作时长
}
kqglassodkmxmapper
.
updateByPrimaryKeySelective
(
pcd
);
//修改打卡记录
double
worktime
=
Math
.
abs
(
worktime_
.
subtract
(
xx
).
doubleValue
());
}
else
if
(
atttype
==
3
){
//上班2
int
sbdk2jg
=
0
,
yzcdsc
=
0
,
yzcdcs
=
0
,
kgcdcs
=
0
;
if
(
punchcardtime
!=
0
){
//有应打卡时间时
Long
time
=
(
time_
-
punchcardtime
)/
1000
/
60
;
if
(
time
>
0
){
sbdk2jg
=
Math
.
abs
(
Integer
.
valueOf
(
time
.
toString
()));}
}
if
(
sbdk2jg
>
yzcd
&&
yzcd
>
0
)
{
yzcdcs
=
dkmc
.
getYzcdcs
()+
1
;
yzcdsc
=
sbdk2jg
-
yzcd
;
}
if
(
sbdk2jg
>
kgcdfzs
&&
kgcdfzs
>
0
)
{
kgcdcs
++;}
pcd
.
setGzsc
(
worktime
);
pcd
.
setId
(
dkmc
.
getId
());
pcd
.
setSbdk2
(
time_
);
//上班1打卡时间
pcd
.
setSbdk2jg
(
sbdk2jg
);
pcd
.
setYzcdcs
(
yzcdcs
);
pcd
.
setYzcdsc
(
Double
.
valueOf
(
yzcdsc
));
pcd
.
setKgcdfzs
(
kgcdcs
);
kqglassodkmxmapper
.
updateByPrimaryKeySelective
(
pcd
);
//修改打卡记录
}
else
if
(
atttype
==
4
){
//下班2
pcd
.
setId
(
dkmc
.
getId
());
pcd
.
setXbdk2
(
time_
);
//下班1打卡时间
if
(
punchcardtime
!=
0
){
//有应打卡时间时
Long
time
=
(
time_
-
punchcardtime
)/
1000
/
60
;
if
(
time
>
0
){
pcd
.
setXbdk2jg
(
0
);
// 打卡结果
}
else
{
pcd
.
setXbdk2jg
(
Math
.
abs
(
Integer
.
valueOf
(
time
.
toString
())));
}
}
//班次为4次时,计算工作时长
if
(
dkmc
.
getSbdk2
()
!=
null
){
Long
time
=
(
time_
-
dkmc
.
getSbdk2
())/
1000
/
60
;
BigDecimal
om
=
new
BigDecimal
(
dkmc
.
getGzsc
());
BigDecimal
on
=
new
BigDecimal
(
time
);
BigDecimal
worktime_
=
new
BigDecimal
(
Math
.
abs
(
om
.
add
(
on
).
doubleValue
()));
BigDecimal
xx
=
new
BigDecimal
(
rest_time
);
double
worktime
=
Math
.
abs
(
worktime_
.
subtract
(
xx
).
doubleValue
());
pcd
.
setGzsc
(
worktime
);
}
kqglassodkmxmapper
.
updateByPrimaryKeySelective
(
pcd
);
//修改打卡记录
}
else
if
(
atttype
==
5
){
//上班3
int
sbdk3jg
=
0
,
yzcdsc
=
0
,
yzcdcs
=
0
,
kgcdcs
=
0
;
if
(
punchcardtime
!=
0
){
//有应打卡时间时
Long
time
=
(
time_
-
punchcardtime
)/
1000
/
60
;
if
(
time
>
0
){
sbdk3jg
=
Math
.
abs
(
Integer
.
valueOf
(
time
.
toString
()));}
}
if
(
sbdk3jg
>
yzcd
&&
yzcd
>
0
)
{
yzcdcs
=
dkmc
.
getYzcdcs
()+
1
;
yzcdsc
=
sbdk3jg
-
yzcd
;
}
if
(
sbdk3jg
>
kgcdfzs
&&
kgcdfzs
>
0
)
{
kgcdcs
++;}
pcd
.
setId
(
dkmc
.
getId
());
pcd
.
setSbdk3
(
time_
);
//上班1打卡时间
pcd
.
setSbdk3jg
(
sbdk3jg
);
pcd
.
setYzcdcs
(
yzcdcs
);
pcd
.
setYzcdsc
(
Double
.
valueOf
(
yzcdsc
));
pcd
.
setKgcdfzs
(
kgcdcs
);
kqglassodkmxmapper
.
updateByPrimaryKeySelective
(
pcd
);
//修改打卡记录
}
else
if
(
atttype
==
6
){
//下班3
pcd
.
setId
(
dkmc
.
getId
());
pcd
.
setXbdk3
(
time_
);
//下班1打卡时间
if
(
punchcardtime
!=
0
){
//有应打卡时间时
Long
time
=
(
time_
-
punchcardtime
)/
1000
/
60
;
if
(
time
>
0
){
pcd
.
setXbdk3jg
(
0
);
// 打卡结果
}
else
{
pcd
.
setXbdk3jg
(
Math
.
abs
(
Integer
.
valueOf
(
time
.
toString
())));
}
}
//班次为6次时,计算工作时长
if
(
dkmc
.
getSbdk3
()
!=
null
){
Long
time
=
(
time_
-
dkmc
.
getSbdk3
())/
1000
/
60
;
BigDecimal
om
=
new
BigDecimal
(
dkmc
.
getGzsc
());
//第二次
BigDecimal
on
=
new
BigDecimal
(
time
);
BigDecimal
worktime_
=
new
BigDecimal
(
Math
.
abs
(
om
.
add
(
on
).
doubleValue
()));
BigDecimal
xx
=
new
BigDecimal
(
rest_time
);
double
worktime
=
Math
.
abs
(
worktime_
.
subtract
(
xx
).
doubleValue
());
pcd
.
setGzsc
(
worktime
);
}
}
pcd
.
setId
(
dkmc
.
getId
());
if
(
atttype
<=
6
&&
atttype
>
0
&&
!
sbdkkd
){
kqglassodkmxmapper
.
updateByPrimaryKeySelective
(
pcd
);
//修改打卡记录
}
}
pcd
.
setId
(
dkmc
.
getId
());
if
(
atttype
<=
6
&&
atttype
>
0
&&
!
sbdkkd
){
kqglassodkmxmapper
.
updateByPrimaryKeySelective
(
pcd
);
//修改打卡记录
}
}
else
{
msg
=
"当前打卡时间不在范围内"
;
sbyf
=
0
;
}
}
else
{
msg
=
"当前打卡时间不在范围内"
;
sbyf
=
0
;
}
}
else
{
msg
=
"当前是休息时间"
;
sbyf
=
0
;
}
}
}
else
{
msg
=
"当前是休息时间"
;
sbyf
=
0
;
}
}
}
}
else
{
//自由工时打卡
Long
stapclotime
=
attdate
.
getStapclotime
();
// 今天考勤 自由排班开始时间
...
...
@@ -935,63 +957,65 @@ public class ClockInController {
}
}
}
int
type
,
status
=
0
;
if
((
atttype
)%
2
>
0
){
type
=
1
;
// 类型(类型 0:无排班打卡 1:上班 2:下班) punchcardtime == 0:无班次打卡
if
(
attdate
.
getAttgrouptype
()
!=
3
)
{
if
(
EmptyUtil
.
isNotEmpty
(
attdate
.
getAttsch
()))
{
if
(
punchcardtime
==
0
&&
clockt
.
getShifid
()
!=
0
){
status
=
1
;
}
if
(
punchcardtime
==
0
&&
clockt
.
getShifid
()
==
0
)
{
status
=
2
;
}
else
{
if
(
isRange
)
{
// 状态(0:打卡无效:此记录已被更新 1:正常 2:异常 3:迟到 4:早退 5:补卡 6:请假 7:加班 8:调休)
if
(
time
>
0
){
status
=
3
;
}
else
if
(
results
==
0
){
status
=
1
;
}
}
else
{
int
type
=
0
,
status
=
0
;
if
(
atttype
!=
0
)
{
if
((
atttype
)%
2
>
0
){
type
=
1
;
// 类型(类型 0:无排班打卡 1:上班 2:下班) punchcardtime == 0:无班次打卡
if
(
attdate
.
getAttgrouptype
()
!=
3
)
{
if
(
EmptyUtil
.
isNotEmpty
(
attdate
.
getAttsch
()))
{
if
(
punchcardtime
==
0
&&
clockt
.
getShifid
()
!=
0
){
status
=
1
;
}
if
(
punchcardtime
==
0
&&
clockt
.
getShifid
()
==
0
)
{
status
=
2
;
}
else
{
if
(
isRange
)
{
// 状态(0:打卡无效:此记录已被更新 1:正常 2:异常 3:迟到 4:早退 5:补卡 6:请假 7:加班 8:调休)
if
(
time
>
0
){
status
=
3
;
}
else
if
(
results
==
0
){
status
=
1
;
}
}
else
{
status
=
2
;
}
}
}
else
if
(
EmptyUtil
.
isEmpty
(
attdate
.
getAttsch
()))
{
status
=
2
;
}
}
else
if
(
EmptyUtil
.
isEmpty
(
attdate
.
getAttsch
()))
{
status
=
2
;
}
}
else
{
if
(
sbyf
==
1
)
{
status
=
1
;
}
else
{
status
=
2
;
}
}
}
else
{
type
=
2
;
// 类型(类型 0:无排班打卡 1:上班 2:下班)
if
(
attdate
.
getAttgrouptype
()
!=
3
)
{
if
(
EmptyUtil
.
isNotEmpty
(
attdate
.
getAttsch
()))
{
if
(
punchcardtime
==
0
&&
clockt
.
getShifid
()
!=
0
){
if
(
sbyf
==
1
)
{
status
=
1
;
}
if
(
punchcardtime
==
0
&&
clockt
.
getShifid
()
==
0
)
{
}
else
{
status
=
2
;
}
else
{
if
(
isRange
)
{
if
(
time
<
0
){
status
=
4
;
}
else
if
(
results
==
0
){
status
=
1
;
}
}
else
{
}
}
}
else
{
type
=
2
;
// 类型(类型 0:无排班打卡 1:上班 2:下班)
if
(
attdate
.
getAttgrouptype
()
!=
3
)
{
if
(
EmptyUtil
.
isNotEmpty
(
attdate
.
getAttsch
()))
{
if
(
punchcardtime
==
0
&&
clockt
.
getShifid
()
!=
0
){
status
=
1
;
}
if
(
punchcardtime
==
0
&&
clockt
.
getShifid
()
==
0
)
{
status
=
2
;
}
else
{
if
(
isRange
)
{
if
(
time
<
0
){
status
=
4
;
}
else
if
(
results
==
0
){
status
=
1
;
}
}
else
{
status
=
2
;
}
}
}
else
if
(
EmptyUtil
.
isEmpty
(
attdate
.
getAttsch
()))
{
status
=
2
;
}
}
else
if
(
EmptyUtil
.
isEmpty
(
attdate
.
getAttsch
()))
{
status
=
2
;
}
}
else
{
if
(
sbyf
==
1
)
{
status
=
1
;
}
else
{
status
=
2
;
if
(
sbyf
==
1
)
{
status
=
1
;
}
else
{
status
=
2
;
}
}
}
}
...
...
@@ -1025,6 +1049,9 @@ public class ClockInController {
commentary
=
"打卡成功"
;
}
else
{
commentary
=
msg
;
if
(
status_
==
2
)
{
status
=
status_
;
}
}
//cardtype--1:GPS,2:WIFI,3:考勤机
KqglAssoDkjl
pre
=
KqglAssoDkjl
.
builder
().
dktime
(
time_
).
results
(
results
).
userId
(
userid
).
type
(
type
).
status
(
status
).
sort
(
atttype
)
...
...
@@ -2214,6 +2241,9 @@ public class ClockInController {
String
stampToDate
=
ClockInTool
.
stampToDate
(
String
.
valueOf
(
endDate
));
//当天打卡的最后时间
Timestamp
d
=
Timestamp
.
valueOf
(
stampToDate
);
Timestamp
b
=
Timestamp
.
valueOf
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
new
Date
()));
//当前时间
KqglMainKqz
attgro
=
kqglmainkqzmapper
.
getAttendanceGroupInformationByUserid
(
userBean
.
getEmpNum
(),
userBean
.
getOrgCode
());
//考勤组信息
if
(
attgro
!=
null
)
{
...
...
@@ -2240,10 +2270,19 @@ public class ClockInController {
bc
++;
ash
.
setIsdk
(
1
);
}
//是否请假
KqglAssoRelationSummary
leainv
=
kqglassorelationsummarymapper
.
leaveinvesti
(
userBean
.
getEmpNum
(),
2
,
str
,
userBean
.
getOrgCode
());
boolean
adopt
=
false
;
if
(
leainv
!=
null
)
{
String
time
=
ClockInTool
.
stampToDate4
(
String
.
valueOf
(
ash
.
getTime
()));
//当天打卡的最后时间
adopt
=
ClockInTool
.
hourMinuteBetween
(
time
,
leainv
.
getStartTime
().
substring
(
0
,
16
),
leainv
.
getEndTime
().
substring
(
0
,
16
),
"yyyy-MM-dd HH:mm"
);
}
if
(
adopt
)
{
ash
.
setIsleave
(
1
);
}
}
else
{
KqglAssoBcsz
shif
=
KqglAssoBcsz
.
builder
().
build
().
selectOne
(
new
QueryWrapper
<
KqglAssoBcsz
>().
lambda
().
eq
(
KqglAssoBcsz:
:
getId
,
ash
.
getId
()));
Timestamp
b
=
Timestamp
.
valueOf
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
new
Date
()));
//
String
xbdk1
=
(
str
+
" "
+
shif
.
getXbdk1
()+
":00"
).
replaceAll
(
"\r|\n"
,
""
);
Timestamp
a
=
Timestamp
.
valueOf
(
xbdk1
);
String
sbdk1
=
(
str
+
" "
+
shif
.
getSbdk1
()+
":00"
).
replaceAll
(
"\r|\n"
,
""
);
...
...
@@ -2265,10 +2304,22 @@ public class ClockInController {
bsz
=
1
;
ash
.
setIsdk
(
0
);
}
else
{
bc
++;
ash
.
setIsdk
(
1
);
}
}
r
++;
//是否请假
KqglAssoRelationSummary
leainv
=
kqglassorelationsummarymapper
.
leaveinvesti
(
userBean
.
getEmpNum
(),
2
,
str
,
userBean
.
getOrgCode
());
boolean
adopt
=
false
;
if
(
leainv
!=
null
)
{
String
time
=
ClockInTool
.
stampToDate4
(
String
.
valueOf
(
ash
.
getTime
()));
//当天打卡的最后时间
adopt
=
ClockInTool
.
hourMinuteBetween
(
time
,
leainv
.
getStartTime
().
substring
(
0
,
16
),
leainv
.
getEndTime
().
substring
(
0
,
16
),
"yyyy-MM-dd HH:mm"
);
}
if
(
adopt
)
{
ash
.
setIsleave
(
1
);
}
}
}
else
{
boolean
ectivedate
=
ClockInTool
.
hourMinuteBetween
(
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
nowdate
),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
ash
.
getStarttime
()),
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
).
format
(
ash
.
getEndtime
()),
"yyyy-MM-dd HH:mm"
);
...
...
@@ -2279,6 +2330,17 @@ public class ClockInController {
bc
++;
ash
.
setIsdk
(
1
);
}
//是否请假
KqglAssoRelationSummary
leainv
=
kqglassorelationsummarymapper
.
leaveinvesti
(
userBean
.
getEmpNum
(),
2
,
str
,
userBean
.
getOrgCode
());
boolean
adopt
=
false
;
if
(
leainv
!=
null
)
{
String
time
=
ClockInTool
.
stampToDate4
(
String
.
valueOf
(
ash
.
getTime
()));
//当天打卡的最后时间
adopt
=
ClockInTool
.
hourMinuteBetween
(
time
,
leainv
.
getStartTime
().
substring
(
0
,
16
),
leainv
.
getEndTime
().
substring
(
0
,
16
),
"yyyy-MM-dd HH:mm"
);
}
if
(
adopt
)
{
ash
.
setIsleave
(
1
);
}
}
List
<
KqglAssoDkjl
>
dajllist_
=
kqglassodkjlmapper
.
getDetailedRecordClock
(
startDate
,
endDate
,
userBean
.
getEmpNum
());
...
...
@@ -2298,9 +2360,12 @@ public class ClockInController {
}
//全部为 1 时
if
(
bccs
==
bc
)
{
if
(
bccs
==
bc
&&
b
.
before
(
d
)
)
{
KqglAssoDkjl
dk
=
KqglAssoDkjl
.
builder
().
build
().
selectOne
(
new
QueryWrapper
<
KqglAssoDkjl
>().
lambda
().
eq
(
KqglAssoDkjl:
:
getQyid
,
userBean
.
getOrgCode
())
.
eq
(
KqglAssoDkjl:
:
getUserId
,
userBean
.
getEmpNum
()).
ge
(
KqglAssoDkjl:
:
getDktime
,
startDate
).
le
(
KqglAssoDkjl:
:
getDktime
,
endDate
).
orderByDesc
(
KqglAssoDkjl:
:
getSort
).
last
(
"LIMIT 1"
));
.
eq
(
KqglAssoDkjl:
:
getUserId
,
userBean
.
getEmpNum
()).
ge
(
KqglAssoDkjl:
:
getDktime
,
startDate
).
le
(
KqglAssoDkjl:
:
getDktime
,
endDate
)
.
ne
(
KqglAssoDkjl:
:
getSort
,
0
).
ne
(
KqglAssoDkjl:
:
getStatus
,
2
).
ne
(
KqglAssoDkjl:
:
getStatus
,
0
)
.
orderByDesc
(
KqglAssoDkjl:
:
getSort
).
last
(
"LIMIT 1"
));
if
(
dk
!=
null
&&
attdate
.
getAttsch
().
size
()
!=
dk
.
getSort
())
{
AttSchedule
att
=
attsch
.
get
(
dk
.
getSort
());
att
.
setIsdk
(
0
);
...
...
@@ -2431,15 +2496,22 @@ public class ClockInController {
KqglAssoDkmx
yesterdaymx
=
KqglAssoDkmx
.
builder
().
build
();
AttendanceCardListDto
attdateyesterday
;
long
yesendtime1
=
0
,
yesendtime2
=
0
,
yesendtime3
=
0
;
String
regex
=
"(\\d+)(?:(\\.\\d*[^0])|\\.)0*"
;
//存在晚走玩到
if
(
iswzwd
>
0
)
{
//统一分钟数
xbwz1
=
Double
.
valueOf
(
shif
.
getXbwz1
())
*
60
;
//下班晚走1
sbwd1
=
Integer
.
valueOf
(
String
.
valueOf
(
Double
.
valueOf
(
shif
.
getSbwd1
())
*
60
));
//上班晚到1
String
as
=
String
.
valueOf
(
Double
.
valueOf
(
shif
.
getSbwd1
())
*
60
);
sbwd1
=
Integer
.
valueOf
(
as
.
replaceAll
(
regex
,
"$1$2"
));
//上班晚到1
xbwz2
=
Double
.
valueOf
(
shif
.
getXbwz2
())
*
60
;
//下班晚走2
sbwd2
=
Integer
.
valueOf
(
String
.
valueOf
(
Double
.
valueOf
(
shif
.
getSbwd2
())
*
60
));
//上班晚到2
String
qw
=
String
.
valueOf
(
Double
.
valueOf
(
shif
.
getSbwd2
())
*
60
);
sbwd2
=
Integer
.
valueOf
(
qw
.
replaceAll
(
regex
,
"$1$2"
));
//上班晚到2
xbwz3
=
Double
.
valueOf
(
shif
.
getXbwz3
())
*
60
;
//下班晚走3
sbwd3
=
Integer
.
valueOf
(
String
.
valueOf
(
Double
.
valueOf
(
shif
.
getSbwd3
())
*
60
));
//上班晚到3
String
ed
=
String
.
valueOf
(
Double
.
valueOf
(
shif
.
getSbwd3
())
*
60
);
sbwd3
=
Integer
.
valueOf
(
ed
.
replaceAll
(
regex
,
"$1$2"
));
//上班晚到3
//获取前一天最后下班的时间
yesterdaymx
=
KqglAssoDkmx
.
builder
().
build
().
selectOne
(
new
QueryWrapper
<
KqglAssoDkmx
>().
lambda
().
eq
(
KqglAssoDkmx:
:
getUserid
,
userBean
.
getEmpNum
())
...
...
@@ -2456,20 +2528,23 @@ public class ClockInController {
if
(
attdateyesterday
.
getAttsch
().
size
()
==
6
)
{
yesendtime3
=
ashyes
.
get
(
5
).
getTime
();
}
if
(
dkcs_
==
1
)
{
if
(
yesterdaymx
.
getXbdk1
()
!=
null
&&
yesterdaymx
.
getXbdk1jg
()
==
0
)
{
latetime
=
(
yesterdaymx
.
getXbdk1
()
-
yesendtime1
)/
1000
/
60
;
}
}
else
if
(
dkcs_
==
2
){
if
(
yesterdaymx
.
getXbdk2
()
!=
null
&&
yesterdaymx
.
getXbdk2jg
()
==
0
)
{
latetime
=
(
yesterdaymx
.
getXbdk2
()
-
yesendtime2
)/
1000
/
60
;
}
}
else
{
if
(
yesterdaymx
.
getXbdk3
()
!=
null
&&
yesterdaymx
.
getXbdk3jg
()
==
0
)
{
latetime
=
(
yesterdaymx
.
getXbdk3
()
-
yesendtime3
)/
1000
/
60
;
if
(
yesterdaymx
!=
null
)
{
if
(
dkcs_
==
1
)
{
if
(
yesterdaymx
.
getXbdk1
()
!=
null
&&
yesterdaymx
.
getXbdk1jg
()
==
0
)
{
latetime
=
(
yesterdaymx
.
getXbdk1
()
-
yesendtime1
)/
1000
/
60
;
}
}
else
if
(
dkcs_
==
2
){
if
(
yesterdaymx
.
getXbdk2
()
!=
null
&&
yesterdaymx
.
getXbdk2jg
()
==
0
)
{
latetime
=
(
yesterdaymx
.
getXbdk2
()
-
yesendtime2
)/
1000
/
60
;
}
}
else
{
if
(
yesterdaymx
.
getXbdk3
()
!=
null
&&
yesterdaymx
.
getXbdk3jg
()
==
0
)
{
latetime
=
(
yesterdaymx
.
getXbdk3
()
-
yesendtime3
)/
1000
/
60
;
}
}
}
}
if
(
latetime
!=
0
)
{
latetime_
=
Double
.
valueOf
(
String
.
valueOf
(
latetime
));
//前天晚走时长(分钟)
if
(
latetime_
>
xbwz1
&&
latetime_
<
xbwz2
)
{
...
...
src/main/java/cn/timer/api/controller/kqgl/ClockInTool.java
View file @
c928be85
...
...
@@ -658,6 +658,7 @@ public class ClockInTool {
return
res
;
}
/**
* 时间戳转换时间
*/
...
...
@@ -682,6 +683,18 @@ public class ClockInTool {
return
res
;
}
/**
* 时间戳转换时间
*/
public
static
String
stampToDate4
(
String
s
){
String
res
;
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
);
long
lt
=
new
Long
(
s
);
Date
date
=
new
Date
(
lt
);
res
=
simpleDateFormat
.
format
(
date
);
return
res
;
}
public
static
String
Str_Time_formatting
(
String
str
,
String
Format
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
Format
);
...
...
src/main/java/cn/timer/api/controller/kqgl/atttimer/AttendanceTaskTiming.java
View file @
c928be85
...
...
@@ -31,7 +31,9 @@ import cn.timer.api.bean.kqmk.KqglAssoTeshu;
import
cn.timer.api.bean.kqmk.KqglAssoZhoupaiban
;
import
cn.timer.api.bean.kqmk.KqglMainKqz
;
import
cn.timer.api.bean.qyzx.QyzxEntInfoM
;
import
cn.timer.api.controller.kqgl.ClockInController
;
import
cn.timer.api.controller.kqgl.ClockInTool
;
import
cn.timer.api.controller.kqgl.EmptyUtil
;
import
cn.timer.api.dao.kqgl.AttendanceWeeklySchMapper
;
import
cn.timer.api.dao.kqgl.PunchCardDetailsMapper
;
import
cn.timer.api.dao.kqgl.PunchRecordMapper
;
...
...
@@ -43,7 +45,9 @@ import cn.timer.api.dao.kqmk.KqglAssoTeshuMapper;
import
cn.timer.api.dao.kqmk.KqglMainKqzMapper
;
import
cn.timer.api.dao.qyzx.QyzxEntInfoMMapper
;
import
cn.timer.api.dto.kqmk.AdditionalDto
;
import
cn.timer.api.dto.kqmk.AttSchedule
;
import
cn.timer.api.dto.kqmk.AttSubsidiaryDto
;
import
cn.timer.api.dto.kqmk.AttendanceCardListDto
;
import
cn.timer.api.utils.DateUtil
;
/**
...
...
@@ -99,6 +103,10 @@ public class AttendanceTaskTiming{
private
PunchRecordMapper
punchrecordmapper
;
@Autowired
private
KqglAssoDkmxMapper
kqglassodkmxmapper
;
@Autowired
private
ClockInController
clockincontroller
;
/**
* @return
* @throws ParseException
...
...
@@ -109,7 +117,7 @@ public class AttendanceTaskTiming{
// @Scheduled(cron = "0 22 15 * * ?") // 测试:5秒执行一次 0 0 19 * * ?
// @Scheduled(cron = "0 */5 * * * ?")
// @Scheduled(cron = "0
40 17
* * ?")
// @Scheduled(cron = "0
24 10
* * ?")
public
void
AttendanceTask
()
throws
ParseException
{
// boolean implement = false;
...
...
@@ -179,12 +187,18 @@ public class AttendanceTaskTiming{
String
[]
sblacks
=
new
String
[
31
];
//上班缺卡天数
String
[]
xblacks
=
new
String
[
31
];
//下班缺卡天数
String
[]
dkjtts
=
new
String
[
attendance
.
size
()];
//目前打卡日期明细
int
bccs
=
0
;
if
(
attendance
.
size
()
>
0
)
{
dkjl
=
attendance
.
size
();
for
(
PunchCardDetails
pcd:
attendance
){
AttendanceCardListDto
attdate
=
clockincontroller
.
MethodCall
(
org_code
,
user
.
getEmpnum
(),
pcd
.
getData
());
List
<
AttSchedule
>
ashss
=
attdate
.
getAttsch
();
//获取今天应打卡时间
if
(
EmptyUtil
.
isNotEmpty
(
attdate
.
getAttsch
())
&&
ashss
.
get
(
0
).
getId
()
!=
0
)
{
//班次不为空
bccs
=
attdate
.
getAttsch
().
size
();
}
dkjtts
[
dk
]
=
pcd
.
getData
();
dk
++;
if
(
pcd
.
getYdkcs
()
==
2
||
pcd
.
getYdkcs
()
==
4
||
pcd
.
getYdkcs
()
==
6
){
if
(
bccs
==
2
||
bccs
==
4
||
bccs
==
6
){
if
(
pcd
.
getSbdk1
()
==
null
){
sblacks
[
sbqkcs
]
=
pcd
.
getData
();
sbqkcs
++;
...
...
@@ -194,7 +208,7 @@ public class AttendanceTaskTiming{
xbqkcs
++;
}
}
if
(
pcd
.
getYdkcs
()
==
4
||
pcd
.
getYdkcs
()
==
6
){
if
(
bccs
==
4
||
bccs
==
6
){
if
(
pcd
.
getSbdk2
()
==
null
){
sblacks
[
sbqkcs
]
=
pcd
.
getData
();
sbqkcs
++;
...
...
@@ -204,7 +218,7 @@ public class AttendanceTaskTiming{
xbqkcs
++;
}
}
if
(
pcd
.
getYdkcs
()
==
6
){
if
(
bccs
==
6
){
if
(
pcd
.
getSbdk3
()
==
null
){
sblacks
[
sbqkcs
]
=
pcd
.
getData
();
sbqkcs
++;
...
...
@@ -215,6 +229,12 @@ public class AttendanceTaskTiming{
}
}
}
sblacks
=
ClockInTool
.
deleteArrayNull
(
sblacks
);
sbqkcs
=
sblacks
.
length
;
xblacks
=
ClockInTool
.
deleteArrayNull
(
xblacks
);
xbqkcs
=
xblacks
.
length
;
}
//具体打卡时间入汇总表(打卡成功才会录入汇总表)
// KqglAssoMonthPunchSummary isyessum = KqglAssoMonthPunchSummary.builder().build().selectOne(new QueryWrapper<KqglAssoMonthPunchSummary>().lambda()
...
...
@@ -789,6 +809,4 @@ public class AttendanceTaskTiming{
// return null;
// }
}
}
src/main/java/cn/timer/api/controller/spmk/SpmkController.java
View file @
c928be85
...
...
@@ -76,6 +76,7 @@ import cn.timer.api.dao.spmk.SpmkApproveSummaryMapper;
import
cn.timer.api.dao.spmk.SpmkCustomApprovalMapper
;
import
cn.timer.api.dao.spmk.SpmkExecutorMapper
;
import
cn.timer.api.dao.spmk.SpmkInitiatorConfigMapper
;
import
cn.timer.api.dto.spmk.ApprovedQuantityDto
;
import
cn.timer.api.dto.spmk.ApprovingDto
;
import
cn.timer.api.dto.spmk.FlowChildren
;
import
cn.timer.api.dto.spmk.FromData
;
...
...
@@ -926,4 +927,44 @@ public class SpmkController {
return
ResultUtil
.
data
(
msg
);
}
@PostMapping
(
value
=
"/approved_quantity"
)
@ApiOperation
(
value
=
"APP-我发起的/我审批的/抄送我的-数量"
,
httpMethod
=
"POST"
,
notes
=
""
)
public
Result
<
Object
>
ApprovedQuantity
(
@CurrentUser
UserBean
userBean
,
@Validated
@RequestBody
MySummaryQueryDto
mysummaryquerydto
){
ApprovedQuantityDto
qna
=
ApprovedQuantityDto
.
builder
().
build
();
mysummaryquerydto
.
setEndTime
(
null
);
mysummaryquerydto
.
setStartTime
(
null
);
mysummaryquerydto
.
setOrgCode
(
userBean
.
getOrgCode
());
mysummaryquerydto
.
setEmpNum
(
userBean
.
getEmpNum
());
mysummaryquerydto
.
setSts
(
5
);
//状态 0审批中 1审批撤销 2审批通过/审批完成 3审批拒绝 4:(2/3) 5:全部
int
istartedit
=
0
,
ccme
=
0
,
iapprovedit
=
0
;
mysummaryquerydto
.
setType
(
0
);
//我发起的
List
<
SpmkApproveSummary
>
istartedit_
=
spmkApproveSummaryMapper
.
selectPageByQueryForEmpNum
(
mysummaryquerydto
);
if
(
istartedit_
.
size
()
>
0
)
{
istartedit
=
istartedit_
.
size
();
}
mysummaryquerydto
.
setType
(
1
);
//抄送我的
List
<
SpmkApproveSummary
>
ccme_
=
spmkApproveSummaryMapper
.
selectPageByQueryForEmpNum
(
mysummaryquerydto
);
if
(
ccme_
.
size
()
>
0
)
{
ccme
=
ccme_
.
size
();
}
mysummaryquerydto
.
setType
(
2
);
//我审批的
List
<
SpmkApproveSummary
>
iapprovedit_
=
spmkApproveSummaryMapper
.
selectPageByQueryForEmpNum
(
mysummaryquerydto
);
if
(
iapprovedit_
.
size
()
>
0
)
{
iapprovedit
=
iapprovedit_
.
size
();
}
qna
.
setIstartedit
(
istartedit
);
qna
.
setCcme
(
ccme
);
qna
.
setIapprovedit
(
iapprovedit
);
return
ResultUtil
.
data
(
qna
);
}
}
src/main/java/cn/timer/api/dao/kqmk/KqglAssoRelationSummaryMapper.java
View file @
c928be85
...
...
@@ -23,4 +23,6 @@ public interface KqglAssoRelationSummaryMapper extends BaseMapper<KqglAssoRelati
List
<
KqglAssoRelationSummary
>
LeaveInvestigation
(
int
userid
,
int
approvaltype
,
String
apptime
,
int
orgcode
);
KqglAssoRelationSummary
selectTabledata
(
int
userid
,
int
approvaltype
,
String
apptime
);
KqglAssoRelationSummary
leaveinvesti
(
int
userid
,
int
approvaltype
,
String
apptime
,
int
orgcode
);
}
src/main/java/cn/timer/api/dao/spmk/SpmkApproveSummaryMapper.java
View file @
c928be85
package
cn
.
timer
.
api
.
dao
.
spmk
;
import
java.util.List
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
...
...
@@ -21,5 +23,7 @@ public interface SpmkApproveSummaryMapper extends BaseMapper<SpmkApproveSummary>
IPage
<
SpmkApproveSummary
>
selectPageByQuery
(
IPage
<
SpmkApproveSummary
>
page
,
@Param
(
"param"
)
SummaryQueryDto
summaryQueryDto
);
IPage
<
SpmkApproveSummary
>
selectPageByQueryForEmpNum
(
IPage
<
SpmkApproveSummary
>
page
,
@Param
(
"param"
)
MySummaryQueryDto
mySummaryQueryDto
);
List
<
SpmkApproveSummary
>
selectPageByQueryForEmpNum
(
@Param
(
"param"
)
MySummaryQueryDto
mySummaryQueryDto
);
}
src/main/java/cn/timer/api/dto/kqmk/AttSchedule.java
View file @
c928be85
...
...
@@ -26,6 +26,7 @@ public class AttSchedule implements Serializable{
private
Long
starttime
;
private
Long
endtime
;
private
int
isleave
;
//是否请假
private
int
isupdate
;
//是否跟新打卡
private
int
isdk
;
//0:当前打卡 1:已过打卡
private
KqglAssoDkjl
dajl
;
...
...
src/main/java/cn/timer/api/dto/spmk/ApprovedQuantityDto.java
0 → 100644
View file @
c928be85
package
cn
.
timer
.
api
.
dto
.
spmk
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
ApprovedQuantityDto
{
@ApiModelProperty
(
value
=
"我发起的"
,
example
=
"11"
)
private
Integer
istartedit
;
@ApiModelProperty
(
value
=
"抄送我的"
,
example
=
"22"
)
private
Integer
ccme
;
@ApiModelProperty
(
value
=
"我审批的"
,
example
=
"33"
)
private
Integer
iapprovedit
;
}
src/main/java/cn/timer/api/dto/spmk/MySummaryQueryDto.java
View file @
c928be85
...
...
@@ -24,16 +24,16 @@ public class MySummaryQueryDto extends Page{
private
Integer
empNum
;
@ApiModelProperty
(
value
=
"关键字 标题/审批人名称/审批总汇id"
,
example
=
"
请假
"
)
@ApiModelProperty
(
value
=
"关键字 标题/审批人名称/审批总汇id"
,
example
=
""
)
private
String
query
;
@ApiModelProperty
(
value
=
"状态 0审批中 1审批撤销 2审批通过/审批完成 3审批拒绝"
,
example
=
"0"
)
private
Integer
sts
;
@ApiModelProperty
(
value
=
"开始时间 "
,
example
=
"
2000-10-10 10:10:10
"
)
@ApiModelProperty
(
value
=
"开始时间 "
,
example
=
""
)
private
String
startTime
;
@ApiModelProperty
(
value
=
"结束时间 "
,
example
=
"
2020-10-10 10:10:10
"
)
@ApiModelProperty
(
value
=
"结束时间 "
,
example
=
""
)
private
String
endTime
;
@NotNull
(
message
=
ValidationMsg
.
NOTNULL
)
...
...
src/main/resources/mapping/kqmk/KqglAssoRelationSummaryMapper.xml
View file @
c928be85
...
...
@@ -68,6 +68,16 @@
and SUBSTR(res.app_time,1,7) = #{apptime}
GROUP BY res.start_time,res.end_time;
</select>
<select
id=
"leaveinvesti"
resultMap=
"BaseResultMap"
>
select res.start_time,
res.end_time
from kqgl_asso_relation_summary res
where res.user_id = #{userid}
and res.org_code = #{orgcode}
and res.approval_type = #{approvaltype}
and res.app_time = #{apptime}
GROUP BY res.start_time,res.end_time;
</select>
<select
id=
"selectTabledata"
resultMap=
"BaseResultMap"
>
select SUM(res.duration) as duration
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment