import com.dderp.common.api.BusinessExecutor import com.dderp.common.datas.ERPModule import com.dderp.common.entity.base.ProcessStringItem import com.dderp.common.entity.base.ScriptMapResult import com.dderp.common.entity.site.ERPTokenUser import com.dderp.common.http.HttpTools import com.sweetfish.convert.json.JsonConvert import com.sweetfish.service.RetResult import groovy.json.JsonSlurper import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.Logger import org.rex.RMap import javax.annotation.Resource import java.nio.charset.StandardCharsets import java.time.LocalDateTime import java.time.ZoneOffset import java.util.concurrent.ExecutionException import java.util.concurrent.TimeUnit import java.util.concurrent.TimeoutException @SuppressWarnings("unused") class BE_Token_RefreshAccessToken_DYLK implements BusinessExecutor { private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName()) private Map platPropertiesMap = new HashMap<>() @Resource(name = "APP_HOME") String homePath; @Resource JsonConvert jsonConvert @Override String scriptName() { return "[抖音来客]刷新Access-Token" } @Override ERPModule module() { return ERPModule.PLATFORM_TOKEN } @Override void start(long supplierCode) { //取到该平台的properties //这地方严格来说是有问题的,supplierCode的区分没有加进去,做得好的话应该是properties文件用supplierCode区分开 //各平台默认需要以下几个参数 //appId //appSecret //reqUrl 接口请求地址 //storeBindUrl 生成门店绑定url时候的请求地址 final File df = new File(homePath, "/conf/platformProperty/DYLK.properties"); if (df.isFile()) { try { Properties ps = new Properties(); InputStream ins = new FileInputStream(df); ps.load(new InputStreamReader(ins, StandardCharsets.UTF_8)); ins.close(); ps.forEach((x, y) -> platPropertiesMap.putIfAbsent((String) x, (String) y) ); } catch (IOException e) { logger.error(e.getMessage(), e); } } } RetResult execute(ProcessStringItem source) { //秒级时间戳,groovy里面不让用system long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)) String dataSourceId = source.dataSourceId long supplierCode = source.supplierCode ERPTokenUser currentUser = source.currentUser def tokenRequest = [ client_key : platPropertiesMap.get("appId"), client_secret: platPropertiesMap.get("appSecret"), grant_type : "client_credential" ] Map header = new HashMap<>(); header.put("Content-Type", "application/json"); try { String responseStr = HttpTools.postHttpContentAsync(platPropertiesMap.get("reqUrl") + "/oauth/client_token/", header, jsonConvert.convertTo(tokenRequest)).get(5, TimeUnit.SECONDS); def jsonSlurper = new JsonSlurper() def invokeResp = jsonSlurper.parseText(responseStr) if (invokeResp["data"]["error_code"] as int == 0) { String accessToken = invokeResp["data"]["access_token"] as String RMap resultMap = new RMap<>() resultMap.set("accessToken", accessToken) resultMap.set("appId", platPropertiesMap.get("appId")) resultMap.set("appSecret", platPropertiesMap.get("appSecret")) ScriptMapResult mapResult = new ScriptMapResult() mapResult.setResultMap(resultMap) return RetResult. successT().result(mapResult) } } catch (InterruptedException | ExecutionException | TimeoutException e) { logger.error(e.getMessage(), e); } return RetResult.errorT(); } }