SpringBoot 定时任务实现数据同步方法,springmvc实战项目

import java.util.List;

import java.util.Map;

import java.util.Objects;

import java.util.stream.Collectors;

/**

  • 中台设备数据 定时任务执行

  • @author Tarzan Liu

  • @version 1.0.0

  • @description

  • @date 2020/12/07

*/

@Component

@Slf4j

public class EntityPointTask {

@Autowired

private EntityPointService entityPointService;

@Value(“${middleGround.server.host}”)

private String host;

@Value(“${middleGround.server.port}”)

private String port;

private static FilesMinioController filesMinioController = SpringContextUtil.getBean(FilesMinioController.class);

/**

  • 设备定义点数据拉取

  • @author tarzan Liu

  • @date 2020/12/2

*/

@Scheduled(cron = “0/30 * * * * ?”) // 30秒校验一次

public void pullDataTaskByCorn() {

String result = HttpProxyUtil.sendGet(“http://” + host + “:” + port + “/interface/system/list”);

JSONObject jsonObject = JSON.parseObject(result);

if (Objects.nonNull(jsonObject)) {

JSONArray array = jsonObject.getJSONArray(“data”);

if (array != null && array.size() != 0) {

for (int i = 0; i < array.size(); i++) {

JSONObject obj = array.getJSONObject(i);

String systemId = obj.getString(“id”);

pullDataNew(systemId);

}

}

}

}

@Transactional(rollbackFor = Throwable.class)

public ResponseDTO pullData(String code) {

List list = Lists.newArrayList();

String result = HttpProxyUtil.sendGet(“http://” + host + “:” + port + “/interface/defintionView/listBySystemId/” + code);

JSONObject jsonObject = JSON.parseObject(result);

if (Objects.nonNull(jsonObject)) {

JSONArray array = jsonObject.getJSONArray(“data”);

if (array != null && array.size() != 0) {

for (int i = 0; i < array.size(); i++) {

JSONObject obj = array.getJSONObject(i);

String pointId = obj.getString(“pointId”);

String name = obj.getString(“name”);

list.add(EntityPointEntity.builder().pointId(pointId).name(name).code(code).build());

}

List existList = entityPointService.list(new LambdaQueryWrapper().eq(EntityPointEntity::getCode, code).isNotNull(EntityPointEntity::getValue));

if (CollectionUtils.isNotEmpty(existList)) {

Map<String, String> existMap = existList.stream().collect(Collectors.toMap(EntityPointEntity::getPointId, EntityPointEntity::getValue));

list.forEach(e -> {

String value = existMap.get(e.getPointId());

if (value != null) {

e.setValue(value);

}

});

}

entityPointService.remove(new LambdaQueryWrapper().eq(EntityPointEntity::getCode, code));

entityPointService.saveBatch(list);

}

}

return ResponseDTO.succ();

}

@Transactional(rollbackFor = Throwable.class)

public ResponseDTO pullDataNew(String code) {

String result = HttpProxyUtil.sendGet(“http://” + host + “:” + port + “/interface/defintionView/listBySystemId/” + code);

JSONObject jsonObject = JSON.parseObject(result);

if (Objects.nonNull(jsonObject)) {

JSONArray data = jsonObject.getJSONArray(“data”);

List list = data.toJavaList(EntityPointEntity.class);

if (CollectionUtils.isNotEmpty(list)) {

list.forEach(e -> e.setCode(code));

List existList = entityPointService.list(new LambdaQueryWrapper().eq(EntityPointEntity::getCode, code));

if (CollectionUtils.isNotEmpty(existList)) {

//存在map

Map<String, String> existMap = existList.stream().collect(Collectors.toMap(EntityPointEntity::getPointId, EntityPointEntity::getName));

//传输map

Map<String, String> dataMap = list.stream().collect(Collectors.toMap(EntityPointEntity::getPointId, EntityPointEntity::getName));

//增量

List increment = list.stream().filter(e -> existMap.get(e.getPointId()) == null).collect(Collectors.toList());

if (CollectionUtils.isNotEmpty(increment)) {

entityPointService.saveBatch(increment);

}

//减量

List decrement = existList.stream().filter(e -> dataMap.get(e.getPointId()) == null).collect(Collectors.toList());

if (CollectionUtils.isNotEmpty(decrement)) {

entityPointService.removeByIds(decrement.stream().map(EntityPointEntity::getId).collect(Collectors.toList()));

}

//变量

List variable = existList.stream().filter(e -> dataMap.get(e.getPointId()) != null && !dataMap.get(e.getPointId()).equals(e.getName())).collect(Collectors.toList());

if (CollectionUtils.isNotEmpty(variable)) {

variable.forEach(e -> {

e.setName(dataMap.get(e.getPointId()));

});

entityPointService.updateBatchById(variable);

}

} else {

entityPointService.saveBatch(list);

}

}

}

return ResponseDTO.succ();

}

}

数据库对应实体类

========

import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableId;

import com.baomidou.mybatisplus.annotation.TableName;

import lombok.AllArgsConstructor;

import lombok.Builder;

import lombok.Data;

import lombok.NoArgsConstructor;

import java.io.Serializable;

import java.util.Date;

@Builder

@NoArgsConstructor

@AllArgsConstructor

@Data

@TableName(value = “t_entity_point”)

public class EntityPointEntity implements Serializable {

private static final long serialVersionUID = 2181036545424452651L;

/**

  • 定义点id

*/

@TableId(value = “id”, type = IdType.ASSIGN_ID)

private Long id;

/**

  • 定义点id

*/

private String pointId;

/**

  • 名称

*/

private String name;

/**

  • 绘制数据

*/

private String value;

/**

  • 编码

*/

private String code;

/**

  • 创建时间

*/

private Date createTime;

}

HTTP请求代理工具类

===========

import lombok.extern.slf4j.Slf4j;

import org.apache.http.Consts;

import org.apache.http.HttpEntity;

import org.apache.http.HttpStatus;

import org.apache.http.NameValuePair;

import org.apache.http.client.config.RequestConfig;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.conn.ssl.SSLConnectionSocketFactory;

import org.apache.http.conn.ssl.TrustStrategy;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.message.BasicNameValuePair;

import org.apache.http.ssl.SSLContextBuilder;

import org.apache.http.util.EntityUtils;

import javax.net.ssl.SSLContext;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.URL;

import java.net.URLConnection;

import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

总结

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。


经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

蚂蚁金服5面,总结了49个面试题,遇到的面试官都是P7级别以上

2912247)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-hFCixttB-1711082912248)]

总结

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。


经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

[外链图片转存中…(img-ME4HAemL-1711082912249)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值