1、需求描述:
现在甲方买了我们公司的系统,他们之前也是还有一个老系统的,现在他们老系统的用户和用户相关的一些表数据需要同步到我们公司的系统上去,也就是一个取数据存表的需求。
2、需求分析、解决方案:
1)、首先肯定是需要甲方提供接口文档的,毕竟别人公司这些事还是需要看文档的,不熟嘛
2)、然后需要写一个定时器触发这些同步数据的方法
3)、自己写完逻辑代码,需要在controller层写接口调用方法,因为需要在postman等工具上测试的
3、遇到的问题和收获:
1)、定时器:Timer
@Scheduled(cron="0 0 0/1 * * ?")
每一小时执行一次,这个频率是根据用户需求来定的
类名上要加上@Component注解,不然spring项目不会执行
2)、同步数据的需求一个统一的逻辑:
在数据接口调用后,取到数据后,不要急着存入自己系统的表中取,
需要先判断表中是否有这条数据了,如果有该条数据,然后在判断这条数据的update字段与表中的update字段是否相等,一般系统中都是会有update这个字段的,如果相等就丢弃这个数据,同步下一条数据,
不相等就更新这条数据,最后就是表中没有这条数据的情况了,直接存表就完了。
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Data.equals()方法
if(queryForMap != null && queryForMap.size() != 0){
if (df.parse(queryForMap.get("UPDATETIME").toString()).equals(df.format(Json.getString("updateTime"))){
resultStr = "数据已存在";
return resultStr;
}
for循环就continue就行
3)、JSONArray转换为List进行遍历
JSONArray jsonArray = resultJson.getJSONObject("data").getJSONArray("list");
List<Map<String, Object>> list = new ArrayList<>();
for (Object o : jsonArray) {
list.add((Map<String, Object>) o);
}
list.forEach();
4、最后:
这个需求是现在最无力吐槽的一个了,既然要同步完全不同系统的的数据,表与表之间的字段对应关系,又不在接口对接文档中写详细些,一个表十多个字段我让我一个一个地去猜,好几张表, 这让谁来做,谁倒霉哦,同步完之后又来找我问题,说哪个字段对应关系错了,真的过分啊,下次别给我来这种需求了啊。拜托写接口文档的大哥写详细些呀。