|
|
@@ -0,0 +1,159 @@
|
|
|
+package com.mokamrp.privates.tast.Datahub;
|
|
|
+
|
|
|
+import com.aliyun.datahub.client.DatahubClient;
|
|
|
+import com.aliyun.datahub.client.exception.DatahubClientException;
|
|
|
+import com.aliyun.datahub.client.model.PutRecordsResult;
|
|
|
+import com.aliyun.datahub.client.model.RecordEntry;
|
|
|
+import com.aliyun.datahub.client.model.RecordSchema;
|
|
|
+import com.aliyun.datahub.client.model.TupleRecordData;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.mokamrp.privates.entity.JobContactEmployee;
|
|
|
+import com.mokamrp.privates.mapper.pojo.CorpData;
|
|
|
+import com.mokamrp.privates.mapper.vo.WorkContactEmployeeHubVo;
|
|
|
+import com.mokamrp.privates.service.CorpDataService;
|
|
|
+import com.mokamrp.privates.service.WorkContactEmployeeService;
|
|
|
+import com.mokamrp.privates.utils.RedisUtil;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+@Component
|
|
|
+public class DatahubCorpData {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CorpDataService corpDataService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private RedisUtil redisUtil;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private DatahubClient datahubClient;
|
|
|
+
|
|
|
+ @Value("${datahub.corpTopic}")
|
|
|
+ private String topic;
|
|
|
+
|
|
|
+ @Value("${datahub.project}")
|
|
|
+ private String project;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导出任务,单进程
|
|
|
+ */
|
|
|
+ @Scheduled(fixedDelay = 300000)
|
|
|
+ public void execute() {
|
|
|
+ System.out.println("执行概览数据推送datahub任务,当前时间"+new Date());
|
|
|
+ job(project,topic,3);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void job(String project,String topic,int retryTimes){
|
|
|
+ List<CorpData> list;
|
|
|
+
|
|
|
+ Map<String, Object> checkMap = new HashMap<>();
|
|
|
+ QueryWrapper<CorpData> q = new QueryWrapper<>();
|
|
|
+ q.ge("currentdateymd",getPastDate(7));
|
|
|
+ list = corpDataService.list(q);
|
|
|
+ if(list == null || list.size() <=0){
|
|
|
+ System.out.println("执行完毕CorpId"+1);
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+
|
|
|
+ tupleExample(project,topic,retryTimes,list);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static String getPastDate(int past) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
|
|
|
+ Date today = calendar.getTime();
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ String result = format.format(today);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ // 写入Tuple型数据
|
|
|
+ public void tupleExample(String project,String topic,int retryTimes, List<CorpData> list) {
|
|
|
+ Date date = new Date();
|
|
|
+ String timestamp = String.valueOf((new Date()).getTime()/1000);
|
|
|
+
|
|
|
+ System.out.println(timestamp);
|
|
|
+ Integer time = Integer.valueOf(timestamp);
|
|
|
+
|
|
|
+ String strDateFormat = "yyyyMMdd";
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
|
|
|
+ String resDate = sdf.format(new Date());
|
|
|
+ // 获取schema
|
|
|
+ RecordSchema recordSchema = datahubClient.getTopic(project,topic ).getRecordSchema();
|
|
|
+
|
|
|
+ // 推送数据,生成十条数据
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ List<RecordEntry> recordEntries = new ArrayList<>();
|
|
|
+ for (CorpData vo:list
|
|
|
+ ) {
|
|
|
+
|
|
|
+ RecordEntry recordEntry = new RecordEntry();
|
|
|
+ // 对每条数据设置额外属性,例如ip 机器名等。可以不设置额外属性,不影响数据写入
|
|
|
+ //recordEntry.addAttribute("key1", "value1");
|
|
|
+ TupleRecordData data = new TupleRecordData(recordSchema);
|
|
|
+ data.setField("primary_key", vo.getPrimaryKey());
|
|
|
+ data.setField("current_date", format.format(vo.getCurrentdateymd()));
|
|
|
+ data.setField("corp_wx_id", vo.getCorpWxId());
|
|
|
+ data.setField("name", vo.getName());
|
|
|
+ data.setField("increase_user_count", vo.getIncreaseUserCount());
|
|
|
+ data.setField("decrease_user_count", vo.getDecreaseUserCount());
|
|
|
+ data.setField("total_user_count", vo.getTotalUserCount());
|
|
|
+ data.setField("group_decrease_user_count", vo.getGroupDecreaseUserCount());
|
|
|
+ data.setField("group_increase_user_count", vo.getGroupIncreaseUserCount());
|
|
|
+ data.setField("group_total_group_count", vo.getGroupTotalGroupCount());
|
|
|
+ data.setField("group_total_user_count", vo.getGroupTotalUserCount());
|
|
|
+ data.setField("updatetime", time);
|
|
|
+ data.setField("report_time", time);
|
|
|
+ data.setField("ds", resDate);
|
|
|
+ recordEntry.setRecordData(data);
|
|
|
+ recordEntries.add(recordEntry);
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ PutRecordsResult result = datahubClient.putRecords(project, topic, recordEntries);
|
|
|
+ int i = result.getFailedRecordCount();
|
|
|
+ System.out.println("失败了"+i+"次");
|
|
|
+ if (i > 0) {
|
|
|
+ retry(datahubClient, result.getFailedRecords(), retryTimes, project, topic);
|
|
|
+ }
|
|
|
+ } catch (DatahubClientException e) {
|
|
|
+ System.out.println("requestId:" + e.getRequestId() + "\tmessage:" + e.getErrorMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+
|
|
|
+ //重试机制
|
|
|
+ public static void retry(DatahubClient client, List<RecordEntry> records, int retryTimes, String project, String topic) {
|
|
|
+ boolean suc = false;
|
|
|
+ while (retryTimes != 0) {
|
|
|
+ retryTimes = retryTimes - 1;
|
|
|
+ PutRecordsResult recordsResult = client.putRecords(project, topic, records);
|
|
|
+ if (recordsResult.getFailedRecordCount() > 0) {
|
|
|
+ retry(client,recordsResult.getFailedRecords(),retryTimes,project,topic);
|
|
|
+ }
|
|
|
+ suc = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (!suc) {
|
|
|
+ System.out.println("retryFailure");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Integer date2TimeStamp(String date_str,String format){
|
|
|
+ try {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat(format);
|
|
|
+ return Integer.valueOf(String.valueOf(sdf.parse(date_str).getTime()/1000));
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|