AbstractFlushStrategy.java 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package org.dbsyncer.parser.flush;
  2. import org.dbsyncer.cache.CacheService;
  3. import org.dbsyncer.common.model.Result;
  4. import org.dbsyncer.parser.model.Meta;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.util.Assert;
  7. import java.util.List;
  8. import java.util.Map;
  9. /**
  10. * @author AE86
  11. * @version 1.0.0
  12. * @date 2021/11/18 22:22
  13. */
  14. public abstract class AbstractFlushStrategy implements FlushStrategy {
  15. @Autowired
  16. private FlushService flushService;
  17. @Autowired
  18. private CacheService cacheService;
  19. @Override
  20. public void flushFullData(String metaId, Result result, String event, List<Map> dataList) {
  21. flush(metaId, result, event, dataList);
  22. }
  23. @Override
  24. public void flushIncrementData(String metaId, Result result, String event, List<Map> dataList) {
  25. flush(metaId, result, event, dataList);
  26. }
  27. protected void flush(String metaId, Result result, String event, List<Map> dataList) {
  28. refreshTotal(metaId, result, dataList);
  29. boolean success = 0 == result.getFail().get();
  30. if (!success) {
  31. dataList.clear();
  32. dataList.addAll(result.getFailData());
  33. }
  34. flushService.asyncWrite(metaId, event, success, dataList, result.getError().toString());
  35. }
  36. protected void refreshTotal(String metaId, Result writer, List<Map> dataList){
  37. long fail = writer.getFail().get();
  38. Meta meta = getMeta(metaId);
  39. meta.getFail().getAndAdd(fail);
  40. meta.getSuccess().getAndAdd(dataList.size() - fail);
  41. }
  42. protected Meta getMeta(String metaId) {
  43. Assert.hasText(metaId, "Meta id can not be empty.");
  44. Meta meta = cacheService.get(metaId, Meta.class);
  45. Assert.notNull(meta, "Meta can not be null.");
  46. return meta;
  47. }
  48. }