BE_Express_CreateOrder_SFTC.groovy 4.8 KB

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