Init_10_Inquire.groovy 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import Ignore_ExecPageFlipper as ExecPageFlipper
  2. import com.yinjie.heating.business.dao.DocDao
  3. import com.yinjie.heating.common.api.NoSqlKeysService
  4. import com.yinjie.heating.common.datas.ESKeys
  5. import com.yinjie.heating.common.datas.RedisKeys
  6. import com.yinjie.heating.common.entity.inquire.InquireCondition
  7. import com.yinjie.heating.common.entity.inquire.InquireMainInfo
  8. import com.yinjie.heating.common.entity.inquire.InquireResultColumn
  9. import com.yinjie.heating.common.tool.ERPUtils
  10. import com.dySweetFishPlugin.elasticsearch.ESClient
  11. import com.dySweetFishPlugin.redis.RedisService
  12. import com.sweetfish.convert.json.JsonConvert
  13. import com.sweetfish.source.PageFlipper
  14. import com.sweetfish.util.Utility
  15. import org.apache.logging.log4j.Logger
  16. import org.elasticsearch.action.bulk.BulkRequestBuilder
  17. import org.elasticsearch.action.bulk.BulkResponse
  18. import org.elasticsearch.action.index.IndexRequestBuilder
  19. import org.elasticsearch.common.xcontent.XContentType
  20. import org.rex.RMap
  21. static def buildTreeList(List<InquireResultColumn> platColumns, long idParent) {
  22. if (platColumns.isEmpty())
  23. return platColumns
  24. List<InquireResultColumn> parents = platColumns.findAll { x ->
  25. x.idParentColumn == idParent
  26. }
  27. platColumns.removeAll(parents)
  28. parents.each { x ->
  29. x.childColumnList = buildTreeList(platColumns, x.id)
  30. }
  31. return parents
  32. }
  33. static def createRunnable(RedisService redisService, ESClient esClient, NoSqlKeysService keysService, DocDao docDao, JsonConvert jsonConvert, Logger logger, String dataSourceId, long supplierCode) {
  34. return {
  35. esClient.createIndex(keysService.getESKey(ESKeys.ESERPINQUIREINFO_INDEX, supplierCode), ESKeys.INDEX_CONFIG,
  36. Utility.ofMap(ESKeys.ESERPINQUIREMAININFO_TYPE, "inquiremaininfo.json",
  37. ESKeys.ESERPINQUIRERESULTCOLUMN_TYPE, "inquireresultcolumn.json",
  38. ESKeys.ESERPINQUIRECONDITION_TYPE, "inquirecondition.json"))
  39. redisService.del(keysService.getRedisKey(RedisKeys.KEY_ERP_INQUIREINFO, supplierCode))
  40. RMap params = new RMap()
  41. ExecPageFlipper.execute(500, { PageFlipper p ->
  42. List<InquireMainInfo> inquireMainInfos = docDao.selectInquireMainInfo(params, p, dataSourceId, supplierCode)
  43. if (!inquireMainInfos.isEmpty()) {
  44. BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk()
  45. inquireMainInfos.each { x ->
  46. IndexRequestBuilder indexRequest = esClient.getClient()
  47. .prepareIndex(keysService.getESKey(ESKeys.ESERPINQUIREINFO_INDEX, supplierCode), ESKeys.ESERPINQUIREMAININFO_TYPE)
  48. .setId(String.valueOf(x.getId()))
  49. .setSource(jsonConvert.convertTo(x), XContentType.JSON)
  50. bulkRequest.add(indexRequest)
  51. RMap inquireParams = ERPUtils.ofRMap("idInquire", x.id)
  52. ExecPageFlipper.execute(1000, { PageFlipper p1 ->
  53. List<InquireResultColumn> inquireResultColumns = docDao.selectInquireResultColumn(inquireParams, p1, dataSourceId, supplierCode)
  54. //组成树结构
  55. if (!inquireResultColumns.isEmpty()) {
  56. List<InquireResultColumn> treeList = buildTreeList(inquireResultColumns, 0L)
  57. x.setResultColumnList(treeList)
  58. }
  59. })
  60. ExecPageFlipper.execute(1000, { PageFlipper p2 ->
  61. List<InquireCondition> inquireConditions = docDao.selectInquireCondition(params, p2, dataSourceId, supplierCode)
  62. if (!inquireConditions.isEmpty())
  63. x.setConditionList(inquireConditions)
  64. })
  65. }
  66. BulkResponse bulkResponse = bulkRequest.execute().actionGet()
  67. if (bulkResponse.hasFailures()) {
  68. logger.error("索引查询统计:" + bulkResponse.buildFailureMessage())
  69. } else {
  70. logger.info("索引查询统计共" + inquireMainInfos.size() + "条记录")
  71. }
  72. Map<String, String> inquireInfoMap = inquireMainInfos.collectEntries { [String.valueOf(it.getId()), jsonConvert.convertTo(it)] }
  73. if (!inquireInfoMap.isEmpty())
  74. redisService.hmset(keysService.getRedisKey(RedisKeys.KEY_ERP_INQUIREINFO, supplierCode), inquireInfoMap)
  75. }
  76. })
  77. } as Runnable
  78. }
  79. //groovy最后一个表达式的值为返回
  80. createRunnable(redisService, esClient, keysService, docDao, jsonConvert, logger, dataSourceId, supplierCode)