首页 > 其他分享 >异步新增修改记录

异步新增修改记录

时间:2023-12-08 14:46:02浏览次数:23  
标签:info 异步 String 记录 Column private 修改 data name

1.Controller:

@GetMapping("/abc")
public Result getABC() {
User u = getUser();
Station station = getStation(u);
String sip = station.getLvIp();
String stationName = station.getStationName();
String stationCode = station.getStationTelecode();
String methodName = "/fangfaming";

// JSONArray jsonArray = requestBureauService(methodName, sip);
JSONArray jsonArray = requestService(methodName, stationName);

List<Info> list = new ArrayList<>();
Map<String, Info> comeMap = new HashMap<>();
Date date = new Date();
for (int i = 0; i < jsonArray.size(); i++) {
Info info = new Info();
JSONObject object = jsonArray.getJSONObject(i);
UUID uuid = UUID.randomUUID();
broadCast.setId(uuid.toString().replace("-", ""));
info.setAreaId(object.getString("area_id"));
info.setAreaNo(object.getString("area_no"));
info.setAreaName(object.getString("area_name"));
info.setAreaVolume(object.getString("area_volume"));
info.setDefaultVolume(object.getString("default_volume"));
info.setForeSigSrcId(object.getString("fore_sig_src_id"));
info.setRelaTreeId(object.getString("rela_tree_id"));
info.setParentId(object.getString("parent_id"));
info.setAreaState(object.getString("area_state"));
info.setStationName(object.getString("station_name"));
info.setStationCode(stationCode);
info.setCreateTime(date);
info.setUpdateTime(date);
list.add(info);
comeMap.put(broadCast.getAreaId(), info);
}
if (list.size() > 0) {
//DB数据
List<Info> dbAll = broadCastInfoDao.findAllByStationName(stationName);

//更新或新增
InfoService.updateOrSave(comeMap, dbAll, stationName);
}
return Result.ok();
}

private JSONArray requestService(String methodName, String stationName) {
JSONArray result = null;
String response = "";
try {
String lvIp = getStation().getLvIp();

Map<String, Object> param = new HashMap<>();
param.put("methodName", "getPaBasInfo");
param.put("companyName", "ks");
param.put("userName", "kerry");
param.put("passWord", "123456");
param.put("userType", "Request");
// param.put("stationName", stationName);
param.put("stationName", "stationName");

if (enableBureauService) {
response = restUtil.httpPost(url + methodName, JSON.toJSONString(param));
} else {
response = restUtil.httpPost(lvIp + methodName, JSON.toJSONString(param));
}

//解析响应的数据
JSONObject jsonObject = JSONObject.parseObject(response);
// JSONArray data = jsonObject.getJSONArray("data");

//如启动中转服务则多包装一层data
if (enableBureauService) {
JSONObject data1 = jsonObject.getJSONObject("data");
result = data1.getJSONArray("data");
} else {
result = jsonObject.getJSONArray("data");
}

// //解析响应的数据
// JSONObject jsonObject = JSONObject.parseObject(response);
// JSONObject data = jsonObject.getJSONObject("data");
//
// //如启动中转服务则多包装一层data
// if (enableBureauService) {
// JSONObject data1 = data.getJSONObject("data");
// result = data1.getJSONArray("data");
// } else {
// result = data.getJSONArray("data");
// }

} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
public String httpPost(String url, String sendMsg) throws Exception {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
// 设置全局rest超时时长
requestFactory.setConnectTimeout(retryTime);
requestFactory.setReadTimeout(retryTime);
RestTemplate restTemplate = new RestTemplate(requestFactory);
// 设置请求头
restTemplate.getMessageConverters()
.add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> requestEntity = new HttpEntity<>(sendMsg, requestHeaders);
log.info("调用接口地址为:【{}】,入参为:【{}】", url, sendMsg);
String httpPost = null;
try {
httpPost = restTemplate.postForObject(url, requestEntity, String.class);
} catch (RestClientException e) {
log.error("调用接口:{} 失败",url);
}
log.info("调用接口原始响应数据为:【{}】", httpPost);
return httpPost;
}

2.Service:

void updateOrSave(Map<String, Info> comeMap, List<Info> dbAll, String stationName);

3.ServiceImpl:

@Service
public class InfoServiceImpl implements InfoService {

@Autowired
private ABCDao InfoDao;

@Override
public void updateOrSave(Map<String, Info> comeMap, List<Info> dbAll, String stationName) {

Set<String> dbAreaIds = dbAll.stream().map(Info::getAreaId).collect(Collectors.toSet());

CompletableFuture<Void> updateFuture = CompletableFuture.runAsync(() -> {
//1. 更新操作
//查出获取的需要更新到数据库的数据
List<Info> updateList = comeMap.keySet().stream()
.filter(dbAreaIds::contains)
.map(comeMap::get).collect(Collectors.toList());

updateList.forEach(broadCastInfo -> {
//数据库中的待更新对象
Info dbBroadCast = InfoDao.findByAreaIdAndStationName(Info.getAreaId(), Info.getStationName());

//使用获取的更新对象的非空值去覆盖被更新的对象
StringUtils.copyPropertiesIgnoreNull(broadCastInfo, dbBroadCast, "id", "createTime");

//更新
InfoDao.save(dbBroadCast);
});
});

CompletableFuture<Void> saveFuture = CompletableFuture.runAsync(() -> {
//2. 新增操作
//查出获取的需要新增到数据库的数据
List<Info> saveList = comeMap.keySet().stream()
.filter(areaId -> !dbAreaIds.contains(areaId))
.map(comeMap::get).collect(Collectors.toList());

//保存
InfoDao.saveAll(saveList);
});

//等待异步执行完成
CompletableFuture.allOf(updateFuture, saveFuture).join();
}
}

 

4.Dao:

public interface InfoDao extends BaseDao<BroadCastInfo, String> {

List<Info> findAllByStationName(String stationName);
Info findByAreaIdAndStationName(String areaId, String stationName);
}

 

5.Entity:

@Data
@Entity
@Table(name = "broad_cast_info")
public class Info implements Serializable {

private static final long serialVersionUID = 1L;

/**
* 主键id
*/
@Id
@Column(length = 50,name = "s_id")
private String id;

/**
* id
*/
@Column(name = "area_id")
private String areaId;

@Column(name = "area_no")
private String areaNo;

@Column(name = "area_name")
private String areaName;

@Column(name = "area_volume")
private String areaVolume;

@Column(name = "default_volume")
private String defaultVolume;

@Column(name = "fore_sig_src_id")
private String foreSigSrcId;

@Column(name = "rela_tree_id")
private String relaTreeId;

@Column(name = "parent_id")
private String parentId;

@Column(name = "area_state")
private String areaState;

@Column(name = "station_name")
private String stationName;

@Column(name = "station_code")
private String stationCode;

@Column(name = "create_time")
private Date createTime;

@Column(name = "update_time")
private Date updateTime;
}

 

标签:info,异步,String,记录,Column,private,修改,data,name
From: https://www.cnblogs.com/sensenh/p/17887120.html

相关文章

  • 公司敏感数据被上传Github,吓得我赶紧改提交记录
    大家好,我是小富~说个事吧!最近公司发生了一个事故,有同事不小心把敏感数据上传到了GitHub上,结果被安全部门扫描出来了。这件事导致公司对所有员工进行了一次数据安全的培训。对于这个事我相信,有点工作经验的人都不会故意去上传这些敏感文件,多数应该是误操作导致的。这个事件也给了......
  • SOLIDWORKS参数化设计之修改新零件颜色
    SOLIDWORKS参数化设计完成之后,可能会涉及到很对零件的修改,有时我们想很直观的看到哪些零件是发生变化了的,那通过颜色的区分就很容易观察。为了适应这部分工程师的需求,SolidKits.AutoWorks软件中增加了修改新零件颜色的功能,软件能够自动识别修改的零件,即新生成的零件,双击颜色框即......
  • 在gitlab中如何导出、导入某个项目(提交记录不变),对某个项目进行迁移
    1、需求说明 在项目的迁移中遇到,需要将gitlab中的某个项目进行迁移的过程。关键点是,需要保持提交记录不变。 本文档下面的内容,就介绍这个过程。 2、项目导出、导入的过程 2.1、导出项目 a、登录到gitlab页面  b、点击要迁移的项目   可以看到项目......
  • 2023最新中级难度JavaScript面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度JavaScript面试题合集问:如何实现在JavaScript中的操作settimeout/setinterval?在JavaScript中,setTimeout()和setInterval()是两个非常重要的函数,它们分别用于设置一次性延时执行的函数和周期性重复执行的函数。setTi......
  • 2023最新高级难度JavaScript面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度JavaScript面试题合集问:请问你如何使用装饰器模式?装饰器模式是一种设计模式,它允许我们在不修改原有类的基础上,动态地添加新的功能或者行为。装饰器模式通过创建一个新的对象来包装原始对象,并提供与原始对象相同的方法接口,但是......
  • 2023 年 12 月训练记录
    2023年12月训练记录怎么就寄了呢。没救了。不能再摆了。CF1824ELuoTianyiandCartridge我们对最小值做扫描线,现在就转化成了使得\(\sumb+\sumd\)最大。我们考虑点与边合法的充要条件。注意到假设有\(k\)个点,\(k-1\)条边,只要满足对于每条边的两部分都有点就是合......
  • 记录springboot的一次使用socketio的经历
    pom中加入依赖<dependency><groupId>com.corundumstudio.socketio</groupId><artifactId>netty-socketio</artifactId><version>2.0.6</version></dependency>......
  • Windows系统下修改jar包中的依赖
    在扫描出漏洞之后,往往需要对jar包中某些依赖进行修改升级,此时我们可以在windows下直接进行替换。解压原jar包,手动或者命令都可以。命令:jar-xvfmytest.jar,解压完一般包含以下3个文件目录:BOOT-INF/META-INF/org/,如下所示:下载新的依赖包,比如tomcat-embed-core-9.0.58.j......
  • 模拟赛记录
    每周三场模拟赛,用来记录。2023.11.22计数场。\(100+0+0+0=100\)。C0392B【1109B组】预处理器题意:求有多少个长度为\(n\)的数组\(a\)满足以下条件。条件一:\(l_{i}\lea_{i}\ler_{i}\)。条件二:\(a_{i}\)模\(2\)等于\(p_{i}\)。条件三:\(s\le\suma_{......
  • 记录一下工作遇到的一个小bug,DataGrid的DataGridCheckBoxColumn 问题
    <DataTemplatex:Key="CheckBoxDataTemplate"><Grid><CheckBoxClick="CheckBox_Checked"IsChecked="{BindingIsSelect,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"><......