对接接口

171 阅读2分钟

1、需求描述:

1)、获取access token;
2)、根据版本号获取账户信息;
3)、预下单
预下单后调订单处理 4)、冲正,就是消费金额不对是进行一个退款操作;
5)、订单查询;新建表,存入数据;


2、需求分析、解决方案:

1)、根据甲方提供的文档对接对方的接口,操作自己系统的数据库
2)、这次需求比较需要保密了,代码也不贴多了,所以还是主要写下这次需求的收获了

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进行遍历
JSONArray jsonArray = resultJson.getJSONObject("data").getJSONArray("list");

for (Object  data : jsonArray) {
    JSONObject memberJson = (JSONObject) data;
    memberJson.get("");
}


4)、需求中mysql中的收获:
order by:对varchar类型的数字也可以进行排序,
select * from table order by name desc LIMIT 0,1 :取表中name值最大的一条数据


中间表,字段只有几个关键数据的主键id,导致查询的条件在外表里,需要在子查询,可能还有更好的方法,但是我只到了子查询,简化后如下
"select t.* from table t where 1=1 and t.name in ( (select name from table1 a where INSTR( CONCAT( a.1, a.2, a.3 ),'value') > 0 ) )
and t.name in ( (select name from table2  where STATUS = 'value' and t.USER_TYPE_ID = 'value') )

where t. not in 的使用
select t.* JOIN table1 t1 on t.name = t1.id where t.id not in ((select id from table2))






4、最后:

最近真的好忙呀,早知道这家公司这么狠就不从上家公司辞职了,上家公司周末双休,从来没有加过班,6点准时下班,真怀念在杭州的那段日子,这家大小周,天天加班到11、12点,工资也不高,深圳也是压力大呀, 今年Java的行情真不好呀,大家还是能不辞职就不走了吧,工作也难找,我也找了一个月还没找的,还是朋友内推才进了现在这家,我也是先混口饭吃着,总不能在家啃老吧,大家加油吧,祝我们都能找到心怡的工作呀!