BE_Express_CreateOrder_SFTC.groovy 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import com.alibaba.fastjson2.JSON
  2. import com.alibaba.fastjson2.JSONWriter
  3. import com.dderp.common.api.BusinessExecutor
  4. import com.dderp.common.datas.ERPModule
  5. import com.dderp.common.entity.base.ProcessStringItem
  6. import com.dderp.common.entity.express.SFCreateOrderResult
  7. import com.dderp.common.entity.express.SFOrder
  8. import com.dderp.common.entity.express.SFOrderDetail
  9. import com.dderp.common.entity.express.SFOrderProductDetail
  10. import com.dderp.common.entity.express.SFOrderReceive
  11. import com.dderp.common.http.HttpTools
  12. import com.sweetfish.convert.json.JsonConvert
  13. import com.sweetfish.service.RetResult
  14. import groovy.json.JsonSlurper
  15. import org.apache.logging.log4j.LogManager
  16. import org.apache.logging.log4j.Logger
  17. import javax.annotation.Resource
  18. import java.nio.charset.StandardCharsets
  19. import java.time.LocalDateTime
  20. import java.time.ZoneOffset
  21. import java.util.concurrent.CompletableFuture
  22. import java.util.concurrent.ExecutionException
  23. import java.util.concurrent.TimeUnit
  24. import java.util.concurrent.TimeoutException
  25. @SuppressWarnings("unused")
  26. class BE_Express_CreateOrder_SFTC implements BusinessExecutor<ProcessStringItem, ProcessStringItem> {
  27. private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  28. @Resource(name = "property.sftc.appId")
  29. long sfAppId
  30. @Resource(name = "property.sftc.appKey")
  31. String sfAppKey
  32. @Resource(name = "property.sftc.createOrderUrl")
  33. String sfCreateOrderUrl
  34. @Resource
  35. JsonConvert jsonConvert
  36. @Override
  37. String scriptName() {
  38. return "顺丰同城创建订单"
  39. }
  40. @Override
  41. ERPModule module() {
  42. return ERPModule.EXPRESS_API
  43. }
  44. RetResult<ProcessStringItem> execute(ProcessStringItem source) {
  45. //秒级时间戳,groovy里面不让用system
  46. long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
  47. long testTime = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli()
  48. SFOrder sfOrder = new SFOrder(
  49. dev_id: sfAppId,
  50. shop_id: "3243279847393",
  51. shop_type: 1,
  52. shop_order_id: "JY" + testTime + "L",
  53. order_sequence: "测试",
  54. lbs_type: 2,
  55. order_time: currentTime,
  56. push_time: currentTime,
  57. vehicle: 0,
  58. four_wheeler_type: 10,
  59. rider_pick_method: 1,
  60. version: 19,
  61. order_detail: new SFOrderDetail(
  62. total_price: 30100L,
  63. product_type: 6,
  64. weight_gram: 3000L,
  65. product_num: 15,
  66. product_type_num: 5,
  67. product_detail: [
  68. new SFOrderProductDetail(
  69. product_name: "测试商品1",
  70. product_num: 1
  71. ),
  72. new SFOrderProductDetail(
  73. product_name: "测试商品2",
  74. product_num: 3
  75. ),
  76. ]
  77. ),
  78. receive: new SFOrderReceive(
  79. user_name: "顺丰同城",
  80. user_phone: "18237171439",
  81. user_lng: "116.339392",
  82. user_lat: "40.002349",
  83. user_address: "北京市海淀区学清嘉创大厦A座15层"
  84. )
  85. )
  86. String postData = JSON.toJSONString(sfOrder)
  87. logger.info("请求数据: " + postData)
  88. String sign = ExpressApiSign.sfGenerateOpenSign(postData, sfAppId, sfAppKey)
  89. String url = sfCreateOrderUrl + "sign=" + sign
  90. CompletableFuture<String> apiResult = HttpTools.postHttpContentAsync(url,
  91. 5000,
  92. StandardCharsets.UTF_8,
  93. postData,
  94. ["Content-Type": "application/json;charset=utf-8"])
  95. try {
  96. String orderResult = apiResult.get(6000, TimeUnit.SECONDS)
  97. def jsonSlurper = new JsonSlurper()
  98. def sfOrderJson = jsonSlurper.parseText(orderResult)
  99. logger.info(sfOrderJson)
  100. SFCreateOrderResult createOrderResult = jsonConvert.convertFromO(SFCreateOrderResult.class, orderResult)
  101. logger.info(orderResult)
  102. logger.info(jsonConvert.convertTo(createOrderResult))
  103. return RetResult.<ProcessStringItem> successT().result(
  104. ProcessStringItem.newBuilder()
  105. .itemValue("")
  106. .build()
  107. )
  108. } catch (InterruptedException | ExecutionException | TimeoutException e) {
  109. logger.error(e.getMessage(), e)
  110. return RetResult.<ProcessStringItem> successT().result(
  111. ProcessStringItem.newBuilder()
  112. .itemValue("")
  113. .build()
  114. )
  115. }
  116. }
  117. }