BE_Call_RequestPay.groovy 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import com.dySweetFishPlugin.elasticsearch.ESClient
  2. import com.sweetfish.convert.json.JsonConvert
  3. import com.sweetfish.service.RetResult
  4. import com.yinjie.heating.common.api.BusinessExecutor
  5. import com.yinjie.heating.common.api.NoSqlKeysService
  6. import com.yinjie.heating.common.datas.ERPModule
  7. import com.yinjie.heating.common.datas.ESKeys
  8. import com.yinjie.heating.common.datas.HeatingAppInvokerCode
  9. import com.yinjie.heating.common.entity.base.ProcessMapItem
  10. import com.yinjie.heating.common.entity.callthird.BaseResponse
  11. import com.yinjie.heating.common.entity.callthird.QueryFeeResponse
  12. import com.yinjie.heating.common.entity.heating.HeatingApp
  13. import com.yinjie.heating.common.entity.heating.HeatingAppInvoker
  14. import com.yinjie.heating.common.entity.heating.PayRequestRecord
  15. import com.yinjie.heating.common.http.HttpTools
  16. import com.yinjie.heating.common.tool.CommonUtils
  17. import com.yinjie.heating.common.tool.PaySignatureUtil
  18. import org.apache.commons.lang3.StringUtils
  19. import org.apache.logging.log4j.LogManager
  20. import org.apache.logging.log4j.Logger
  21. import org.elasticsearch.common.xcontent.XContentType
  22. import org.rex.RMap
  23. import javax.annotation.Resource
  24. import java.time.LocalDateTime
  25. import java.util.concurrent.ExecutionException
  26. import java.util.concurrent.TimeUnit
  27. import java.util.concurrent.TimeoutException
  28. class BE_Call_RequestPay implements BusinessExecutor<ProcessMapItem, BaseResponse> {
  29. private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  30. @Resource
  31. private JsonConvert jsonConvert
  32. @Resource
  33. private ESClient esClient
  34. @Resource
  35. private NoSqlKeysService keysService
  36. @Override
  37. String scriptName() {
  38. return "调用外部热力服务商接口-请求销账"
  39. }
  40. @Override
  41. ERPModule module() {
  42. return ERPModule.CALL_THIRD
  43. }
  44. RetResult<BaseResponse> execute(ProcessMapItem source) {
  45. long currentTime = LocalDateTime.now().toDate().time
  46. RMap params = source.itemData
  47. String dataSourceId = source.dataSourceId
  48. long supplierCode = source.supplierCode
  49. String billKey = params.getString("billKey")
  50. HeatingApp app = params.get("app") as HeatingApp
  51. String payDate = params.getString("payDate")
  52. String bankBillNo = params.getString("bankBillNo")
  53. String payAmount = params.getString("payAmount")
  54. //接口均返回正确,错误放在result里
  55. if (StringUtils.isBlank(billKey) || app == null) {
  56. logger.error("传入参数不正确")
  57. return RetResult.<BaseResponse> successT().result(new BaseResponse.Builder()
  58. .respCode("DEF0006")
  59. .respMsg("系统错误")
  60. .build())
  61. }
  62. //此处需要将请求记录下来
  63. PayRequestRecord requestRecord = new PayRequestRecord()
  64. requestRecord.with {
  65. it.appId = app.appId
  66. it.billKey = billKey
  67. it.bankBillNo = bankBillNo
  68. it.payDate = payDate
  69. it.payAmount = payAmount
  70. }
  71. PayRequestRecord.create(requestRecord, 999L)
  72. //暂时写入es,由定时线程统一将前一天的记录存成文件,并删除缓存
  73. esClient.getClient()
  74. .prepareIndex(keysService.getESKey(ESKeys.ES_ERP_PAY_REQUEST_RECORD_INDEX, supplierCode), ESKeys.ES_ERP_PAY_REQUEST_RECORD_TYPE)
  75. .setSource(jsonConvert.convertTo(requestRecord), XContentType.JSON)
  76. .get()
  77. Map<String, String> header = new HashMap<>()
  78. header.put("Content-Type", "application/json")
  79. Map<String, String> body = [
  80. appId : app.appId,
  81. billKey : billKey,
  82. payDate : payDate,
  83. bankBillNo: bankBillNo,
  84. payAmount : CommonUtils.money100(new BigDecimal(payAmount)) as String,
  85. nonceStr : UUID.randomUUID().toString().replace("-", ""),
  86. timeStamp : currentTime as String
  87. ]
  88. //签名
  89. String sign = PaySignatureUtil.generateSign(body, "RSA_1_256", app.appPrivateKey)
  90. body.put("sign", sign)
  91. HeatingAppInvoker invoker = app.invokerList.find { it.invokerCode == HeatingAppInvokerCode.requestPay.code }
  92. if (invoker == null) {
  93. logger.error(app.appName + "未配置[请求销账]接口")
  94. return RetResult.<BaseResponse> successT().result(new BaseResponse.Builder()
  95. .respCode("DEF0006")
  96. .respMsg("系统错误")
  97. .build())
  98. }
  99. try {
  100. String resp = HttpTools.postHttpContentAsync(invoker.invokerUrl, header, jsonConvert.convertTo(body)).get(20, TimeUnit.SECONDS)
  101. BaseResponse response = jsonConvert.convertFrom(resp)
  102. return RetResult.<BaseResponse> successT().result(response)
  103. } catch (InterruptedException | ExecutionException | TimeoutException e) {
  104. logger.error(app.appName + "请求[请求销账]接口失败")
  105. return RetResult.<BaseResponse> successT().result(new BaseResponse.Builder()
  106. .respCode("DEF0006")
  107. .respMsg("系统错误")
  108. .build())
  109. }
  110. }
  111. }