import Ignore_ExecPageFlipper as ExecPageFlipper import com.yinjie.heating.business.dao.DocDao import com.yinjie.heating.common.api.NoSqlKeysService import com.yinjie.heating.common.datas.ESKeys import com.yinjie.heating.common.datas.RedisKeys import com.yinjie.heating.common.entity.inquire.InquireCondition import com.yinjie.heating.common.entity.inquire.InquireMainInfo import com.yinjie.heating.common.entity.inquire.InquireResultColumn import com.yinjie.heating.common.tool.ERPUtils import com.dySweetFishPlugin.elasticsearch.ESClient import com.dySweetFishPlugin.redis.RedisService import com.sweetfish.convert.json.JsonConvert import com.sweetfish.source.PageFlipper import com.sweetfish.util.Utility import org.apache.logging.log4j.Logger import org.elasticsearch.action.bulk.BulkRequestBuilder import org.elasticsearch.action.bulk.BulkResponse import org.elasticsearch.action.index.IndexRequestBuilder import org.elasticsearch.common.xcontent.XContentType import org.rex.RMap static def buildTreeList(List platColumns, long idParent) { if (platColumns.isEmpty()) return platColumns List parents = platColumns.findAll { x -> x.idParentColumn == idParent } platColumns.removeAll(parents) parents.each { x -> x.childColumnList = buildTreeList(platColumns, x.id) } return parents } static def createRunnable(RedisService redisService, ESClient esClient, NoSqlKeysService keysService, DocDao docDao, JsonConvert jsonConvert, Logger logger, String dataSourceId, long supplierCode) { return { esClient.createIndex(keysService.getESKey(ESKeys.ESERPINQUIREINFO_INDEX, supplierCode), ESKeys.INDEX_CONFIG, Utility.ofMap(ESKeys.ESERPINQUIREMAININFO_TYPE, "inquiremaininfo.json", ESKeys.ESERPINQUIRERESULTCOLUMN_TYPE, "inquireresultcolumn.json", ESKeys.ESERPINQUIRECONDITION_TYPE, "inquirecondition.json")) redisService.del(keysService.getRedisKey(RedisKeys.KEY_ERP_INQUIREINFO, supplierCode)) RMap params = new RMap() ExecPageFlipper.execute(500, { PageFlipper p -> List inquireMainInfos = docDao.selectInquireMainInfo(params, p, dataSourceId, supplierCode) if (!inquireMainInfos.isEmpty()) { BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk() inquireMainInfos.each { x -> IndexRequestBuilder indexRequest = esClient.getClient() .prepareIndex(keysService.getESKey(ESKeys.ESERPINQUIREINFO_INDEX, supplierCode), ESKeys.ESERPINQUIREMAININFO_TYPE) .setId(String.valueOf(x.getId())) .setSource(jsonConvert.convertTo(x), XContentType.JSON) bulkRequest.add(indexRequest) RMap inquireParams = ERPUtils.ofRMap("idInquire", x.id) ExecPageFlipper.execute(1000, { PageFlipper p1 -> List inquireResultColumns = docDao.selectInquireResultColumn(inquireParams, p1, dataSourceId, supplierCode) //组成树结构 if (!inquireResultColumns.isEmpty()) { List treeList = buildTreeList(inquireResultColumns, 0L) x.setResultColumnList(treeList) } }) ExecPageFlipper.execute(1000, { PageFlipper p2 -> List inquireConditions = docDao.selectInquireCondition(params, p2, dataSourceId, supplierCode) if (!inquireConditions.isEmpty()) x.setConditionList(inquireConditions) }) } BulkResponse bulkResponse = bulkRequest.execute().actionGet() if (bulkResponse.hasFailures()) { logger.error("索引查询统计:" + bulkResponse.buildFailureMessage()) } else { logger.info("索引查询统计共" + inquireMainInfos.size() + "条记录") } Map inquireInfoMap = inquireMainInfos.collectEntries { [String.valueOf(it.getId()), jsonConvert.convertTo(it)] } if (!inquireInfoMap.isEmpty()) redisService.hmset(keysService.getRedisKey(RedisKeys.KEY_ERP_INQUIREINFO, supplierCode), inquireInfoMap) } }) } as Runnable } //groovy最后一个表达式的值为返回 createRunnable(redisService, esClient, keysService, docDao, jsonConvert, logger, dataSourceId, supplierCode)