| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- 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<ProcessMapItem, BaseResponse> {
- 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<BaseResponse> 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.<BaseResponse> 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<String, String> header = new HashMap<>()
- header.put("Content-Type", "application/json")
- Map<String, String> 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.<BaseResponse> successT().result(new BaseResponse.Builder()
- .respCode("DEF0006")
- .respMsg("系统错误")
- .build())
- }
- try {
- String resp = HttpTools.postHttpContentAsync(invoker.invokerUrl, header, jsonConvert.convertTo(body)).get(20, TimeUnit.SECONDS)
- logger.info("[请求销账]商户返回信息:" + resp)
- BaseResponse response = jsonConvert.convertFrom(resp)
- return RetResult.<BaseResponse> successT().result(response)
- } catch (Exception e) {
- logger.error(app.appName + "请求[请求销账]接口失败:" + e.message)
- return RetResult.<BaseResponse> successT().result(new BaseResponse.Builder()
- .respCode("DEF0006")
- .respMsg("系统错误")
- .build())
- }
- }
- }
|