Commit bba6ff3c authored by 谢希宇's avatar 谢希宇

Submit by Strive

Submit Date 2021/03/10
parent 1fde2cd7
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;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment