elastic-data-test

MainController.java 6.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package com.vcarecity.publish.controller;
  2. import com.vcarecity.publish.annotation.SkipMethod;
  3. import com.vcarecity.publish.api.ApiResult;
  4. import com.vcarecity.publish.api.ApiStatus;
  5. import com.vcarecity.publish.elastic.service.ElasticLoadDataService;
  6. import com.vcarecity.publish.elastic.service.ElasticUpdateService;
  7. import com.vcarecity.publish.entity.UnitAgencyMergeEntity;
  8. import com.vcarecity.publish.pojo.dto.TotalResultDTO;
  9. import com.vcarecity.publish.pojo.dto.UnitAgencyDTO;
  10. import com.vcarecity.publish.pojo.dto.UnitIdDTO;
  11. import com.vcarecity.publish.pojo.query.UnitAgencyQuery;
  12. import com.vcarecity.publish.service.LoadDataStatusService;
  13. import com.vcarecity.publish.sql.service.AgencyService;
  14. import com.vcarecity.publish.sql.service.UnitService;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.beans.factory.annotation.Value;
  17. import org.springframework.web.bind.annotation.*;
  18. import javax.validation.Valid;
  19. import java.io.IOException;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. /**
  23. * @author Kerry on 19/12/11
  24. */
  25. @Slf4j
  26. @RestController
  27. public class MainController implements PrepareController {
  28. private final UnitService unitService;
  29. private final AgencyService agencyService;
  30. private final ElasticLoadDataService elasticLoadDataService;
  31. private final ElasticUpdateService elasticUpdateService;
  32. private final LoadDataStatusService loadDataStatusService;
  33. @Value("${app.index.name}")
  34. private String indexName;
  35. public MainController(UnitService unitService,
  36. ElasticLoadDataService elasticLoadDataService,
  37. LoadDataStatusService loadDataStatusService,
  38. @Value("${app.index.reload}") Boolean reloadData, AgencyService agencyService, ElasticUpdateService elasticUpdateService) {
  39. this.unitService = unitService;
  40. this.elasticLoadDataService = elasticLoadDataService;
  41. this.loadDataStatusService = loadDataStatusService;
  42. this.agencyService = agencyService;
  43. this.elasticUpdateService = elasticUpdateService;
  44. if (!reloadData) {
  45. // 不重新加载
  46. loadDataStatusService.setStatus(LoadDataStatusService.DATA_STATUS_LOADED);
  47. }
  48. }
  49. @SkipMethod
  50. @ResponseBody
  51. @RequestMapping(value = "/set-load", method = {RequestMethod.GET, RequestMethod.POST})
  52. public ApiResult setLoaded() {
  53. loadDataStatusService.setStatus(LoadDataStatusService.DATA_STATUS_LOADED);
  54. return ApiResult.builder().status(20000).message("already load data success!").build();
  55. }
  56. @SkipMethod
  57. @ResponseBody
  58. @RequestMapping(value = "/load", method = {RequestMethod.GET, RequestMethod.POST})
  59. public ApiResult loadData() {
  60. synchronized (this) {
  61. if (loadDataStatusService.getStatus() == LoadDataStatusService.DATA_STATUS_NOT_LOAD) {
  62. logger.info("prepare to load data into elasticsearch");
  63. loadDataStatusService.setStatus(LoadDataStatusService.DATA_STATUS_LOADING);
  64. new Thread(() -> {
  65. try {
  66. elasticLoadDataService.loadData();
  67. loadDataStatusService.setStatus(LoadDataStatusService.DATA_STATUS_LOADED);
  68. } catch (IOException e) {
  69. e.printStackTrace();
  70. loadDataStatusService.setStatus(LoadDataStatusService.DATA_STATUS_NOT_LOAD);
  71. }
  72. }).start();
  73. return ApiResult.builder().status(40000).message("first load data into elasticsearch").build();
  74. } else if (loadDataStatusService.getStatus() == LoadDataStatusService.DATA_STATUS_LOADING) {
  75. return ApiResult.builder().status(40000).message("loading data into elasticsearch").build();
  76. }
  77. }
  78. return ApiResult.builder().status(20000).message("already load data success!").build();
  79. }
  80. private List<Long> toQueryIds(String idStr) {
  81. String[] split = idStr.split(",");
  82. List<Long> ids = new ArrayList<>(split.length);
  83. for (String s : split) {
  84. try {
  85. ids.add(Long.parseLong(s));
  86. } catch (RuntimeException e) {
  87. e.printStackTrace();
  88. }
  89. }
  90. return ids;
  91. }
  92. @ResponseBody
  93. @RequestMapping(value = "/loadByAgencyIds", method = {RequestMethod.POST, RequestMethod.GET})
  94. public ApiResult loadByAgencyIds(@RequestParam("agencyIds") String agencyIds) {
  95. List<Long> ids = toQueryIds(agencyIds);
  96. List<UnitAgencyMergeEntity> result = agencyService.loadByAgencyIds(ids);
  97. if (result == null) {
  98. return ApiResult.builder().status(ApiStatus.FAILED_CODE).build();
  99. }
  100. try {
  101. elasticUpdateService.handlerDataChange("unitId", result);
  102. return ApiResult.builder().status(ApiStatus.SUCCESS_CODE).build();
  103. } catch (IOException e) {
  104. e.printStackTrace();
  105. return ApiResult.builder().status(40000).message(e.getMessage()).build();
  106. }
  107. }
  108. @ResponseBody
  109. @RequestMapping(value = "/loadByUnitIds", method = {RequestMethod.POST, RequestMethod.GET})
  110. public ApiResult loadByUnitIds(@RequestParam("unitIds") String unitIds) {
  111. List<Long> ids = toQueryIds(unitIds);
  112. List<UnitAgencyMergeEntity> result = unitService.loadByUnitIds(ids);
  113. if (result == null || result.isEmpty()) {
  114. return ApiResult.builder().status(ApiStatus.FAILED_CODE).build();
  115. }
  116. try {
  117. elasticUpdateService.handlerDataChange("unitId", result);
  118. return ApiResult.builder().status(ApiStatus.SUCCESS_CODE).build();
  119. } catch (IOException e) {
  120. e.printStackTrace();
  121. return ApiResult.builder().status(40000).message(e.getMessage()).build();
  122. }
  123. }
  124. @PostMapping("/query-unit-agency")
  125. public ApiResult queryUnitAgency(@RequestBody @Valid UnitAgencyQuery unitAgencyQuery) throws IOException {
  126. TotalResultDTO<List<UnitIdDTO>> totalResult = unitService.getUnitAgencyByQuery(unitAgencyQuery, UnitIdDTO.class, indexName);
  127. return ApiResult.builder()
  128. .status(ApiStatus.SUCCESS_CODE)
  129. .data(totalResult.getData())
  130. .total(totalResult.getTotal())
  131. .build();
  132. }
  133. @PostMapping("/test/query-unit-agency")
  134. public ApiResult testQueryUnitAgency(@RequestBody @Valid UnitAgencyQuery unitAgencyQuery) throws IOException {
  135. TotalResultDTO<List<UnitAgencyDTO>> totalResult = unitService.getUnitAgencyByQuery(unitAgencyQuery, UnitAgencyDTO.class, indexName);
  136. return ApiResult.builder()
  137. .status(ApiStatus.SUCCESS_CODE)
  138. .data(totalResult.getData())
  139. .total(totalResult.getTotal())
  140. .build();
  141. }
  142. @SkipMethod
  143. @Override
  144. public boolean isLoadData() {
  145. return loadDataStatusService.isLoaded();
  146. }
  147. }