BE_ERP_BusinessOrder_Search.groovy 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. import com.dderp.common.api.BusinessExecutor
  2. import com.dderp.common.api.SupplierInitService
  3. import com.dderp.common.datas.ERPModule
  4. import com.dderp.common.datas.ESKeys
  5. import com.dderp.common.datas.ReadOrderOption
  6. import com.dderp.common.entity.base.ProcessSearchOptionsItem
  7. import com.dderp.common.entity.order.BusinessOrder
  8. import com.dderp.common.tool.ERPUtils
  9. import com.dderp.common.datas.ReadOrderOption
  10. import com.dySweetFishPlugin.elasticsearch.ESClient
  11. import com.dySweetFishPlugin.tool.lang.DateUtil
  12. import com.sweetfish.convert.json.JsonConvert
  13. import com.sweetfish.service.RetResult
  14. import org.apache.commons.lang3.StringUtils
  15. import org.apache.logging.log4j.LogManager
  16. import org.apache.logging.log4j.Logger
  17. import org.elasticsearch.action.search.SearchResponse
  18. import org.elasticsearch.index.query.BoolQueryBuilder
  19. import org.elasticsearch.index.query.Operator
  20. import org.elasticsearch.index.query.QueryBuilder
  21. import org.elasticsearch.index.query.QueryBuilders
  22. import org.elasticsearch.join.query.JoinQueryBuilders
  23. import org.elasticsearch.search.aggregations.AggregationBuilders
  24. import org.elasticsearch.search.aggregations.metrics.sum.InternalSum
  25. import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount
  26. import org.elasticsearch.search.sort.SortBuilders
  27. import org.elasticsearch.search.sort.SortOrder
  28. import org.rex.RMap
  29. import javax.annotation.Resource
  30. import java.math.RoundingMode
  31. import java.util.function.ToLongFunction
  32. @SuppressWarnings(["rawtypes"])
  33. class BE_ERP_BusinessOrder_Search implements BusinessExecutor<ProcessSearchOptionsItem<ReadOrderOption>, BusinessOrder> {
  34. protected final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  35. @Resource
  36. SupplierInitService supplierService
  37. @Resource
  38. ESClient esClient
  39. @Resource
  40. JsonConvert jsonConvert
  41. @Override
  42. String scriptName() {
  43. return "ERP-外卖订单-查询"
  44. }
  45. @Override
  46. ERPModule module() {
  47. return ERPModule.ERP_ORDER_SEARCH
  48. }
  49. def <T> List<T> searchOrderChildInfoList(Class<T> clazz, String childESType, long[] idOrders, long supplierCode) {
  50. return ESList.<T> getESList()
  51. .esClient(esClient)
  52. .jsonConvert(jsonConvert)
  53. .clazz(clazz)
  54. .queryBuilder({
  55. //获取完成的数据情况
  56. return QueryBuilders.boolQuery()
  57. .must(QueryBuilders.typeQuery(childESType))
  58. .must(QueryBuilders.termsQuery("idOrder", ERPUtils.longArrayToStrArray(idOrders)))
  59. })
  60. .index(supplierService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 1))
  61. .executeNonePage()
  62. }
  63. def <T> Map<Long, List<T>> searchOrderChildInfoMap(Class<T> clazz, String childESType, long[] idOrders, long supplierCode, ToLongFunction<T> convertLong) {
  64. return ESMap.<T> getESMap()
  65. .srcIds(idOrders)
  66. .esClient(esClient)
  67. .jsonConvert(jsonConvert)
  68. .clazz(clazz)
  69. .queryBuilder({
  70. //获取完成的数据情况
  71. return QueryBuilders.boolQuery()
  72. .must(QueryBuilders.typeQuery(childESType))
  73. .must(QueryBuilders.termsQuery("idOrder", ERPUtils.longArrayToStrArray(idOrders)))
  74. })
  75. .convertLongExecutor(convertLong) //这里直接写{it.idOrder},只要所有的子类有这个值,groovy应该是可以的,只是看着难受,让调用接口传入转换方法
  76. .index(supplierService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 1))
  77. .execute()
  78. }
  79. def <T> List<T> getOrderChildInfo(Class<T> clazz, String childESType, long idOrder, long supplierCode) {
  80. return ESList.<T> getESList()
  81. .esClient(esClient)
  82. .jsonConvert(jsonConvert)
  83. .clazz(clazz)
  84. .queryBuilder({
  85. //获取完成的数据情况
  86. return QueryBuilders.boolQuery()
  87. .must(QueryBuilders.typeQuery(childESType))
  88. .must(QueryBuilders.termQuery("idOrder", idOrder))
  89. })
  90. .index(supplierService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 1))
  91. .executeNonePage()
  92. }
  93. def readOrderOptions(List<BusinessOrder> orderList, String dataSourceId, long supplierCode,
  94. ReadOrderOption... options) {
  95. long[] idOrders = orderList*.id.toArray() as long[]
  96. if ((options != null) && (options.length > 0) && (idOrders.length > 0)) {
  97. //防止搞坏事,options传重复数据过来,先去重
  98. options.toUnique().each { opt ->
  99. switch (opt) {
  100. }
  101. }
  102. }
  103. }
  104. def readOrderOptions(BusinessOrder businessOrder, String dataSourceId, long supplierCode,
  105. ReadOrderOption... options) {
  106. if ((options != null) && (options.length > 0)) {
  107. //防止搞坏事,options传重复数据过来,先去重
  108. options.toUnique().each { opt ->
  109. switch (opt) {
  110. }
  111. }
  112. }
  113. }
  114. def readOrderTotal(RMap searchData, String dataSourceId, long supplierCode, ReadOrderOption... options) {
  115. if (!(ReadOrderOption.ORDER_TOTAL in options)) {
  116. return null
  117. }
  118. //这里的查询需要和主表一致
  119. BoolQueryBuilder bqb = search(searchData)
  120. .byOrderStates()
  121. .byKeyWord()
  122. .byBeginTime_Create()
  123. .byEndTime_Create()
  124. .byClientName()
  125. .byIdClient()
  126. .byPlatform()
  127. .byVoidFlag()
  128. .build()
  129. //合计金额,所以主表从orderMoney中开始
  130. SearchResponse searchResponse = esClient.getClient()
  131. .prepareSearch(supplierService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 1))
  132. .setQuery(bqb)
  133. .addAggregation(AggregationBuilders.count("sub_count").field("id"))
  134. .addAggregation(AggregationBuilders.sum("orderMoneyTotal_Sum").field("orderMoneyTotal"))
  135. .addAggregation(AggregationBuilders.sum("chargeMoney_Sum").field("chargeMoney"))
  136. .addAggregation(AggregationBuilders.sum("payMoney_Sum").field("payMoney"))
  137. .addAggregation(AggregationBuilders.sum("orderQty_Sum").field("orderQty"))
  138. .execute().actionGet()
  139. ValueCount orderCountSum = searchResponse.getAggregations().get("sub_count")
  140. InternalSum orderMoneyTotalSum = searchResponse.getAggregations().get("orderMoneyTotal_Sum")
  141. InternalSum chargeMoneySum = searchResponse.getAggregations().get("chargeMoney_Sum")
  142. InternalSum payMoneySum = searchResponse.getAggregations().get("payMoney_Sum")
  143. InternalSum orderQtySum = searchResponse.getAggregations().get("orderQty_Sum")
  144. RMap<String, Number> collectionData = new RMap<>()
  145. collectionData.put("orderCountSum", orderCountSum.getValue())
  146. collectionData.put("orderMoneyTotalSum", BigDecimal.valueOf(orderMoneyTotalSum.getValue()).setScale(2, RoundingMode.HALF_UP))
  147. collectionData.put("chargeMoneySum", BigDecimal.valueOf(chargeMoneySum.getValue()).setScale(2, RoundingMode.HALF_UP))
  148. collectionData.put("payMoneySum", BigDecimal.valueOf(payMoneySum.getValue()).setScale(2, RoundingMode.HALF_UP))
  149. collectionData.put("orderQtySum", BigDecimal.valueOf(orderQtySum.getValue()).setScale(0, RoundingMode.HALF_UP))
  150. return collectionData
  151. }
  152. private RetResult<List<BusinessOrder>> queryByConditions(ProcessSearchOptionsItem<ReadOrderOption> source) {
  153. String orderByField = "createTimeLong"
  154. String orderBySort = "desc"
  155. if (StringUtils.isNotBlank(source.orderBy)) {
  156. orderByField = source.orderBy.split(",")[0].trim()
  157. orderBySort = source.orderBy.split(",")[1].trim().toLowerCase()
  158. }
  159. List<BusinessOrder> orderList = ESList.<BusinessOrder> getESList()
  160. .esClient(esClient)
  161. .jsonConvert(jsonConvert)
  162. .clazz(BusinessOrder.class)
  163. .queryBuilder({
  164. return search(source.searchData)
  165. .byOrderStates()
  166. .byKeyWord()
  167. .byBeginTime_Create()
  168. .byEndTime_Create()
  169. .byClientName()
  170. .byIdClient()
  171. .byPlatform()
  172. .byVoidFlag()
  173. .build()
  174. })
  175. .index(supplierService.getDateYearESIndex(source.supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 1))
  176. .sortBuilder({
  177. switch (orderBySort) {
  178. case 'asc': return SortBuilders.fieldSort(orderByField).order(SortOrder.ASC)
  179. case 'desc': return SortBuilders.fieldSort(orderByField).order(SortOrder.DESC)
  180. }
  181. })
  182. .dataExecutor(null)
  183. .executePage(source.pageFlipper)
  184. readOrderOptions(orderList, source.dataSourceId, source.supplierCode, source.options)
  185. RMap<String, Number> collectionData = readOrderTotal(source.searchData, source.dataSourceId, source.supplierCode, source.options)
  186. return RetResult.<List<BusinessOrder>> successT().result(orderList).page(source.pageFlipper).attachRMap(collectionData)
  187. }
  188. private RetResult<List<BusinessOrder>> queryByIds(ProcessSearchOptionsItem<ReadOrderOption> source) {
  189. if (!ERPUtils.mapContainKey(source.searchData, ERPUtils.PARAM_SEARCH_IDS)) {
  190. return RetResult.<List<BusinessOrder>> errorT().retinfo("无效的ids参数")
  191. }
  192. String[] idOrders = source.searchData.get(ERPUtils.PARAM_SEARCH_IDS)
  193. //ES规定,addIds或者terms中的数据长度好像是1024个限制,这里为了安全,把list拆分一下
  194. //待测试下,collate分隔之后的类型,不行的话还是得List<List<String>>
  195. //测试后,结果是List<List<>>,不明白数组为什么转成List
  196. List<List<String>> idOrderArrayList = idOrders.collate(500)
  197. List<BusinessOrder> orderList = new ArrayList<>()
  198. idOrderArrayList.each { l ->
  199. List<BusinessOrder> subOrderList = ESList.<BusinessOrder> getESList()
  200. .esClient(esClient)
  201. .jsonConvert(jsonConvert)
  202. .clazz(BusinessOrder.class)
  203. .queryBuilder({
  204. return search(source.searchData)
  205. .byIdOrders(l.toArray(String[]::new))
  206. .build()
  207. })
  208. .index(supplierService.getDateYearESIndex(source.supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 1))
  209. .executeNonePage()
  210. readOrderOptions(subOrderList, source.dataSourceId, source.supplierCode, source.options)
  211. if (!subOrderList.isEmpty()) {
  212. orderList.addAll(subOrderList)
  213. }
  214. }
  215. return RetResult.<List<BusinessOrder>> successT().result(orderList)
  216. }
  217. private RetResult<BusinessOrder> queryById(ProcessSearchOptionsItem<ReadOrderOption> source) {
  218. if (!ERPUtils.mapContainKey(source.searchData, ERPUtils.PARAM_SEARCH_ID)) {
  219. return RetResult.<BusinessOrder> errorT().retinfo("无效的id参数")
  220. }
  221. long idOrder = source.searchData.getLong(ERPUtils.PARAM_SEARCH_ID)
  222. BusinessOrder businessOrder = ESOne.<BusinessOrder> getESOneInfo()
  223. .esClient(esClient)
  224. .jsonConvert(jsonConvert)
  225. .clazz(BusinessOrder.class)
  226. .queryBuilder({
  227. //获取完成的数据情况
  228. ESConditionBuilder qb = search(null).byIdOrder(idOrder)
  229. //这里还需要判断数据权限
  230. return qb.build()
  231. })
  232. .index(supplierService.getDateYearESIndex(source.supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 1))
  233. .execute()
  234. if (businessOrder == null) {
  235. return RetResult.<BusinessOrder> errorT().retinfo("无效的订单")
  236. }
  237. readOrderOptions(businessOrder, source.dataSourceId, source.supplierCode, source.options)
  238. return RetResult.<BusinessOrder> successT().result(businessOrder)
  239. }
  240. private RetResult<BusinessOrder> queryByCode(ProcessSearchOptionsItem<ReadOrderOption> source) {
  241. if (!ERPUtils.mapContainKey(source.searchData, ERPUtils.PARAM_SEARCH_CODE)) {
  242. return RetResult.<BusinessOrder> errorT().retinfo("无效的id参数")
  243. }
  244. String orderCode = source.searchData.getString(ERPUtils.PARAM_SEARCH_CODE)
  245. BusinessOrder businessOrder = ESOne.<BusinessOrder> getESOneInfo()
  246. .esClient(esClient)
  247. .jsonConvert(jsonConvert)
  248. .clazz(BusinessOrder.class)
  249. .queryBuilder({
  250. //获取完成的数据情况
  251. return search(null).byOrderCode(orderCode).build()
  252. })
  253. .index(supplierService.getDateYearESIndex(source.supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 1))
  254. .execute()
  255. if (businessOrder == null) {
  256. return RetResult.<BusinessOrder> errorT().retinfo("无效的订单")
  257. }
  258. readOrderOptions(businessOrder, source.dataSourceId, source.supplierCode, source.options)
  259. return RetResult.<BusinessOrder> successT().result(businessOrder)
  260. }
  261. @Override
  262. RetResult<BusinessOrder> execute(ProcessSearchOptionsItem<ReadOrderOption> source) {
  263. //可以参考一些都能运的代码,但那个硬编码需要多一些,这里直接判断搜索条件里面都有没有对应的条件
  264. if (ERPUtils.mapContainKey(source.searchData, ERPUtils.PARAM_SEARCH_ID)) {
  265. return queryById(source)
  266. } else if (ERPUtils.mapContainKey(source.searchData, ERPUtils.PARAM_SEARCH_CODE)) {
  267. return queryByCode(source)
  268. }
  269. return RetResult.<BusinessOrder> errorT().retinfo("无效的查询方式execute,查多数据应该使用executeList")
  270. }
  271. @Override
  272. RetResult<List<BusinessOrder>> executeList(ProcessSearchOptionsItem<ReadOrderOption> source) {
  273. if (ERPUtils.mapContainKey(source.searchData, ERPUtils.PARAM_SEARCH_IDS)) {
  274. return queryByIds(source)
  275. } else {
  276. return queryByConditions(source)
  277. }
  278. }
  279. //region 条件构造
  280. //groovy没法用java中类似SendOrderESConditionBuilder的静态方法构造内部类,强制编译不报错,运行还是报错无适配的构造函数,但用常规的类好使,估计是内部类有什么说法
  281. ESConditionBuilder search(RMap searchData) {
  282. return new ESConditionBuilder(searchData, QueryBuilders.boolQuery().must(QueryBuilders.typeQuery(ESKeys.ES_DELIVER_BUSINESS_ORDER_TYPE)))
  283. }
  284. //这里是做一个示例,表示通过查部件子表查询订单
  285. ESConditionBuilder searchByOrderRider(RMap searchData) {
  286. return new ESConditionBuilder(searchData, QueryBuilders.boolQuery().must(QueryBuilders.typeQuery(ESKeys.ES_ERP_ORDER_PART_TYPE)))
  287. }
  288. //endregion
  289. class ESConditionBuilder {
  290. RMap searchData
  291. BoolQueryBuilder qb
  292. ESConditionBuilder() {
  293. }
  294. ESConditionBuilder(RMap searchData) {
  295. this.searchData = searchData
  296. }
  297. ESConditionBuilder(RMap searchData, BoolQueryBuilder qb) {
  298. this.searchData = searchData
  299. this.qb = qb
  300. }
  301. //上面没法用java类似的静态方法返回条件,运行期还是报错没有适配的构造函数
  302. //注意这里如果定义成闭包,不能用this做流式写法,参考https://groovy-lang.org/closures.html#closure-owner
  303. //但是用了owner,返回的类型是Object,还得做转换,所以这里直接用java的写法
  304. ESConditionBuilder byIdOrders(String[] idOrders) {
  305. if (idOrders.length > 0) {
  306. qb = qb.must(QueryBuilders.idsQuery(ESKeys.ES_DELIVER_BUSINESS_ORDER_TYPE).addIds(idOrders))
  307. }
  308. return this
  309. }
  310. ESConditionBuilder byIdOrders(List<Long> idOrders) {
  311. if (!idOrders.isEmpty()) {
  312. qb = qb.must(QueryBuilders.idsQuery(ESKeys.ES_DELIVER_BUSINESS_ORDER_TYPE).addIds(ERPUtils.longArrayToStrArray(ERPUtils.longListToArray(idOrders))))
  313. }
  314. return this
  315. }
  316. ESConditionBuilder byIdOrder(long idOrder) {
  317. //这里不要判断idOrder是否大于0,防止条件漏了
  318. qb = qb.must(QueryBuilders.idsQuery(ESKeys.ES_DELIVER_BUSINESS_ORDER_TYPE).addIds(String.valueOf(idOrder)))
  319. return this
  320. }
  321. ESConditionBuilder byKeyWord() {
  322. if (ERPUtils.mapContainKey(searchData, "keyWord")) {
  323. String keyWord = searchData.getString("keyWord")
  324. QueryBuilder qbKeyWord = QueryBuilders.boolQuery()
  325. .should(QueryBuilders.termQuery("orderCode", keyWord.toLowerCase()))
  326. .should(QueryBuilders.matchQuery("orderName", keyWord).operator(Operator.AND))
  327. .should(QueryBuilders.matchQuery("clientName", keyWord).operator(Operator.AND))
  328. .should(QueryBuilders.matchQuery("productName", keyWord).operator(Operator.AND))
  329. .should(QueryBuilders.matchQuery("createMan", keyWord).operator(Operator.AND))
  330. .should(QueryBuilders.matchQuery("orderRegion", keyWord).operator(Operator.AND))
  331. qb = qb.must(qbKeyWord)
  332. }
  333. return this
  334. }
  335. ESConditionBuilder byOrderStates() {
  336. if (ERPUtils.mapContainKey(searchData, "orderStates")) {
  337. String orderStates = searchData.getString("orderStates")
  338. qb = qb.must(QueryBuilders.termsQuery("orderState", orderStates.split(",")))
  339. }
  340. return this
  341. }
  342. ESConditionBuilder byOrderStates(String orderStates) {
  343. qb = qb.must(QueryBuilders.termsQuery("orderState", orderStates.split(",")))
  344. return this
  345. }
  346. ESConditionBuilder byOrderState(int orderState) {
  347. qb = qb.must(QueryBuilders.termQuery("orderState", orderState))
  348. return this
  349. }
  350. ESConditionBuilder byVoidFlag() {
  351. if (ERPUtils.mapContainKey(searchData, "voidFlag")) {
  352. int voidFlag = searchData.getInt("voidFlag")
  353. if (voidFlag >= 0) {
  354. qb = qb.must(QueryBuilders.termQuery("voidFlag", voidFlag))
  355. }
  356. }
  357. return this
  358. }
  359. ESConditionBuilder byVoidFlag(int voidFlag) {
  360. if (voidFlag >= 0) {
  361. qb = qb.must(QueryBuilders.termQuery("voidFlag", voidFlag))
  362. }
  363. return this
  364. }
  365. ESConditionBuilder byOrderCode() {
  366. if (ERPUtils.mapContainKey(searchData, "orderCode")) {
  367. String orderCode = searchData.getString("orderCode")
  368. qb = qb.must(QueryBuilders.termQuery("orderCode", orderCode.toLowerCase()))
  369. }
  370. return this
  371. }
  372. ESConditionBuilder byOrderCode(String orderCode) {
  373. qb = qb.must(QueryBuilders.termQuery("orderCode", orderCode.toLowerCase()))
  374. return this
  375. }
  376. ESConditionBuilder byBeginTime_Create() {
  377. if (ERPUtils.mapContainKey(searchData, "beginTime")) {
  378. String beginTimeStr = searchData.getString("beginTime")
  379. long beginTime
  380. if (beginTimeStr.contains("-")) {
  381. beginTime = DateUtil.getStartOfDay(DateUtil.asDate(beginTimeStr, "yyyy-MM-dd")).getTime()
  382. } else {
  383. beginTime = DateUtil.getStartOfDay(new Date(searchData.getLong("beginTime"))).getTime()
  384. }
  385. qb = qb.must(QueryBuilders.rangeQuery("createTimeLong").gte(beginTime))
  386. }
  387. return this
  388. }
  389. ESConditionBuilder byEndTime_Create() {
  390. if (ERPUtils.mapContainKey(searchData, "endTime")) {
  391. String endTimeStr = searchData.getString("endTime")
  392. long endTime
  393. if (endTimeStr.contains("-")) {
  394. endTime = DateUtil.getEndOfDay(DateUtil.asDate(endTimeStr, "yyyy-MM-dd")).getTime()
  395. } else {
  396. endTime = DateUtil.getEndOfDay(new Date(searchData.getLong("endTime"))).getTime()
  397. }
  398. qb = qb.must(QueryBuilders.rangeQuery("createTimeLong").lte(endTime))
  399. }
  400. return this
  401. }
  402. ESConditionBuilder byClientName() {
  403. if (ERPUtils.mapContainKey(searchData, "clientName")) {
  404. String clientName = searchData.getString("clientName")
  405. qb = qb.must(QueryBuilders.boolQuery()
  406. .should(QueryBuilders.matchQuery("clientName", clientName).analyzer("index_ansj").operator(Operator.AND))
  407. .should(QueryBuilders.termQuery("clientName.number", clientName.toLowerCase()))
  408. .should(QueryBuilders.matchQuery("clientName.letter", clientName.toLowerCase()).operator(Operator.AND)))
  409. }
  410. return this
  411. }
  412. ESConditionBuilder byIdClient() {
  413. if (ERPUtils.mapContainKey(searchData, "idClient")) {
  414. long idClient = searchData.getLong("idClient")
  415. //这里不管是否大于0,都查询
  416. qb = qb.must(QueryBuilders.termQuery("idClient", idClient))
  417. }
  418. return this
  419. }
  420. ESConditionBuilder byPlatform() {
  421. if (ERPUtils.mapContainKey(searchData, "incomePlatformId")) {
  422. long incomePlatformId = searchData.getLong("incomePlatformId")
  423. //这里不管是否大于0,都查询
  424. qb = qb.must(QueryBuilders.termQuery("incomePlatformId", incomePlatformId))
  425. }
  426. if (ERPUtils.mapContainKey(searchData, "incomePlatformOrderCode")) {
  427. String incomePlatformOrderCode = searchData.getString("incomePlatformOrderCode")
  428. qb = qb.must(QueryBuilders.termQuery("incomePlatformOrderCode.raw", incomePlatformOrderCode))
  429. }
  430. return this
  431. }
  432. ESConditionBuilder byIdClient(long idClient) {
  433. qb = qb.must(QueryBuilders.termQuery("idClient", idClient))
  434. return this
  435. }
  436. ESConditionBuilder byOrderParentQuery(QueryBuilder qbParent) {
  437. qb = qb.must(JoinQueryBuilders.hasParentQuery(ESKeys.ES_DELIVER_BUSINESS_ORDER_TYPE, qbParent, false))
  438. return this
  439. }
  440. BoolQueryBuilder build() {
  441. return qb
  442. }
  443. }
  444. }