Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
A
Aidea
Project
Project
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sa_aidea
Aidea
Commits
bba6ff3c
Commit
bba6ff3c
authored
Mar 10, 2021
by
谢希宇
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Submit by Strive
Submit Date 2021/03/10
parent
1fde2cd7
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
137 additions
and
0 deletions
+137
-0
SynWechatMsgUserJob.java
...in/java/com/cftech/msgrecord/job/SynWechatMsgUserJob.java
+137
-0
No files found.
aidea-modules/msgrecord-module/src/main/java/com/cftech/msgrecord/job/SynWechatMsgUserJob.java
0 → 100644
View file @
bba6ff3c
package
com
.
cftech
.
msgrecord
.
job
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.cftech.accounts.model.SysJob
;
import
com.cftech.accounts.service.JobService
;
import
com.cftech.core.sql.Conds
;
import
com.cftech.core.util.*
;
import
com.cftech.msgrecord.model.ExternalContactDto
;
import
com.cftech.msgrecord.model.Msgrecord
;
import
com.cftech.msgrecord.service.MsgrecordService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.quartz.Job
;
import
org.quartz.JobDataMap
;
import
org.quartz.JobExecutionContext
;
import
org.quartz.JobExecutionException
;
import
java.io.IOException
;
import
java.text.SimpleDateFormat
;
import
java.util.List
;
import
java.util.Map
;
/**
* 同步企业微信外部联系人
*/
@Slf4j
public
class
SynWechatMsgUserJob
implements
Job
{
private
final
static
String
[]
EXTERNAL_PREFIX
=
{
"wo"
,
"wm"
};
//外部联系人 userid前缀
private
final
static
String
ROBOT_PREFIX
=
"wb"
;
//外部联系人 客服机器人前缀
private
final
static
Long
ACCOUNT_ID
=
Long
.
parseLong
(
SystemConfig
.
p
.
getProperty
(
"QY_SEND_APPID"
));
private
final
static
String
EXTERNAL_CONTACT_URL
=
"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token=${ACCESS_TOKEN}&external_userid=${EXTERNAL_USERID}"
;
@Override
public
void
execute
(
JobExecutionContext
context
)
throws
JobExecutionException
{
JobService
jobService
=
SpringContextHolder
.
getBean
(
JobService
.
class
);
boolean
isCluster
=
Boolean
.
valueOf
(
SystemConfig
.
p
.
getProperty
(
"quartz.isCluster"
));
if
(!
isCluster
)
{
return
;
}
executeSynExternalInfo
();
//获得明细数据
JobDataMap
jobInfo
=
context
.
getJobDetail
().
getJobDataMap
();
String
id
=
jobInfo
.
get
(
"uid"
)
==
null
?
""
:
jobInfo
.
getString
(
"uid"
);
//这个也是ID主键
log
.
info
(
"任务ID:"
+
id
);
//执行更新操作
if
(
context
.
getNextFireTime
()
!=
null
)
{
log
.
info
(
"同步微信聊天外部联系人数据任务:下次执行时间====="
+
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
context
.
getNextFireTime
())
+
"=============="
);
}
else
{
SysJob
sysJob
=
new
SysJob
();
sysJob
.
setJobuid
(
id
);
sysJob
.
setStatus
(
"0"
);
jobService
.
updateStatus
(
sysJob
);
log
.
info
(
"同步微信聊天数据任务,已执行完成!"
);
}
}
private
void
executeSynExternalInfo
()
{
QyTokenUtil
qyTokenUtil
=
SpringContextHolder
.
getBean
(
QyTokenUtil
.
class
);
MsgrecordService
msgrecordService
=
SpringContextHolder
.
getBean
(
MsgrecordService
.
class
);
String
token
=
qyTokenUtil
.
getToken
(
ACCOUNT_ID
);
//获取已存在的记录
List
<
ExternalContactDto
>
existUsers
=
msgrecordService
.
findUserExistsRecord
();
//获取缺少发送人和推送的记录填充
Conds
msgConds
=
new
Conds
();
msgConds
.
equal
(
"t.del_flag"
,
Constants
.
DEL_FLAG_0
);
List
<
Msgrecord
>
list
=
msgrecordService
.
fetchSearchByMsgRecordList
(
msgConds
);
for
(
Msgrecord
msg
:
list
)
{
boolean
flag_from
=
false
;
boolean
flag_list
=
false
;
if
(
StringUtils
.
isBlank
(
msg
.
getTofromName
()))
{
for
(
ExternalContactDto
dto
:
existUsers
)
{
if
(
StringUtils
.
equals
(
dto
.
getUserid
(),
msg
.
getTofrom
()))
{
JSONObject
obj
=
JSONObject
.
parseObject
(
dto
.
getResult
());
msg
.
setTofromName
(
obj
.
getJSONObject
(
"external_contact"
).
getString
(
"name"
));
msg
.
setDescription
(
dto
.
getResult
());
msgrecordService
.
update
(
msg
);
flag_from
=
true
;
}
}
if
(!
flag_from
)
{
JSONObject
obj
=
sendHttpInfo
(
token
,
msg
.
getTofrom
());
if
(
obj
!=
null
)
{
msg
.
setTofromName
(
obj
.
getJSONObject
(
"external_contact"
).
getString
(
"name"
));
msg
.
setDescription
(
obj
.
toString
());
msgrecordService
.
update
(
msg
);
}
}
}
if
(
StringUtils
.
isBlank
(
msg
.
getTolistName
()))
{
for
(
ExternalContactDto
dto
:
existUsers
)
{
if
(
msg
.
getTolist
().
contains
(
dto
.
getUserid
()))
{
JSONObject
obj
=
JSONObject
.
parseObject
(
dto
.
getResult
());
msg
.
setTolistName
(
obj
.
getJSONObject
(
"external_contact"
).
getString
(
"name"
));
msg
.
setDescription
(
dto
.
getResult
());
msgrecordService
.
update
(
msg
);
flag_list
=
true
;
}
}
if
(!
flag_list
)
{
JSONObject
obj
=
sendHttpInfo
(
token
,
msg
.
getTolist
().
substring
(
2
,
msg
.
getTolist
().
length
()-
2
));
if
(
obj
!=
null
)
{
msg
.
setTolistName
(
obj
.
getJSONObject
(
"external_contact"
).
getString
(
"name"
));
msg
.
setDescription
(
obj
.
toString
());
msgrecordService
.
update
(
msg
);
}
}
}
}
}
private
JSONObject
sendHttpInfo
(
String
token
,
String
externalUserid
)
{
String
url
=
EXTERNAL_CONTACT_URL
.
replace
(
"${ACCESS_TOKEN}"
,
token
).
replace
(
"${EXTERNAL_USERID}"
,
externalUserid
);
String
retStr
=
null
;
try
{
retStr
=
OKHttpUtils
.
getJSON
(
url
);
JSONObject
retObj
=
JSON
.
parseObject
(
retStr
);
if
(
retObj
!=
null
&&
retObj
.
getInteger
(
"errcode"
)
==
0
)
{
return
retObj
;
}
else
{
return
retObj
;
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
}
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