diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/synctask/SyncTaskService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/synctask/SyncTaskService.java index afc4f4a..842ec36 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/synctask/SyncTaskService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/synctask/SyncTaskService.java @@ -3,6 +3,7 @@ package com.cowr.service.ssjygl.synctask; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.cowr.common.enums.Enums; +import com.cowr.common.enums.OrderStateEnum; import com.cowr.model.*; import com.cowr.service.ssjygl.main.Config; import com.cowr.service.ssjygl.main.SvrCacheData; @@ -39,7 +40,7 @@ public class SyncTaskService { this.taskQueue.add(obj); } - public int getTaskQueueSize(){ + public int getTaskQueueSize() { return this.taskQueue.size(); } @@ -310,6 +311,15 @@ public class SyncTaskService { JSONArray arr = data.getJSONArray("data"); List list = new ArrayList<>(); + if(Transport.tablename.equals(tablename)){ + arr = filtrateTransport(arr); + + if(arr.isEmpty()){ + log.debug("%s 数据都被过滤了", tablename); + continue; + } + } + for (int i = 0; i < arr.size(); i++) { JSONObject obj = arr.getJSONObject(i); @@ -507,4 +517,44 @@ public class SyncTaskService { return true; } + + /** + * 过滤 transport 的数据更新 + * 1.如果传上来的数据中 state 是 5 ,表示记录已完成,可以直接更新 + * 2.如果传上来的数据中 state 不是 5,就需要查询数据库,看看数据库中是不是已经是 5 了,避免 state 被回退更新 + * @param arr + * @return + */ + public JSONArray filtrateTransport(JSONArray arr) { + JSONArray out = new JSONArray(); + List ids = new ArrayList<>(); + List sqls = new ArrayList<>(); + Map map = new HashMap<>(); + + for (int i = 0; i < arr.size(); i++) { + JSONObject obj = arr.getJSONObject(i); + if (obj.get("state") != null && obj.getInteger("state") == OrderStateEnum.RECEIVED.getStateid()) { // state = 5 的情况是需要更新的 + out.add(obj); + } else { + // state 为null,或者不是 5,就需要检查一下数据库,是否已经置为 5 了 + ids.add(obj.getString("id")); + sqls.add("?"); + + map.put(obj.getString("id"), obj); + } + } + + if (!ids.isEmpty()) { + List list = Transport.dao.find("select * from transport t where t.id in (" + StrKit.join(sqls, ",") + ")", ids.toArray()); + for (Transport t : list) { + if (t.getState() != OrderStateEnum.RECEIVED.getStateid() && map.containsKey(t.getId())) { // 数据库中 state 已经是 5 的对象,就不加入更新了 + out.add(map.get(t.getId())); + } else { + log.debug("有 transport 数据延迟提交,直接丢弃: %s", map.get(t.getId()).toJSONString()); + } + } + } + + return out; + } }