BE_Order_SubmitDeliveryInfo_DYLK.groovy 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import com.dderp.business.dao.OrderDao
  2. import com.dderp.common.api.BusinessExecutor
  3. import com.dderp.common.api.StoreService
  4. import com.dderp.common.api.SupplierInitService
  5. import com.dderp.common.api.flycat.DouyinService
  6. import com.dderp.common.api.flycat.OrderSearchService
  7. import com.dderp.common.api.flycat.OrderService
  8. import com.dderp.common.api.flycat.OrderStepService
  9. import com.dderp.common.datas.ERPModule
  10. import com.dderp.common.datas.flycat.BusinessOrderStatus
  11. import com.dderp.common.entity.base.InvokeCallParams
  12. import com.dderp.common.entity.base.InvokeCallResult
  13. import com.dderp.common.entity.order.BusinessOrder
  14. import com.dderp.common.entity.site.ERPTokenUser
  15. import com.dderp.common.entity.store.StorePlatform
  16. import com.dySweetFishPlugin.elasticsearch.ESClient
  17. import com.dySweetFishPlugin.sql.TableIdService
  18. import com.dySweetFishPlugin.sql.dao.TunaService
  19. import com.sweetfish.convert.json.JsonConvert
  20. import com.sweetfish.service.RetResult
  21. import groovy.json.JsonSlurper
  22. import org.apache.logging.log4j.LogManager
  23. import org.apache.logging.log4j.Logger
  24. import javax.annotation.Resource
  25. import java.time.LocalDateTime
  26. import java.time.ZoneOffset
  27. @SuppressWarnings("unused")
  28. class BE_Order_SubmitDeliveryInfo_DYLK implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
  29. private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  30. @Resource
  31. private JsonConvert jsonConvert
  32. @Resource
  33. private TableIdService tableIdService
  34. @Resource
  35. private StoreService storeService
  36. @Resource
  37. private ESClient esClient
  38. @Resource
  39. private SupplierInitService supplierInitService
  40. @Resource
  41. private OrderStepService orderStepService
  42. @Resource
  43. private OrderService orderService
  44. @Resource
  45. private OrderSearchService orderSearchService
  46. @Resource
  47. private DouyinService douyinService
  48. @Resource
  49. private TunaService tunaService
  50. private OrderDao orderDao
  51. @Override
  52. String scriptName() {
  53. return "[抖音来客]回传配送信息"
  54. }
  55. @Override
  56. ERPModule module() {
  57. return ERPModule.ORDER_API
  58. }
  59. /*
  60. params : {
  61. "idOrder" : 2, 系统订单id,必填
  62. //"order_id" : "8000007372302629122" , 抖音的订单id,不要了,传入系统内订单id就行了
  63. "rider_phone" : "123241289303" , 骑手电话
  64. "three_source" : 7 , 三方配送商,注1,必填
  65. "behavior" : 2 , 回传状态,注2,必填
  66. "accept_time" : 1669344364 , 骑手接单时间戳,秒
  67. "rider_flow_time" : 1669344364 , 骑手信息采集时间戳,秒
  68. "rider_lat" : 43.26 , 骑手坐标,GCJ02坐标
  69. "rider_lng" : 26.36 , 骑手坐标,GCJ02坐标
  70. "rider_name" : "配送员姓名" , 骑手姓名
  71. "rider_phone_type" : 0 , 骑手电话类型0真实号1隐私号
  72. "three_delivery_id" : "SF263579679634687" 三方物流单号
  73. }
  74. 注1: 三方配送商标示 0=顺丰同城;1=新达达;2=蜂鸟配送;3=美团配送;4=闪送;5=点我达;6=UU跑腿;8=信天翁;10=365跑腿;11=曹操跑腿;12=爱跑腿;13=快跑者;14=极客快送;15=同达;16=生活半径;17=临趣;18=趣送;19=快服务;20=菜鸟新联盟;21=风先生;22=来答配送;23=好急跑腿;24=送个东西跑题;25=靠谱送;26=快男跑腿;27=裹小递 7=其他;1000=商家自配送
  75. 注2: 1=骑手已接单; 2=骑手已到店; 3=骑手已取货(配送中); 4=骑手已送达; 5=运单取消 (允许跨状态回传,例如1->3,跳过2)
  76. */
  77. RetResult<InvokeCallResult> execute(InvokeCallParams source) {
  78. //秒级时间戳,groovy里面不让用system
  79. long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
  80. String dataSourceId = source.dataSourceId
  81. long supplierCode = source.supplierCode
  82. ERPTokenUser currentUser = source.currentUser
  83. def jsonSlurper = new JsonSlurper()
  84. def invokeOrder = jsonSlurper.parseText(source.params)
  85. long idOrder = invokeOrder["idOrder"] as Long
  86. RetResult<BusinessOrder> orderResult = orderSearchService.getBusinessOrder(idOrder, currentUser, dataSourceId, supplierCode, null)
  87. if (!orderResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(orderResult.retinfo)
  88. BusinessOrder esOrder = orderResult.result
  89. StorePlatform storePlatform = storeService.getStorePlatformInfo(esOrder.incomePlatformId, supplierCode)
  90. if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
  91. if (storePlatform.platformCode != "DYLK") return RetResult.<InvokeCallResult> errorT().retinfo("同步配送信息失败:订单来源平台有误")
  92. //抖音来客
  93. def postBody = [
  94. order_id : esOrder.incomePlatformOrderCode,
  95. behavior : invokeOrder["behavior"] as int,
  96. three_source : invokeOrder["three_source"] as int,
  97. accept_time : invokeOrder["accept_time"] as int,
  98. rider_flow_time : invokeOrder["rider_flow_time"] as int,
  99. rider_lat : invokeOrder["rider_lat"] as double,
  100. rider_lng : invokeOrder["rider_lng"] as double,
  101. rider_name : invokeOrder["rider_name"] as String,
  102. rider_phone : invokeOrder["rider_phone"] as String,
  103. rider_phone_type : invokeOrder["rider_phone_type"] as int,
  104. three_delivery_id: invokeOrder["three_delivery_id"] as String
  105. ]
  106. String responseStr = douyinService.postInvoker("/goodlife/v1/fulfilment/distribution/order/sync_status/", jsonConvert.convertTo(postBody))
  107. def response = jsonSlurper.parseText(responseStr)
  108. if (response["extra"]["error_code"] as Integer == 0) {
  109. return RetResult.<InvokeCallResult> successT()
  110. } else {
  111. //todo 抖音侧调用失败,怎么处理?
  112. logger.error("[抖音来客]回传配送信息接口调用失败:" + response["extra"]["description"] as String)
  113. return RetResult.<InvokeCallResult> errorT().retinfo("[抖音来客]回传配送信息接口调用失败:" + response["extra"]["description"] as String)
  114. }
  115. }
  116. }