import com.dySweetFishPlugin.elasticsearch.ESClient import com.sweetfish.convert.json.JsonConvert import com.sweetfish.service.RetResult import com.yinjie.heating.common.api.BusinessExecutor import com.yinjie.heating.common.api.NoSqlKeysService import com.yinjie.heating.common.datas.ERPModule import com.yinjie.heating.common.datas.ESKeys import com.yinjie.heating.common.datas.HeatingAppInvokerCode import com.yinjie.heating.common.entity.base.ProcessMapItem import com.yinjie.heating.common.entity.callthird.BaseResponse import com.yinjie.heating.common.entity.heating.HeatingApp import com.yinjie.heating.common.entity.heating.HeatingAppInvoker import com.yinjie.heating.common.entity.heating.PayRequestRecord import com.yinjie.heating.common.http.HttpTools import com.yinjie.heating.common.tool.CommonUtils import com.yinjie.heating.common.tool.PaySignatureUtil import org.apache.commons.lang3.StringUtils import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.Logger import org.elasticsearch.common.xcontent.XContentType import org.rex.RMap import javax.annotation.Resource import java.time.LocalDateTime import java.util.concurrent.TimeUnit class BE_Call_RequestPay implements BusinessExecutor { private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName()) @Resource private JsonConvert jsonConvert @Resource private ESClient esClient @Resource private NoSqlKeysService keysService @Override String scriptName() { return "调用外部热力服务商接口-请求销账" } @Override ERPModule module() { return ERPModule.CALL_THIRD } RetResult execute(ProcessMapItem source) { long currentTime = LocalDateTime.now().toDate().time RMap params = source.itemData String dataSourceId = source.dataSourceId long supplierCode = source.supplierCode String billKey = params.getString("billKey") HeatingApp app = params.get("app") as HeatingApp String payDate = params.getString("payDate") String bankBillNo = params.getString("bankBillNo") String payAmount = params.getString("payAmount") //接口均返回正确,错误放在result里 if (StringUtils.isBlank(billKey) || app == null) { logger.error("传入参数不正确") return RetResult. successT().result(new BaseResponse.Builder() .respCode("DEF0006") .respMsg("系统错误") .build()) } //此处需要将请求记录下来 PayRequestRecord requestRecord = new PayRequestRecord() requestRecord.with { it.appId = app.appId it.billKey = billKey it.bankBillNo = bankBillNo it.payDate = payDate it.payAmount = payAmount } PayRequestRecord.create(requestRecord, 999L) //暂时写入es,由定时线程统一将前一天的记录存成文件,并删除缓存 esClient.getClient() .prepareIndex(keysService.getESKey(ESKeys.ES_ERP_PAY_REQUEST_RECORD_INDEX, supplierCode), ESKeys.ES_ERP_PAY_REQUEST_RECORD_TYPE) .setSource(jsonConvert.convertTo(requestRecord), XContentType.JSON) .get() Map header = new HashMap<>() header.put("Content-Type", "application/json") Map body = [ appId : app.appId, billKey : billKey, payDate : payDate, bankBillNo: bankBillNo, payAmount : CommonUtils.money100(new BigDecimal(payAmount)) as String, nonceStr : UUID.randomUUID().toString().replace("-", ""), timeStamp : currentTime as String ] //签名 String sign = PaySignatureUtil.generateSign(body, "RSA_1_256", app.appPrivateKey) body.put("sign", sign) HeatingAppInvoker invoker = app.invokerList.find { it.invokerCode == HeatingAppInvokerCode.requestPay.code } if (invoker == null) { logger.error(app.appName + "未配置[请求销账]接口") return RetResult. successT().result(new BaseResponse.Builder() .respCode("DEF0006") .respMsg("系统错误") .build()) } try { logger.info("[请求销账]请求信息:" + jsonConvert.convertTo(body)) String resp = HttpTools.postHttpContentAsync(invoker.invokerUrl, header, jsonConvert.convertTo(body)).get(20, TimeUnit.SECONDS) logger.info("[请求销账]商户返回信息:" + resp) BaseResponse response = jsonConvert.convertFrom(BaseResponse.class, resp) return RetResult. successT().result(response) } catch (Exception e) { logger.error(app.appName + "请求[请求销账]接口失败:" + e.message) return RetResult. successT().result(new BaseResponse.Builder() .respCode("DEF0006") .respMsg("系统错误") .build()) } } }