import com.alibaba.fastjson2.JSON import com.alibaba.fastjson2.JSONWriter import com.dderp.common.api.BusinessExecutor import com.dderp.common.datas.ERPModule import com.dderp.common.entity.base.ProcessStringItem import com.dderp.common.entity.express.SFCreateOrderResult import com.dderp.common.entity.express.SFOrder import com.dderp.common.entity.express.SFOrderDetail import com.dderp.common.entity.express.SFOrderProductDetail import com.dderp.common.entity.express.SFOrderReceive 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 javax.annotation.Resource import java.nio.charset.StandardCharsets import java.time.LocalDateTime import java.time.ZoneOffset import java.util.concurrent.CompletableFuture import java.util.concurrent.ExecutionException import java.util.concurrent.TimeUnit import java.util.concurrent.TimeoutException @SuppressWarnings("unused") class BE_Express_CreateOrder_SFTC implements BusinessExecutor { private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName()) @Resource(name = "property.sftc.appId") long sfAppId @Resource(name = "property.sftc.appKey") String sfAppKey @Resource(name = "property.sftc.apiUrl") String sfApiUrl @Resource JsonConvert jsonConvert @Override String scriptName() { return "顺丰同城创建订单" } @Override ERPModule module() { return ERPModule.EXPRESS_API } RetResult execute(ProcessStringItem source) { //秒级时间戳,groovy里面不让用system long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8)) long testTime = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli() SFOrder sfOrder = new SFOrder( dev_id: sfAppId, shop_id: "3243279847393", shop_type: 1, shop_order_id: "JY" + testTime + "L", order_sequence: "测试", lbs_type: 2, order_time: currentTime, push_time: currentTime, vehicle: 0, four_wheeler_type: 10, rider_pick_method: 1, version: 19, order_detail: new SFOrderDetail( total_price: 30100L, product_type: 6, weight_gram: 3000L, product_num: 15, product_type_num: 5, product_detail: [ new SFOrderProductDetail( product_name: "测试商品1", product_num: 1 ), new SFOrderProductDetail( product_name: "测试商品2", product_num: 3 ), ] ), receive: new SFOrderReceive( user_name: "顺丰同城", user_phone: "18237171439", user_lng: "116.339392", user_lat: "40.002349", user_address: "北京市海淀区学清嘉创大厦A座15层" ) ) String postData = JSON.toJSONString(sfOrder) logger.info("请求数据: " + postData) String sign = ExpressApiSign.sfGenerateOpenSign(postData, sfAppId, sfAppKey) String url = sfApiUrl + "createorder?sign=" + sign CompletableFuture apiResult = HttpTools.postHttpContentAsync(url, 5000, StandardCharsets.UTF_8, postData, ["Content-Type": "application/json;charset=utf-8"]) try { String orderResult = apiResult.get(6000, TimeUnit.SECONDS) def jsonSlurper = new JsonSlurper() def sfOrderJson = jsonSlurper.parseText(orderResult) logger.info(sfOrderJson) SFCreateOrderResult createOrderResult = jsonConvert.convertFromO(SFCreateOrderResult.class, orderResult) logger.info(orderResult) logger.info(jsonConvert.convertTo(createOrderResult)) return RetResult. successT().result( ProcessStringItem.newBuilder() .itemValue("") .build() ) } catch (InterruptedException | ExecutionException | TimeoutException e) { logger.error(e.getMessage(), e) return RetResult. successT().result( ProcessStringItem.newBuilder() .itemValue("") .build() ) } } }