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
f2e4a02b
提交
f2e4a02b
authored
2月 03, 2026
作者:
douxy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增xxl-job执行配置
上级
5fadb284
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
132 行增加
和
6 行删除
+132
-6
QinceUserStatisticServiceImpl.java
...job/service/qince/impl/QinceUserStatisticServiceImpl.java
+5
-6
FeiShuLeaveXxlJob.java
...ain/java/com/sfa/job/xxljob/feishu/FeiShuLeaveXxlJob.java
+58
-0
QinCeAttendanceXxlJob.java
.../java/com/sfa/job/xxljob/qince/QinCeAttendanceXxlJob.java
+69
-0
没有找到文件。
src/main/java/com/sfa/job/service/qince/impl/QinceUserStatisticServiceImpl.java
浏览文件 @
f2e4a02b
...
...
@@ -292,7 +292,7 @@ public class QinceUserStatisticServiceImpl implements IQinceUserStatisticService
// 2. 拆分新增/更新列表
List
<
QinceUserStatisticDTO
>
insertList
=
new
ArrayList
<>();
List
<
QinceUserStatisticDTO
>
updateList
=
new
ArrayList
<>();
LocalDateTime
now
=
LocalDateTime
.
now
();
// 当前时间,用于更新 modifyTime
LocalDateTime
now
=
LocalDateTime
.
now
();
for
(
QinceUserStatisticDTO
dto
:
attendanceDtoList
)
{
LocalDate
attLocalDate
=
dto
.
getAttDate
();
...
...
@@ -304,11 +304,10 @@ public class QinceUserStatisticServiceImpl implements IQinceUserStatisticService
String
uniqueKey
=
dto
.
getQcUserId
()
+
"_"
+
targetDateStr
;
if
(
existDtoMap
.
containsKey
(
uniqueKey
))
{
// 已存在:从 DTO 映射中获取数据,更新字段(全程操作 DTO)
QinceUserStatisticDTO
existDto
=
existDtoMap
.
get
(
uniqueKey
);
dto
.
setId
(
existDto
.
getId
());
// 主键 ID 从 DTO 中获取
dto
.
setCreateTime
(
existDto
.
getCreateTime
());
// 保留原有创建时间
dto
.
setModifyTime
(
now
);
// 更新修改时间
dto
.
setId
(
existDto
.
getId
());
dto
.
setCreateTime
(
existDto
.
getCreateTime
());
dto
.
setModifyTime
(
now
);
updateList
.
add
(
dto
);
}
else
{
// 不存在:直接新增(createTime/modifyTime 已赋值)
...
...
@@ -316,7 +315,7 @@ public class QinceUserStatisticServiceImpl implements IQinceUserStatisticService
}
}
//
3.
调用 DAO 层执行批量操作(纯 DTO 入参,无需关心持久化细节)
// 调用 DAO 层执行批量操作(纯 DTO 入参,无需关心持久化细节)
int
insertCount
=
qinceUserStatisticDao
.
batchInsert
(
insertList
);
int
updateCount
=
qinceUserStatisticDao
.
batchUpdate
(
updateList
);
int
totalCount
=
insertCount
+
updateCount
;
...
...
src/main/java/com/sfa/job/xxljob/feishu/FeiShuLeaveXxlJob.java
0 → 100644
浏览文件 @
f2e4a02b
package
com
.
sfa
.
job
.
xxljob
.
feishu
;
import
com.xxl.job.core.context.XxlJobHelper
;
import
com.xxl.job.core.handler.annotation.XxlJob
;
import
com.sfa.job.service.feishu.IFeishuLeaveInfoService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.time.LocalDate
;
import
java.time.format.DateTimeFormatter
;
/**
* 飞书请假数据XXL-JOB定时任务类(适配实际Service:syncFeishuLeaveData(String syncDate))
* 任务:每天00:02同步前一天的请假数据
*/
@Slf4j
@Component
public
class
FeiShuLeaveXxlJob
{
@Autowired
private
IFeishuLeaveInfoService
feishuLeaveInfoService
;
// 日期格式化器(与勤策保持一致,适配 syncDate 入参:yyyy-MM-dd)
private
static
final
DateTimeFormatter
DATE_FORMATTER
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
);
/**
* 飞书请假数据同步任务(XXL-JOB核心方法)
* 调度配置:每天00:02执行(Cron表达式:0 2 0 * * ?)
*/
@XxlJob
(
"feiShuLeaveSyncJob"
)
public
void
feiShuLeaveSyncJob
()
{
// 任务日志记录(XXL-JOB控制台可见)
XxlJobHelper
.
log
(
"===== 开始执行飞书请假数据同步任务(同步前一天数据) ====="
);
// 获取前一天日期(格式:yyyy-MM-dd),适配Service入参要求
LocalDate
yesterday
=
LocalDate
.
now
().
minusDays
(
1
);
String
syncDate
=
yesterday
.
format
(
DATE_FORMATTER
);
XxlJobHelper
.
log
(
"===== 本次同步目标日期:{} ====="
,
syncDate
);
try
{
// 调用你实际的飞书请假同步方法(入参:前一天日期字符串)
String
syncResult
=
feishuLeaveInfoService
.
syncFeishuLeaveData
(
syncDate
);
// 任务结果日志(适配Service返回的字符串结果)
XxlJobHelper
.
log
(
"===== 飞书请假数据同步任务执行完成,同步结果:{} ====="
,
syncResult
);
// 标记任务执行成功(XXL-JOB状态回调)
XxlJobHelper
.
handleSuccess
(
"飞书请假数据同步成功,同步结果:"
+
syncResult
);
}
catch
(
Exception
e
)
{
// 异常处理与日志记录
log
.
error
(
"===== 飞书请假数据同步任务执行失败 ====="
,
e
);
XxlJobHelper
.
log
(
"===== 飞书请假数据同步任务执行失败,异常信息:{} ====="
,
e
.
getMessage
());
// 标记任务执行失败(XXL-JOB状态回调)
XxlJobHelper
.
handleFail
(
"飞书请假数据同步失败,异常信息:"
+
e
.
getMessage
());
}
}
}
\ No newline at end of file
src/main/java/com/sfa/job/xxljob/qince/QinCeAttendanceXxlJob.java
0 → 100644
浏览文件 @
f2e4a02b
package
com
.
sfa
.
job
.
xxljob
.
qince
;
import
com.xxl.job.core.context.XxlJobHelper
;
import
com.xxl.job.core.handler.annotation.XxlJob
;
import
com.sfa.job.service.qince.IQinceUserStatisticService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* 勤策考勤数据XXL-JOB定时任务类
*/
@Slf4j
@Component
public
class
QinCeAttendanceXxlJob
{
@Autowired
private
IQinceUserStatisticService
qinceUserStatisticService
;
/**
* 勤策考勤数据同步任务(XXL-JOB核心方法)
* 调度配置:每天123:00执行(Cron表达式:0 0 23 * * ?)
*/
@XxlJob
(
"qinCeAttendanceSyncTodayJob"
)
public
void
qinCeAttendanceSyncTodayJob
()
{
XxlJobHelper
.
log
(
"===== 开始执行勤策考勤数据同步任务(同步当天数据) ====="
);
try
{
// 调用已实现的同步当天考勤数据方法
int
syncCount
=
qinceUserStatisticService
.
queryAndSaveTodayAttendance
();
// 任务结果日志
XxlJobHelper
.
log
(
"===== 勤策考勤数据同步任务执行完成,总计同步/更新{}条记录 ====="
,
syncCount
);
// 标记任务执行成功(XXL-JOB状态回调)
XxlJobHelper
.
handleSuccess
(
"勤策考勤数据同步成功,总计同步/更新"
+
syncCount
+
"条记录"
);
}
catch
(
Exception
e
)
{
log
.
error
(
"===== 勤策考勤数据同步任务执行失败 ====="
,
e
);
XxlJobHelper
.
log
(
"===== 勤策考勤数据同步任务执行失败,异常信息:{} ====="
,
e
.
getMessage
());
XxlJobHelper
.
handleFail
(
"勤策考勤数据同步失败,异常信息:"
+
e
.
getMessage
());
}
}
/**
* 勤策考勤数据同步任务(XXL-JOB核心方法)
* 调度配置:每天123:00执行(Cron表达式:0 0 23 * * ?)
*/
@XxlJob
(
"qinCeAttendanceSyncYesterdayJob"
)
public
void
qinCeAttendanceSyncYesterdayJob
()
{
// 1. 任务日志记录(XXL-JOB控制台可见)
XxlJobHelper
.
log
(
"===== 开始执行勤策考勤数据同步任务(同步当天数据) ====="
);
try
{
// 2. 调用已实现的同步前一天考勤数据方法
int
syncCount
=
qinceUserStatisticService
.
queryAndSaveTodayAttendance
();
// 3. 任务结果日志
XxlJobHelper
.
log
(
"===== 勤策考勤数据同步任务执行完成,总计同步/更新{}条记录 ====="
,
syncCount
);
// 4. 标记任务执行成功(XXL-JOB状态回调)
XxlJobHelper
.
handleSuccess
(
"勤策考勤数据同步成功,总计同步/更新"
+
syncCount
+
"条记录"
);
}
catch
(
Exception
e
)
{
// 5. 异常处理与日志记录
log
.
error
(
"===== 勤策考勤数据同步任务执行失败 ====="
,
e
);
XxlJobHelper
.
log
(
"===== 勤策考勤数据同步任务执行失败,异常信息:{} ====="
,
e
.
getMessage
());
// 6. 标记任务执行失败(XXL-JOB状态回调)
XxlJobHelper
.
handleFail
(
"勤策考勤数据同步失败,异常信息:"
+
e
.
getMessage
());
}
}
}
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论