BE_Token_RefreshAccessToken_DYLK.groovy 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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.IncomePlatformService
  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.flycat.BusinessOrderStatus
  10. import com.dderp.common.datas.ERPModule
  11. import com.dderp.common.datas.ESKeys
  12. import com.dderp.common.datas.flycat.PlatformType
  13. import com.dderp.common.entity.base.InvokeCallParams
  14. import com.dderp.common.entity.base.InvokeCallResult
  15. import com.dderp.common.entity.base.ProcessStringItem
  16. import com.dderp.common.entity.base.ScriptMapResult
  17. import com.dderp.common.entity.base.ScriptStringResult
  18. import com.dderp.common.entity.order.*
  19. import com.dderp.common.entity.site.ERPTokenUser
  20. import com.dderp.common.entity.store.StorePlatform
  21. import com.dderp.common.http.HttpTools
  22. import com.dySweetFishPlugin.elasticsearch.ESClient
  23. import com.dySweetFishPlugin.sql.TableIdService
  24. import com.dySweetFishPlugin.sql.dao.TunaService
  25. import com.sweetfish.convert.json.JsonConvert
  26. import com.sweetfish.service.RetResult
  27. import groovy.json.JsonSlurper
  28. import org.apache.logging.log4j.LogManager
  29. import org.apache.logging.log4j.Logger
  30. import org.elasticsearch.action.bulk.BulkRequestBuilder
  31. import org.elasticsearch.action.bulk.BulkResponse
  32. import org.elasticsearch.action.index.IndexRequestBuilder
  33. import org.elasticsearch.action.support.WriteRequest
  34. import org.elasticsearch.action.update.UpdateRequestBuilder
  35. import org.elasticsearch.common.xcontent.XContentType
  36. import org.rex.RMap
  37. import javax.annotation.Resource
  38. import java.nio.charset.StandardCharsets
  39. import java.time.LocalDateTime
  40. import java.time.ZoneOffset
  41. import java.util.concurrent.ExecutionException
  42. import java.util.concurrent.TimeUnit
  43. import java.util.concurrent.TimeoutException
  44. import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder
  45. @SuppressWarnings("unused")
  46. class BE_Token_RefreshAccessToken_DYLK implements BusinessExecutor<ProcessStringItem, ScriptMapResult> {
  47. private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  48. private Map<String, String> platPropertiesMap = new HashMap<>()
  49. @Resource(name = "APP_HOME")
  50. String homePath;
  51. @Resource
  52. JsonConvert jsonConvert
  53. @Override
  54. String scriptName() {
  55. return "[抖音来客]刷新Access-Token"
  56. }
  57. @Override
  58. ERPModule module() {
  59. return ERPModule.PLATFORM_TOKEN
  60. }
  61. @Override
  62. RetResult<ProcessStringItem> beforeExecute(ProcessStringItem source) {
  63. //取到该平台的properties
  64. //这地方严格来说是有问题的,supplierCode的区分没有加进去,做得好的话应该是properties文件用supplierCode区分开
  65. //各平台默认需要以下几个参数
  66. //appId
  67. //appSecret
  68. //reqUrl 接口请求地址
  69. //storeBindUrl 生成门店绑定url时候的请求地址
  70. final File df = new File(homePath, "conf/" + "platform.properties");
  71. if (df.isFile()) {
  72. try {
  73. Properties ps = new Properties();
  74. InputStream ins = new FileInputStream(df);
  75. ps.load(new InputStreamReader(ins, StandardCharsets.UTF_8));
  76. ins.close();
  77. ps.forEach((x, y) ->
  78. platPropertiesMap.putIfAbsent((String) x, (String) y)
  79. );
  80. } catch (IOException e) {
  81. logger.error(e.getMessage(), e);
  82. }
  83. }
  84. return super.beforeExecute(source)
  85. }
  86. RetResult<ScriptMapResult> execute(ProcessStringItem source) {
  87. //秒级时间戳,groovy里面不让用system
  88. long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
  89. String dataSourceId = source.dataSourceId
  90. long supplierCode = source.supplierCode
  91. ERPTokenUser currentUser = source.currentUser
  92. def tokenRequest = [
  93. client_key : platPropertiesMap.get("appId"),
  94. client_secret: platPropertiesMap.get("appSecret"),
  95. grant_type : "client_credential"
  96. ]
  97. Map<String, String> header = new HashMap<>();
  98. header.put("Content-Type", "application/json");
  99. try {
  100. String responseStr = HttpTools.postHttpContentAsync(platPropertiesMap.get("reqUrl") + "/oauth/client_token/", header,
  101. jsonConvert.convertTo(tokenRequest)).get(5, TimeUnit.SECONDS);
  102. def jsonSlurper = new JsonSlurper()
  103. def invokeResp = jsonSlurper.parseText(responseStr)
  104. if (invokeResp["data"]["error_code"] as int == 0) {
  105. String accessToken = invokeResp["data"]["access_token"] as String
  106. RMap<String, String> resultMap = new RMap<>()
  107. resultMap.set("accessToken", accessToken)
  108. resultMap.set("appId", platPropertiesMap.get("appId"))
  109. resultMap.set("appSecret", platPropertiesMap.get("appSecret"))
  110. ScriptMapResult mapResult = new ScriptMapResult()
  111. mapResult.setResultMap(resultMap)
  112. return RetResult.<ScriptMapResult> successT().result(mapResult)
  113. }
  114. } catch (InterruptedException | ExecutionException | TimeoutException e) {
  115. logger.error(e.getMessage(), e);
  116. }
  117. return RetResult.errorT();
  118. }
  119. }