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
a112d271
提交
a112d271
authored
12月 30, 2025
作者:
000516
浏览文件
操作
浏览文件
下载
差异文件
更新经销商业代上级为经销商客户经理
上级
d3c3c6fb
cf9e643c
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
108 行增加
和
29 行删除
+108
-29
IQinceEmployeeDao.java
.../java/com/sfa/job/domain/qince/dao/IQinceEmployeeDao.java
+1
-0
QinceEmployeeDaoImpl.java
...va/com/sfa/job/domain/qince/dao/QinceEmployeeDaoImpl.java
+9
-0
IQinceEmpAndDeptService.java
...va/com/sfa/job/service/qince/IQinceEmpAndDeptService.java
+4
-1
QinceEmpAndDeptServiceImpl.java
...fa/job/service/qince/impl/QinceEmpAndDeptServiceImpl.java
+89
-26
QinceCoreTask.java
src/main/java/com/sfa/job/xxljob/qince/QinceCoreTask.java
+5
-2
没有找到文件。
src/main/java/com/sfa/job/domain/qince/dao/IQinceEmployeeDao.java
浏览文件 @
a112d271
...
...
@@ -14,4 +14,5 @@ public interface IQinceEmployeeDao {
String
getQcIdByEmpCode
(
String
empCode
);
void
userResigned
(
String
empQcId
);
List
<
QinceEmployeeDto
>
selectListByEmpcodes
(
Set
<
String
>
keySet
);
List
<
QinceEmployeeDto
>
selectListByOrgCode
(
String
orgCode
);
}
src/main/java/com/sfa/job/domain/qince/dao/QinceEmployeeDaoImpl.java
浏览文件 @
a112d271
...
...
@@ -50,4 +50,13 @@ public class QinceEmployeeDaoImpl implements IQinceEmployeeDao {
List
<
QinceEmployee
>
qcEmployees
=
qinceEmployeeMapper
.
selectList
(
qw
);
return
BeanUtils
.
transitionDtos
(
qcEmployees
,
QinceEmployeeDto
.
class
);
}
@Override
public
List
<
QinceEmployeeDto
>
selectListByOrgCode
(
String
orgCode
)
{
LambdaQueryWrapper
<
QinceEmployee
>
qw
=
new
LambdaQueryWrapper
<>();
qw
.
eq
(
QinceEmployee:
:
getEmpOrgCode
,
orgCode
);
qw
.
in
(
QinceEmployee:
:
getEmpStatus
,
QinceEmpStatus
.
NORMAL
.
getStatus
());
List
<
QinceEmployee
>
qcEmployees
=
qinceEmployeeMapper
.
selectList
(
qw
);
return
BeanUtils
.
transitionDtos
(
qcEmployees
,
QinceEmployeeDto
.
class
);
}
}
src/main/java/com/sfa/job/service/qince/IQinceEmpAndDeptService.java
浏览文件 @
a112d271
...
...
@@ -6,5 +6,8 @@ package com.sfa.job.service.qince;
* @describe :
*/
public
interface
IQinceEmpAndDeptService
{
void
syncQinceDealerInfo
();
void
syncQinceEmpLeaderInfo
();
void
syncQinceDealerUserLeaderInfo
();
}
src/main/java/com/sfa/job/service/qince/impl/QinceEmpAndDeptServiceImpl.java
浏览文件 @
a112d271
package
com
.
sfa
.
job
.
service
.
qince
.
impl
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.sfa.common.core.utils.StringUtils
;
import
com.sfa.common.core.utils.sdk.FeiShuUtil
;
import
com.sfa.common.core.utils.sdk.FeiShuUtils
;
import
com.sfa.job.domain.feishu.dao.IQinceMarketEmployeeDao
;
import
com.sfa.job.domain.qince.dao.IQinceEmployeeDao
;
import
com.sfa.job.domain.system.dao.ISysUserDao
;
import
com.sfa.job.pojo.feishu.response.QinceMarketEmployeeDto
;
import
com.sfa.job.pojo.qince.response.QinceEmployeeDto
;
import
com.sfa.job.service.qince.IQinceEmpAndDeptService
;
import
com.sfa.job.util.QinCeUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -32,37 +33,99 @@ public class QinceEmpAndDeptServiceImpl implements IQinceEmpAndDeptService {
private
ISysUserDao
sysUserDao
;
@Autowired
private
IQinceEmployeeDao
qinceEmployeeDao
;
@Autowired
private
IQinceMarketEmployeeDao
qinceMarketEmployeeDao
;
@Override
public
void
syncQince
Deal
erInfo
()
{
public
void
syncQince
EmpLead
erInfo
()
{
// 查询飞书的上下级关系(仅区域销售部)
Map
<
String
,
String
>
empCodeAndLeader
=
sysUserDao
.
selectListEmpAndLeader
();
log
.
info
(
"飞书区域销售部共【{}】人"
,
empCodeAndLeader
.
size
());
List
<
QinceEmployeeDto
>
qinceEmployeeDtos
=
qinceEmployeeDao
.
selectListByEmpcodes
(
empCodeAndLeader
.
keySet
());
log
.
info
(
"飞书-区域销售部共【{}】人"
,
qinceEmployeeDtos
.
size
());
Set
<
String
>
leaderCodes
=
new
HashSet
<>(
empCodeAndLeader
.
values
());
List
<
QinceEmployeeDto
>
leaderDtos
=
qinceEmployeeDao
.
selectListByEmpcodes
(
leaderCodes
);
Map
<
String
,
String
>
leaderQcIdMap
=
leaderDtos
.
stream
().
collect
(
Collectors
.
toMap
(
m
->
m
.
getEmpCode
(),
m
->
m
.
getQcId
()));
log
.
info
(
"飞书关联勤策区域销售部共【{}】人"
,
qinceEmployeeDtos
.
size
());
Map
<
String
,
QinceEmployeeDto
>
leaderEmpInfoMap
=
leaderDtos
.
stream
().
collect
(
Collectors
.
toMap
(
m
->
m
.
getEmpCode
(),
m
->
m
));
log
.
info
(
"飞书关联勤策-区域销售部共【{}】人"
,
qinceEmployeeDtos
.
size
());
for
(
QinceEmployeeDto
empDto
:
qinceEmployeeDtos
)
{
String
logtext
;
try
{
String
leaderCode
=
empCodeAndLeader
.
get
(
empDto
.
getEmpCode
());
String
leaderQcId
=
leaderQcIdMap
.
get
(
leaderCode
);
// 如果上级为空或上级未发生变化,则不处理
if
(
StringUtils
.
isBlank
(
leaderCode
)
||
StringUtils
.
isBlank
(
leaderQcId
)
||
leaderCode
.
equals
(
empDto
.
getParentCode
())
)
{
continue
;
}
Map
<
String
,
Object
>
params
=
qinCeUtils
.
putUserLeaderParams
(
empDto
.
getQcId
(),
leaderQcId
);
String
url
=
qinCeUtils
.
builderUrl
(
QinCeUtils
.
MODIFY_USER
,
params
);
qinCeUtils
.
postQC
(
url
,
params
);
logtext
=
"更新勤策【"
+
empDto
.
getEmpCode
()
+
":"
+
empDto
.
getEmpName
()
+
"】的上级Leader信息【"
+
leaderCode
+
"】成功"
;
log
.
info
(
logtext
);
}
catch
(
Exception
e
)
{
logtext
=
"更新勤策【"
+
empDto
.
getEmpCode
()
+
":"
+
empDto
.
getEmpName
()
+
"】的上级Leader信息失败:"
+
e
.
getMessage
();
log
.
error
(
logtext
);
String
leaderCode
=
empCodeAndLeader
.
get
(
empDto
.
getEmpCode
());
QinceEmployeeDto
leaderEmpInfo
=
leaderEmpInfoMap
.
get
(
leaderCode
);
// 如果上级为空或上级未发生变化,则不处理
if
(
StringUtils
.
isBlank
(
leaderCode
)
||
Objects
.
isNull
(
leaderEmpInfo
)
||
leaderCode
.
equals
(
empDto
.
getParentCode
()))
{
continue
;
}
FeiShuUtils
.
pustRoot
(
FeiShuUtil
.
qinceWebhook
,
logtext
);
updateQinceUserLeader
(
"区域销售部"
,
empDto
,
leaderEmpInfo
);
}
}
/**
* 更新经销商业代人员上级
*/
@Override
public
void
syncQinceDealerUserLeaderInfo
()
{
// 查询经销商人客关系
List
<
QinceMarketEmployeeDto
>
marketDtos
=
qinceMarketEmployeeDao
.
selectByTodayUpdate
();
// 查询客户经理的勤策个人信息
if
(
CollectionUtils
.
isEmpty
(
marketDtos
)){
log
.
info
(
"push qc 经销商业代上级: 今日无新增/修改经销商"
);
return
;
}
Set
<
String
>
marketEmpCodes
=
marketDtos
.
stream
().
map
(
m
->
m
.
getFEmpNo
()).
collect
(
Collectors
.
toSet
());
List
<
QinceEmployeeDto
>
leaderDtos
=
qinceEmployeeDao
.
selectListByEmpcodes
(
marketEmpCodes
);
Map
<
String
,
QinceEmployeeDto
>
leaderEmpInfoMap
=
leaderDtos
.
stream
().
collect
(
Collectors
.
toMap
(
m
->
m
.
getEmpCode
(),
m
->
m
));
if
(
CollectionUtils
.
isEmpty
(
leaderDtos
)){
String
logText
=
"【ERROR】勤员人员信息中,无经销商客户经理信息,经销商包含:"
+
JSONObject
.
toJSONString
(
marketEmpCodes
);
log
.
info
(
logText
);
FeiShuUtils
.
pustRoot
(
FeiShuUtil
.
qinceWebhook
,
logText
);
return
;
}
for
(
QinceMarketEmployeeDto
marketDto
:
marketDtos
)
{
updateQinceDealerUserLeader
(
marketDto
,
leaderEmpInfoMap
);
}
}
/**
* 更新业代上级
*/
private
void
updateQinceDealerUserLeader
(
QinceMarketEmployeeDto
marketDto
,
Map
<
String
,
QinceEmployeeDto
>
leaderEmpInfoMap
){
// 查询勤策-经销商部门下的人员
String
dealerCode
=
marketDto
.
getDealerCode
();
List
<
QinceEmployeeDto
>
dealerEmpDtos
=
qinceEmployeeDao
.
selectListByOrgCode
(
dealerCode
);
log
.
info
(
"勤策经销商部门【{}:{}】下共【{}】位业代人员"
,
dealerCode
,
marketDto
.
getDealerName
(),
dealerEmpDtos
.
size
());
String
fEmpNo
=
marketDto
.
getFEmpNo
();
if
(
Objects
.
isNull
(
fEmpNo
)){
return
;
}
QinceEmployeeDto
leaderEmpInfo
=
leaderEmpInfoMap
.
get
(
fEmpNo
);
// 对比当前人员上级-经销商客户经理:不同则修改;相同则跳过
for
(
QinceEmployeeDto
dealerEmpDto
:
dealerEmpDtos
)
{
if
(
Objects
.
nonNull
(
dealerEmpDto
.
getParentCode
())
&&
fEmpNo
.
equals
(
dealerEmpDto
.
getParentCode
())){
continue
;
}
updateQinceUserLeader
(
marketDto
.
getDealerName
(),
dealerEmpDto
,
leaderEmpInfo
);
}
}
/**
* @param empDto 员工对象
* @param leaderEmpInfo 员工上级对象
*/
private
void
updateQinceUserLeader
(
String
qcDeptName
,
QinceEmployeeDto
empDto
,
QinceEmployeeDto
leaderEmpInfo
){
String
logtext
;
try
{
Map
<
String
,
Object
>
params
=
qinCeUtils
.
putUserLeaderParams
(
empDto
.
getQcId
(),
leaderEmpInfo
.
getQcId
());
String
url
=
qinCeUtils
.
builderUrl
(
QinCeUtils
.
MODIFY_USER
,
params
);
qinCeUtils
.
postQC
(
url
,
params
);
logtext
=
"【OK】更新勤策「"
+
qcDeptName
+
"」部门的【"
+
empDto
.
getEmpCode
()
+
":"
+
empDto
.
getEmpName
()
+
"】上级Leader为【"
+
leaderEmpInfo
.
getEmpCode
()
+
":"
+
leaderEmpInfo
.
getEmpName
()
+
"】成功"
;
log
.
info
(
logtext
);
}
catch
(
Exception
e
)
{
logtext
=
"【ERROR】更新勤策「"
+
qcDeptName
+
"」部门的【"
+
empDto
.
getEmpCode
()
+
":"
+
empDto
.
getEmpName
()
+
"】上级Leader信息失败:"
+
e
.
getMessage
();
log
.
error
(
logtext
);
}
FeiShuUtils
.
pustRoot
(
FeiShuUtil
.
qinceWebhook
,
logtext
);
}
}
src/main/java/com/sfa/job/xxljob/qince/QinceCoreTask.java
浏览文件 @
a112d271
...
...
@@ -47,9 +47,12 @@ public class QinceCoreTask {
* 根据飞书上下级关系,同步勤策上下级信息
*/
@XxlJob
(
"qince_modify_emp_leader"
)
public
void
syncQinceDealerInfo
()
{
public
void
updateQinceEmpLeader
()
{
log
.
info
(
"同步勤策员工上下级关系 start"
);
qinceEmpAndDeptService
.
syncQinceDealerInfo
();
// 同步内部员工
qinceEmpAndDeptService
.
syncQinceEmpLeaderInfo
();
// 同步经销商业代
qinceEmpAndDeptService
.
syncQinceDealerUserLeaderInfo
();
log
.
info
(
"同步勤策员工上下级关系 end"
);
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论