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
f5994bb5
提交
f5994bb5
authored
12月 29, 2025
作者:
000516
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
人员上下级关系,来自飞书组织架构只修改【区域销售部】部门下员工
上级
9b57084c
显示空白字符变更
内嵌
并排
正在显示
15 个修改的文件
包含
299 行增加
和
30 行删除
+299
-30
IQinceEmployeeDao.java
.../java/com/sfa/job/domain/qince/dao/IQinceEmployeeDao.java
+6
-1
QinceEmployeeDaoImpl.java
...va/com/sfa/job/domain/qince/dao/QinceEmployeeDaoImpl.java
+18
-0
ISysUserDao.java
src/main/java/com/sfa/job/domain/system/dao/ISysUserDao.java
+10
-0
SysUserDaoImpl.java
...in/java/com/sfa/job/domain/system/dao/SysUserDaoImpl.java
+12
-0
SysUser.java
src/main/java/com/sfa/job/domain/system/entity/SysUser.java
+3
-0
SysUserMapper.java
.../java/com/sfa/job/domain/system/mapper/SysUserMapper.java
+4
-0
QinceEmployeeDto.java
...ava/com/sfa/job/pojo/qince/response/QinceEmployeeDto.java
+126
-0
IQinceDealerQueryService.java
...a/com/sfa/job/service/qince/IQinceDealerQueryService.java
+0
-3
IQinceEmpAndDeptService.java
...va/com/sfa/job/service/qince/IQinceEmpAndDeptService.java
+10
-0
QinceDealerQueryServiceImpl.java
...a/job/service/qince/impl/QinceDealerQueryServiceImpl.java
+1
-21
QinceEmpAndDeptServiceImpl.java
...fa/job/service/qince/impl/QinceEmpAndDeptServiceImpl.java
+67
-0
DeptAndUserServiceImpl.java
...va/com/sfa/job/service/system/DeptAndUserServiceImpl.java
+1
-1
QinCeUtils.java
src/main/java/com/sfa/job/util/QinCeUtils.java
+7
-0
QinceCoreTask.java
src/main/java/com/sfa/job/xxljob/qince/QinceCoreTask.java
+19
-4
SysUserMapper.xml
src/main/resources/mapper/master/SysUserMapper.xml
+15
-0
没有找到文件。
src/main/java/com/sfa/job/domain/qince/dao/IQinceEmployeeDao.java
浏览文件 @
f5994bb5
package
com
.
sfa
.
job
.
domain
.
qince
.
dao
;
package
com
.
sfa
.
job
.
domain
.
qince
.
dao
;
import
com.sfa.job.pojo.qince.response.QinceEmployeeDto
;
import
java.util.List
;
import
java.util.Set
;
/**
/**
* @author : liqiulin
* @author : liqiulin
* @date : 2025-12-05 17
* @date : 2025-12-05 17
...
@@ -7,6 +12,6 @@ package com.sfa.job.domain.qince.dao;
...
@@ -7,6 +12,6 @@ package com.sfa.job.domain.qince.dao;
*/
*/
public
interface
IQinceEmployeeDao
{
public
interface
IQinceEmployeeDao
{
String
getQcIdByEmpCode
(
String
empCode
);
String
getQcIdByEmpCode
(
String
empCode
);
void
userResigned
(
String
empQcId
);
void
userResigned
(
String
empQcId
);
List
<
QinceEmployeeDto
>
selectListByEmpcodes
(
Set
<
String
>
keySet
);
}
}
src/main/java/com/sfa/job/domain/qince/dao/QinceEmployeeDaoImpl.java
浏览文件 @
f5994bb5
...
@@ -2,11 +2,17 @@ package com.sfa.job.domain.qince.dao;
...
@@ -2,11 +2,17 @@ package com.sfa.job.domain.qince.dao;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.sfa.common.core.enums.qince.QinceEmpStatus
;
import
com.sfa.common.core.utils.bean.BeanUtils
;
import
com.sfa.job.domain.qince.entity.QinceEmployee
;
import
com.sfa.job.domain.qince.entity.QinceEmployee
;
import
com.sfa.job.domain.qince.mapper.QinceEmployeeMapper
;
import
com.sfa.job.domain.qince.mapper.QinceEmployeeMapper
;
import
com.sfa.job.pojo.qince.response.QinceEmployeeDto
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
java.util.Set
;
/**
/**
* @author : liqiulin
* @author : liqiulin
* @date : 2025-12-05 17
* @date : 2025-12-05 17
...
@@ -32,4 +38,16 @@ public class QinceEmployeeDaoImpl implements IQinceEmployeeDao {
...
@@ -32,4 +38,16 @@ public class QinceEmployeeDaoImpl implements IQinceEmployeeDao {
public
void
userResigned
(
String
empQcId
)
{
public
void
userResigned
(
String
empQcId
)
{
qinceEmployeeMapper
.
userResigned
(
empQcId
);
qinceEmployeeMapper
.
userResigned
(
empQcId
);
}
}
/**
* 根据code批量查询
*/
@Override
public
List
<
QinceEmployeeDto
>
selectListByEmpcodes
(
Set
<
String
>
keySet
)
{
LambdaQueryWrapper
<
QinceEmployee
>
qw
=
new
LambdaQueryWrapper
<>();
qw
.
in
(
QinceEmployee:
:
getEmpCode
,
keySet
);
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/domain/system/dao/ISysUserDao.java
浏览文件 @
f5994bb5
...
@@ -22,6 +22,16 @@ public interface ISysUserDao {
...
@@ -22,6 +22,16 @@ public interface ISysUserDao {
void
updateOffboardDate
(
String
employeeNo
,
Date
offboardDate
);
void
updateOffboardDate
(
String
employeeNo
,
Date
offboardDate
);
/**
* @return 离职人员信息
*/
List
<
String
>
selectResignedUsers
();
List
<
String
>
selectResignedUsers
();
void
updateUserLeader
();
/**
* @Return key:员工工号;value:上级工号
*/
Map
<
String
,
String
>
selectListEmpAndLeader
();
}
}
src/main/java/com/sfa/job/domain/system/dao/SysUserDaoImpl.java
浏览文件 @
f5994bb5
...
@@ -45,6 +45,7 @@ public class SysUserDaoImpl implements ISysUserDao{
...
@@ -45,6 +45,7 @@ public class SysUserDaoImpl implements ISysUserDao{
sysUser
.
setRoleName
(
""
);
sysUser
.
setRoleName
(
""
);
sysUser
.
setWorkCityName
(
jo
.
getString
(
"city"
));
sysUser
.
setWorkCityName
(
jo
.
getString
(
"city"
));
sysUser
.
setStatus
(
StatusType
.
INVALID
.
getType
()+
""
);
sysUser
.
setStatus
(
StatusType
.
INVALID
.
getType
()+
""
);
sysUser
.
setLeaderFsOpenId
(
jo
.
getString
(
"leader_user_id"
));
// 根据username(工号)查询
// 根据username(工号)查询
SysUser
sysUserOld
=
sysUserMapper
.
selectOne
(
new
LambdaQueryWrapper
<
SysUser
>().
eq
(
SysUser:
:
getUserName
,
sysUser
.
getUserName
()));
SysUser
sysUserOld
=
sysUserMapper
.
selectOne
(
new
LambdaQueryWrapper
<
SysUser
>().
eq
(
SysUser:
:
getUserName
,
sysUser
.
getUserName
()));
...
@@ -82,4 +83,15 @@ public class SysUserDaoImpl implements ISysUserDao{
...
@@ -82,4 +83,15 @@ public class SysUserDaoImpl implements ISysUserDao{
public
List
<
String
>
selectResignedUsers
()
{
public
List
<
String
>
selectResignedUsers
()
{
return
sysUserMapper
.
selectResignedUsers
();
return
sysUserMapper
.
selectResignedUsers
();
}
}
@Override
public
void
updateUserLeader
()
{
sysUserMapper
.
updateUserLeader
();
}
@Override
public
Map
<
String
,
String
>
selectListEmpAndLeader
()
{
List
<
HashMap
<
String
,
String
>>
empAndLeaders
=
sysUserMapper
.
selectListEmpAndLeader
();
return
empAndLeaders
.
stream
().
collect
(
Collectors
.
toMap
(
m
->
m
.
get
(
"user_name"
),
m
->
m
.
get
(
"leader_emp_code"
)));
}
}
}
src/main/java/com/sfa/job/domain/system/entity/SysUser.java
浏览文件 @
f5994bb5
...
@@ -46,6 +46,9 @@ public class SysUser implements Serializable {
...
@@ -46,6 +46,9 @@ public class SysUser implements Serializable {
*/
*/
private
String
fsUserId
;
private
String
fsUserId
;
private
String
fsOpenId
;
private
String
fsOpenId
;
private
String
leaderFsOpenId
;
private
String
leaderEmpCode
;
private
String
leaderEmpName
;
/**
/**
* 用户邮箱
* 用户邮箱
...
...
src/main/java/com/sfa/job/domain/system/mapper/SysUserMapper.java
浏览文件 @
f5994bb5
...
@@ -32,6 +32,10 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
...
@@ -32,6 +32,10 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
List
<
String
>
selectResignedUsers
();
List
<
String
>
selectResignedUsers
();
void
putById
(
SysUser
sysUser
);
void
putById
(
SysUser
sysUser
);
void
updateUserLeader
();
List
<
HashMap
<
String
,
String
>>
selectListEmpAndLeader
();
}
}
...
...
src/main/java/com/sfa/job/pojo/qince/response/QinceEmployeeDto.java
0 → 100644
浏览文件 @
f5994bb5
package
com
.
sfa
.
job
.
pojo
.
qince
.
response
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
lombok.Data
;
/**
* @author : liqiulin
* @date : 2025-12-29 17
* @describe :
*/
@Data
public
class
QinceEmployeeDto
{
/**
* 主键id
*/
private
Integer
id
;
/**
* 勤策的员工唯一标识
*/
private
String
qcId
;
/**
* 来源第三方系统的员工唯一标识
*/
private
String
empId
;
/**
* 员工登录帐号
*/
private
String
empCode
;
/**
* 姓名
*/
private
String
empName
;
/**
* 员工别名
*/
private
String
aliasName
;
/**
* 人员编码
*/
private
String
employeeCode
;
/**
* 员工手机号码
*/
private
String
empMobile
;
/**
* 员工手机地区码
*/
private
String
mobileDistrictCode
;
/**
* 固定电话,示例:025-68736873
*/
private
String
empTel
;
/**
* 来源第三方系统隶属部门
*/
private
String
empOrgId
;
/**
* 隶属部门编码
*/
private
String
empOrgCode
;
/**
* 勤策部门唯一标识
*/
private
String
waiqin365OrgId
;
/**
* 来源第三方系统,员工上级唯一标识
*/
private
String
empParentId
;
/**
* 员工上级编码
*/
private
String
parentCode
;
/**
* 勤策员工上级唯一标识
*/
private
String
waiqin365ParentId
;
/**
* 员工账号状态。0:销户,1:正常,2:停用
*/
private
String
empStatus
;
/**
* 手机卡绑定。0:不绑定,1:绑定
*/
private
String
empImsiBinding
;
/**
* 勤策经销商唯一标识
*/
private
String
dealerId
;
/**
* 经销商中文名称
*/
private
String
dealerName
;
/**
* 创建时间
*/
private
String
createTime
;
/**
* 修改时间
*/
private
String
modifyTime
;
@TableField
(
exist
=
false
)
private
static
final
long
serialVersionUID
=
1L
;
}
src/main/java/com/sfa/job/service/qince/IQinceDealerQueryService.java
浏览文件 @
f5994bb5
...
@@ -7,10 +7,7 @@ package com.sfa.job.service.qince;
...
@@ -7,10 +7,7 @@ package com.sfa.job.service.qince;
*/
*/
public
interface
IQinceDealerQueryService
{
public
interface
IQinceDealerQueryService
{
void
updateQinceDealerInfo
();
void
updateQinceDealerInfo
();
void
queryCusVisitRecord
();
void
queryCusVisitRecord
();
void
updateQinceStore
();
void
updateQinceStore
();
}
}
src/main/java/com/sfa/job/service/qince/IQinceEmpAndDeptService.java
0 → 100644
浏览文件 @
f5994bb5
package
com
.
sfa
.
job
.
service
.
qince
;
/**
* @author : liqiulin
* @date : 2025-12-29 17
* @describe :
*/
public
interface
IQinceEmpAndDeptService
{
void
syncQinceDealerInfo
();
}
src/main/java/com/sfa/job/service/qince/impl/QinceDealerQueryServiceImpl.java
浏览文件 @
f5994bb5
...
@@ -2,12 +2,9 @@ package com.sfa.job.service.qince.impl;
...
@@ -2,12 +2,9 @@ package com.sfa.job.service.qince.impl;
import
cn.hutool.core.date.DatePattern
;
import
cn.hutool.core.date.DatePattern
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.DateUtil
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.sfa.job.domain.feishu.dao.IQinceMarketEmployeeDao
;
import
com.sfa.job.domain.feishu.dao.IQinceMarketEmployeeDao
;
import
com.sfa.job.domain.qince.dao.IQinceClienteleStoreDao
;
import
com.sfa.job.domain.qince.dao.IQinceClienteleStoreDao
;
import
com.sfa.job.domain.system.dao.ISysDeptDao
;
import
com.sfa.job.domain.system.dao.ISysUserDao
;
import
com.sfa.job.pojo.feishu.response.QinceMarketEmployeeDto
;
import
com.sfa.job.pojo.feishu.response.QinceMarketEmployeeDto
;
import
com.sfa.job.pojo.qince.response.QinceClienteleStoreDto
;
import
com.sfa.job.pojo.qince.response.QinceClienteleStoreDto
;
import
com.sfa.job.service.qince.IQinceDealerQueryService
;
import
com.sfa.job.service.qince.IQinceDealerQueryService
;
...
@@ -34,10 +31,6 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
...
@@ -34,10 +31,6 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
@Autowired
@Autowired
private
IQinceMarketEmployeeDao
qinceMarketEmployeeDao
;
private
IQinceMarketEmployeeDao
qinceMarketEmployeeDao
;
@Autowired
@Autowired
private
ISysDeptDao
sysDeptDao
;
@Autowired
private
ISysUserDao
sysUserDao
;
@Autowired
private
QinCeUtils
qinCeUtils
;
private
QinCeUtils
qinCeUtils
;
@Override
@Override
...
@@ -50,18 +43,12 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
...
@@ -50,18 +43,12 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
log
.
info
(
"push qc 经销商(架构): 今日无新增/修改经销商"
);
log
.
info
(
"push qc 经销商(架构): 今日无新增/修改经销商"
);
return
;
return
;
}
}
// 查询部门Map<部门编码,部门名称>,人员Map<工号,姓名>
// Map<String,String> deptMap = sysDeptDao.getDeptCodeAndNameMap();
// Map<String,String> userMap = sysUserDao.getUserNoAndNameMap();
/**
/**
* 2. 反写勤策中的自定义字段:大区、战区
* 2. 反写勤策中的自定义字段:大区、战区
*/
*/
for
(
QinceMarketEmployeeDto
mDto
:
mDtos
)
{
for
(
QinceMarketEmployeeDto
mDto
:
mDtos
)
{
try
{
try
{
Map
<
String
,
Object
>
ext1
=
new
HashMap
<>();
Map
<
String
,
Object
>
ext1
=
new
HashMap
<>();
// String dqtq = "BM0020".equals(mDto.getDqDeptCode()) ? "北京特区" : deptMap.get(mDto.getDqDeptCode());
ext1
.
put
(
"dealer_ext_key"
,
"大区"
);
ext1
.
put
(
"dealer_ext_key"
,
"大区"
);
ext1
.
put
(
"dealer_ext_value"
,
mDto
.
getDqDeptName
());
ext1
.
put
(
"dealer_ext_value"
,
mDto
.
getDqDeptName
());
...
@@ -73,9 +60,6 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
...
@@ -73,9 +60,6 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
params
.
put
(
"dealer_id"
,
mDto
.
getDealerCode
());
params
.
put
(
"dealer_id"
,
mDto
.
getDealerCode
());
params
.
put
(
"exts"
,
Arrays
.
asList
(
ext1
,
ext2
));
params
.
put
(
"exts"
,
Arrays
.
asList
(
ext1
,
ext2
));
params
.
put
(
"dealer_emp_code"
,
mDto
.
getFEmpNo
());
params
.
put
(
"dealer_emp_code"
,
mDto
.
getFEmpNo
());
// params.put("dealer_manager", mDto.getFEmpName());
String
url
=
qinCeUtils
.
builderUrl
(
QinCeUtils
.
MODIFY_DEALER
,
params
);
String
url
=
qinCeUtils
.
builderUrl
(
QinCeUtils
.
MODIFY_DEALER
,
params
);
qinCeUtils
.
postQC
(
url
,
params
);
qinCeUtils
.
postQC
(
url
,
params
);
log
.
info
(
"push qc 经销商(架构)success:{}:{}"
,
mDto
.
getDealerName
(),
JSONObject
.
toJSONString
(
params
));
log
.
info
(
"push qc 经销商(架构)success:{}:{}"
,
mDto
.
getDealerName
(),
JSONObject
.
toJSONString
(
params
));
...
@@ -104,7 +88,7 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
...
@@ -104,7 +88,7 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
String
queryDate
=
DateUtil
.
yesterday
().
toString
(
DatePattern
.
NORM_DATE_PATTERN
);
String
queryDate
=
DateUtil
.
yesterday
().
toString
(
DatePattern
.
NORM_DATE_PATTERN
);
Map
<
String
,
Object
>
params
=
qinCeUtils
.
queryCusVisitRecordParams
(
queryDate
);
Map
<
String
,
Object
>
params
=
qinCeUtils
.
queryCusVisitRecordParams
(
queryDate
);
String
url
=
qinCeUtils
.
builderUrl
(
QinCeUtils
.
QUERY_CUS_VISIT_RECORD
,
params
);
String
url
=
qinCeUtils
.
builderUrl
(
QinCeUtils
.
QUERY_CUS_VISIT_RECORD
,
params
);
JSONArray
recordsJson
=
qinCeUtils
.
postArray
(
url
,
params
);
qinCeUtils
.
postArray
(
url
,
params
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"查询城市经理客户拜访失败:{}"
,
e
.
getMessage
());
log
.
error
(
"查询城市经理客户拜访失败:{}"
,
e
.
getMessage
());
}
}
...
@@ -126,9 +110,6 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
...
@@ -126,9 +110,6 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
List
<
QinceMarketEmployeeDto
>
mDtos
=
qinceMarketEmployeeDao
.
selectByDealerCodes
(
groupStores
.
keySet
());
List
<
QinceMarketEmployeeDto
>
mDtos
=
qinceMarketEmployeeDao
.
selectByDealerCodes
(
groupStores
.
keySet
());
Map
<
String
,
QinceMarketEmployeeDto
>
dealerMap
=
mDtos
.
stream
().
collect
(
Collectors
.
toMap
(
dto
->
dto
.
getDealerCode
(),
dto
->
dto
));
Map
<
String
,
QinceMarketEmployeeDto
>
dealerMap
=
mDtos
.
stream
().
collect
(
Collectors
.
toMap
(
dto
->
dto
.
getDealerCode
(),
dto
->
dto
));
// Map<String,String> deptMap = sysDeptDao.getDeptCodeAndNameMap();
// Map<String,String> userMap = sysUserDao.getUserNoAndNameMap();
for
(
Map
.
Entry
<
String
,
List
<
QinceClienteleStoreDto
>>
storesEntry
:
groupStores
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
List
<
QinceClienteleStoreDto
>>
storesEntry
:
groupStores
.
entrySet
())
{
QinceMarketEmployeeDto
mDto
=
dealerMap
.
get
(
storesEntry
.
getKey
());
QinceMarketEmployeeDto
mDto
=
dealerMap
.
get
(
storesEntry
.
getKey
());
if
(
mDto
==
null
){
if
(
mDto
==
null
){
...
@@ -136,7 +117,6 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
...
@@ -136,7 +117,6 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
continue
;
continue
;
}
}
List
<
QinceClienteleStoreDto
>
stores
=
storesEntry
.
getValue
();
List
<
QinceClienteleStoreDto
>
stores
=
storesEntry
.
getValue
();
// String dqtq = "BM0020".equals(mDto.getDqDeptCode()) ? "北京特区" : deptMap.get(mDto.getDqDeptCode());
pushQinceStoreInfo
(
stores
,
mDto
);
pushQinceStoreInfo
(
stores
,
mDto
);
log
.
info
(
"push qc 终端(架构/负责人)success:{}:{}"
,
mDto
.
getDealerName
(),
stores
.
size
());
log
.
info
(
"push qc 终端(架构/负责人)success:{}:{}"
,
mDto
.
getDealerName
(),
stores
.
size
());
}
}
...
...
src/main/java/com/sfa/job/service/qince/impl/QinceEmpAndDeptServiceImpl.java
0 → 100644
浏览文件 @
f5994bb5
package
com
.
sfa
.
job
.
service
.
qince
.
impl
;
import
cn.hutool.http.HttpUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.sfa.common.core.utils.StringUtils
;
import
com.sfa.common.core.utils.sdk.FeiShuUtils
;
import
com.sfa.job.domain.qince.dao.IQinceEmployeeDao
;
import
com.sfa.job.domain.system.dao.ISysUserDao
;
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.apache.groovy.util.Maps
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* @author : liqiulin
* @date : 2025-12-29 17
* @describe :
*/
@Slf4j
@Service
public
class
QinceEmpAndDeptServiceImpl
implements
IQinceEmpAndDeptService
{
@Autowired
private
QinCeUtils
qinCeUtils
;
@Autowired
private
ISysUserDao
sysUserDao
;
@Autowired
private
IQinceEmployeeDao
qinceEmployeeDao
;
@Override
public
void
syncQinceDealerInfo
()
{
// 查询飞书的上下级关系(仅区域销售部)
Map
<
String
,
String
>
empCodeAndLeader
=
sysUserDao
.
selectListEmpAndLeader
();
log
.
info
(
"飞书区域销售部共【{}】人"
,
empCodeAndLeader
.
size
());
List
<
QinceEmployeeDto
>
qinceEmployeeDtos
=
qinceEmployeeDao
.
selectListByEmpcodes
(
empCodeAndLeader
.
keySet
());
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
());
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
);
}
FeiShuUtils
.
pustRoot
(
"https://open.feishu.cn/open-apis/bot/v2/hook/9793c485-d2a0-49bc-961e-578deb3b1912"
,
logtext
);
}
}
}
src/main/java/com/sfa/job/service/system/DeptAndUserServiceImpl.java
浏览文件 @
f5994bb5
...
@@ -70,8 +70,8 @@ public class DeptAndUserServiceImpl implements IDeptAndUserService {
...
@@ -70,8 +70,8 @@ public class DeptAndUserServiceImpl implements IDeptAndUserService {
}
}
insertOrUpdateUsers
(
users
,
dept
.
getDeptId
());
insertOrUpdateUsers
(
users
,
dept
.
getDeptId
());
}
}
sysUserDao
.
updateDeptLeader
();
sysUserDao
.
updateDeptLeader
();
sysUserDao
.
updateUserLeader
();
}
}
@Override
@Override
...
...
src/main/java/com/sfa/job/util/QinCeUtils.java
浏览文件 @
f5994bb5
...
@@ -98,6 +98,13 @@ public class QinCeUtils {
...
@@ -98,6 +98,13 @@ public class QinCeUtils {
return
params
;
return
params
;
}
}
public
Map
<
String
,
Object
>
putUserLeaderParams
(
String
qcId
,
String
leaderQcId
){
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"id"
,
qcId
);
params
.
put
(
"waiqin365_parent_id"
,
leaderQcId
);
return
params
;
}
public
JSONObject
postQC
(
String
url
,
Object
params
)
throws
Exception
{
public
JSONObject
postQC
(
String
url
,
Object
params
)
throws
Exception
{
String
requestBody
=
HttpUtil
.
createPost
(
url
).
contentType
(
"application/json;charset=utf-8"
).
header
(
""
,
""
).
body
(
JSONObject
.
toJSONString
(
params
)).
execute
().
body
();
String
requestBody
=
HttpUtil
.
createPost
(
url
).
contentType
(
"application/json;charset=utf-8"
).
header
(
""
,
""
).
body
(
JSONObject
.
toJSONString
(
params
)).
execute
().
body
();
...
...
src/main/java/com/sfa/job/xxljob/qince/QinceCoreTask.java
浏览文件 @
f5994bb5
package
com
.
sfa
.
job
.
xxljob
.
qince
;
package
com
.
sfa
.
job
.
xxljob
.
qince
;
import
com.sfa.job.service.qince.IQinceDealerQueryService
;
import
com.sfa.job.service.qince.IQinceDealerQueryService
;
import
com.sfa.job.service.qince.IQinceEmpAndDeptService
;
import
com.xxl.job.core.handler.annotation.XxlJob
;
import
com.xxl.job.core.handler.annotation.XxlJob
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -15,7 +16,9 @@ import org.springframework.stereotype.Component;
...
@@ -15,7 +16,9 @@ import org.springframework.stereotype.Component;
@Slf4j
@Slf4j
public
class
QinceCoreTask
{
public
class
QinceCoreTask
{
@Autowired
@Autowired
private
IQinceDealerQueryService
qinceCoreService
;
private
IQinceDealerQueryService
qinceDealerQueryService
;
@Autowired
private
IQinceEmpAndDeptService
qinceEmpAndDeptService
;
/**
/**
* 回写勤策-经销商大区、战区信息
* 回写勤策-经销商大区、战区信息
...
@@ -24,7 +27,7 @@ public class QinceCoreTask {
...
@@ -24,7 +27,7 @@ public class QinceCoreTask {
@XxlJob
(
"qince_modify_dealer"
)
@XxlJob
(
"qince_modify_dealer"
)
public
void
qinceCoreTask
()
{
public
void
qinceCoreTask
()
{
log
.
info
(
"回写勤策-经销商大区、战区信息 start"
);
log
.
info
(
"回写勤策-经销商大区、战区信息 start"
);
qince
Core
Service
.
updateQinceDealerInfo
();
qince
DealerQuery
Service
.
updateQinceDealerInfo
();
log
.
info
(
"回写勤策-经销商大区、战区信息 end"
);
log
.
info
(
"回写勤策-经销商大区、战区信息 end"
);
}
}
...
@@ -34,17 +37,29 @@ public class QinceCoreTask {
...
@@ -34,17 +37,29 @@ public class QinceCoreTask {
@XxlJob
(
"qince_modify_store"
)
@XxlJob
(
"qince_modify_store"
)
public
void
qinceCoreStore
(){
public
void
qinceCoreStore
(){
log
.
info
(
"回写勤策-终端详情 start"
);
log
.
info
(
"回写勤策-终端详情 start"
);
qince
Core
Service
.
updateQinceStore
();
qince
DealerQuery
Service
.
updateQinceStore
();
log
.
info
(
"回写勤策-终端详情 end"
);
log
.
info
(
"回写勤策-终端详情 end"
);
}
}
/**
* 同步完飞书组织架构(sync_feishu_user)
* 同步勤策t-1人员信息(qince_employee_task)
* 根据飞书上下级关系,同步勤策上下级信息
*/
@XxlJob
(
"qince_modify_emp_leader"
)
public
void
syncQinceDealerInfo
()
{
log
.
info
(
"同步勤策员工上下级关系 start"
);
qinceEmpAndDeptService
.
syncQinceDealerInfo
();
log
.
info
(
"同步勤策员工上下级关系 end"
);
}
/**
/**
* 暂停开发
* 暂停开发
*/
*/
// @XxlJob("qince_cus_visit_record")
// @XxlJob("qince_cus_visit_record")
public
void
queryCusVisitRecord
()
{
public
void
queryCusVisitRecord
()
{
log
.
info
(
"查询勤策客户拜访记录 start"
);
log
.
info
(
"查询勤策客户拜访记录 start"
);
qince
Core
Service
.
queryCusVisitRecord
();
qince
DealerQuery
Service
.
queryCusVisitRecord
();
log
.
info
(
"查询勤策客户拜访记录 start"
);
log
.
info
(
"查询勤策客户拜访记录 start"
);
}
}
}
}
src/main/resources/mapper/master/SysUserMapper.xml
浏览文件 @
f5994bb5
...
@@ -119,7 +119,22 @@
...
@@ -119,7 +119,22 @@
work_city_name = #{workCityName},
work_city_name = #{workCityName},
update_by = #{updateBy},
update_by = #{updateBy},
fs_open_id = #{fsOpenId},
fs_open_id = #{fsOpenId},
leader_fs_open_id = #{leaderFsOpenId},
update_user_id = #{updateUserId}
update_user_id = #{updateUserId}
where user_id = #{userId}
where user_id = #{userId}
</update>
</update>
<update
id=
"updateUserLeader"
>
update sys_user su1 inner join sys_user su2 on su1.leader_fs_open_id = su2.fs_open_id
set su1.leader_emp_code = su2.user_name,su1.leader_emp_name = su2.nick_name
where su1.del_flag = 0;
</update>
<select
id=
"selectListEmpAndLeader"
resultType=
"java.util.HashMap"
>
select user_name,leader_emp_code
from sys_user
where del_flag = '0'
and leader_emp_code is not null
and dept_id in (select dept_id from sys_dept where del_flag = '0' and ancestors like '1,2731,2732%')
</select>
</mapper>
</mapper>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论