今天又碰到一个奇葩问题,这个问题以前遇到过,还不太懂,也还没有好的解决办法,以后有时间再好好研究,这里先记录一下。
需求: 后台需要新加一个字段用来关联第三方平台数据,修改操作的逻辑需要用这个字段去获取第三方平台数据并且更新到当前表。
简化代码如下:
Offer offer = this.offerService.get(id);
offer.setName(name);
offer.setUnit(unit);
offer.setStock(stock);
offer.setPrice(price);
offer.setEnabled(true);
//关联更新
if(StringUtils.isNotBlank(code)){
//根据存货编码获取用友的数据
String resultData = YyApiUtils.getProductList(code,null,null);
//获取数据存入offer操作
//....................
}
//更新数据
this.offerService.update(offer);
//调试输出
System.out.println("更新后offer数据:" + offer.toString());
out.put("status", 200);
out.put("message", "修改成功");
return out.toString();
问题: 在提交update操作之后,前端第一时间获取数据能正常回显最新其他数据,但是一刷新就又还原了。。。本地运行调试没问题数据正常更新,线上也正常执行,但是数据就是不更新也不报错。
分析: 接口原来的update一直没问题,很可能是自己新加的同步第三方代码影响了,尝试后台不录入关联参数结果正常更新数据,这更加确定就是新加代码问题,如果在代码里层层加上输入日志分析过程,发现return前最后一段日志输入之后,还有调用第三方接口日志输出。
原因: 代码执行到中间逻辑去请求第三方获取数据,可能因为网络问题啥的,还没得到反馈就继续往下执行update操作,实际上是正常更新了数据库,但是等接口数据反馈回来的时候又把对象的数据还原了。
临时解决办法: 把更新第三方数据的逻辑重新写个接口让前端调用,先不影响原来数据的更新,二次调用更新第三方数据。