Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-module-job
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-module-job
Commits
84fe610e
提交
84fe610e
authored
2月 04, 2026
作者:
douxy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增xxl-job执行配置
上级
8bf0c38d
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
56 行增加
和
12 行删除
+56
-12
QinceUserStatisticDaoImpl.java
...m/sfa/job/domain/qince/dao/QinceUserStatisticDaoImpl.java
+1
-1
QinceUserStatisticServiceImpl.java
...job/service/qince/impl/QinceUserStatisticServiceImpl.java
+45
-0
FeiShuLeaveXxlJob.java
...ain/java/com/sfa/job/xxljob/feishu/FeiShuLeaveXxlJob.java
+1
-1
QinCeAttendanceXxlJob.java
.../java/com/sfa/job/xxljob/qince/QinCeAttendanceXxlJob.java
+9
-10
没有找到文件。
src/main/java/com/sfa/job/domain/qince/dao/QinceUserStatisticDaoImpl.java
浏览文件 @
84fe610e
...
...
@@ -20,7 +20,7 @@ import java.util.stream.Collectors;
*/
@Slf4j
@Service
@DS
(
"
promotion
"
)
@DS
(
"
bi
"
)
public
class
QinceUserStatisticDaoImpl
implements
IQinceUserStatisticDao
{
@Autowired
...
...
src/main/java/com/sfa/job/service/qince/impl/QinceUserStatisticServiceImpl.java
浏览文件 @
84fe610e
...
...
@@ -19,6 +19,7 @@ import java.time.LocalDateTime;
import
java.time.ZoneId
;
import
java.time.format.DateTimeFormatter
;
import
java.time.format.DateTimeParseException
;
import
java.time.temporal.TemporalAdjusters
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -421,4 +422,47 @@ public class QinceUserStatisticServiceImpl implements IQinceUserStatisticService
}
return
null
;
}
/**
* 测试专用:同步当前年份1月份全量数据(无参快捷调用)
* @return 总计同步记录数
*/
public
int
testSyncCurrentYearJanuaryAttendance
()
{
return
testSyncJanuaryAttendance
(
LocalDate
.
now
().
getYear
());
}
/**
* 测试专用:同步指定年份1月份全量数据
* @param year 目标年份,如2026
* @return 总计同步记录数
*/
public
int
testSyncJanuaryAttendance
(
int
year
)
{
log
.
info
(
"===== 【测试模式】开始同步{}年1月份全量勤策考勤数据 ====="
,
year
);
int
totalCount
=
0
;
// 构造1月1日和1月最后一天
LocalDate
janFirst
=
LocalDate
.
of
(
year
,
1
,
1
);
LocalDate
janLast
=
janFirst
.
with
(
TemporalAdjusters
.
lastDayOfMonth
());
// 遍历1月份所有日期,循环同步(添加休眠避免API限流)
LocalDate
currentDate
=
janFirst
;
while
(!
currentDate
.
isAfter
(
janLast
))
{
try
{
log
.
info
(
"【测试模式】开始同步{}"
,
currentDate
.
format
(
DATE_FORMATTER
));
// 复用原有核心同步方法,无需重复写逻辑
int
dayCount
=
syncAttendanceByTargetDate
(
currentDate
);
totalCount
+=
dayCount
;
log
.
info
(
"【测试模式】完成同步{},当日同步{}条,累计{}条"
,
currentDate
.
format
(
DATE_FORMATTER
),
dayCount
,
totalCount
);
// 休眠1秒,避免触发勤策API限流(可根据实际情况调整)
Thread
.
sleep
(
1000
);
}
catch
(
Exception
e
)
{
log
.
error
(
"【测试模式】同步{}失败,跳过该日期"
,
currentDate
.
format
(
DATE_FORMATTER
),
e
);
}
finally
{
// 日期+1,无论当日是否失败,继续下一天
currentDate
=
currentDate
.
plusDays
(
1
);
}
}
log
.
info
(
"===== 【测试模式】{}年1月份全量数据同步完成,总计同步{}条 ====="
,
year
,
totalCount
);
return
totalCount
;
}
}
\ No newline at end of file
src/main/java/com/sfa/job/xxljob/feishu/FeiShuLeaveXxlJob.java
浏览文件 @
84fe610e
...
...
@@ -26,7 +26,7 @@ public class FeiShuLeaveXxlJob {
/**
* 飞书请假数据同步任务(XXL-JOB核心方法)
* 调度配置:每天0
0:02执行(Cron表达式:0 2 0
* * ?)
* 调度配置:每天0
2:00执行(Cron表达式:0 0 2
* * ?)
*/
@XxlJob
(
"feiShuLeaveSyncJob"
)
public
void
feiShuLeaveSyncJob
()
{
...
...
src/main/java/com/sfa/job/xxljob/qince/QinCeAttendanceXxlJob.java
浏览文件 @
84fe610e
...
...
@@ -19,7 +19,7 @@ public class QinCeAttendanceXxlJob {
/**
* 勤策考勤数据同步任务(XXL-JOB核心方法)
* 调度配置:每天
1
23:00执行(Cron表达式:0 0 23 * * ?)
* 调度配置:每天23:00执行(Cron表达式:0 0 23 * * ?)
*/
@XxlJob
(
"qinCeAttendanceSyncTodayJob"
)
public
void
qinCeAttendanceSyncTodayJob
()
{
...
...
@@ -42,25 +42,24 @@ public class QinCeAttendanceXxlJob {
/**
* 勤策考勤数据同步任务(XXL-JOB核心方法)
* 调度配置:每天
123:00执行(Cron表达式:0 0 23
* * ?)
* 调度配置:每天
00:02执行(Cron表达式:0 2 0
* * ?)
*/
@XxlJob
(
"qinCeAttendanceSyncYesterdayJob"
)
public
void
qinCeAttendanceSyncYesterdayJob
()
{
// 1. 任务日志记录(XXL-JOB控制台可见)
XxlJobHelper
.
log
(
"===== 开始执行勤策考勤数据同步任务(同步当天数据) ====="
);
XxlJobHelper
.
log
(
"===== 开始执行勤策考勤数据同步任务(同步前一天数据) ====="
);
try
{
//
2.
调用已实现的同步前一天考勤数据方法
int
syncCount
=
qinceUserStatisticService
.
queryAndSave
To
dayAttendance
();
// 调用已实现的同步前一天考勤数据方法
int
syncCount
=
qinceUserStatisticService
.
queryAndSave
Yester
dayAttendance
();
//
3.
任务结果日志
// 任务结果日志
XxlJobHelper
.
log
(
"===== 勤策考勤数据同步任务执行完成,总计同步/更新{}条记录 ====="
,
syncCount
);
//
4.
标记任务执行成功(XXL-JOB状态回调)
// 标记任务执行成功(XXL-JOB状态回调)
XxlJobHelper
.
handleSuccess
(
"勤策考勤数据同步成功,总计同步/更新"
+
syncCount
+
"条记录"
);
}
catch
(
Exception
e
)
{
//
5.
异常处理与日志记录
// 异常处理与日志记录
log
.
error
(
"===== 勤策考勤数据同步任务执行失败 ====="
,
e
);
XxlJobHelper
.
log
(
"===== 勤策考勤数据同步任务执行失败,异常信息:{} ====="
,
e
.
getMessage
());
//
6.
标记任务执行失败(XXL-JOB状态回调)
// 标记任务执行失败(XXL-JOB状态回调)
XxlJobHelper
.
handleFail
(
"勤策考勤数据同步失败,异常信息:"
+
e
.
getMessage
());
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论