TOrderServiceImpl.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package com.szwl.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.szwl.model.bo.JoinpayConstant;
  4. import com.szwl.model.entity.TOrder;
  5. import com.szwl.mapper.TOrderMapper;
  6. import com.szwl.model.utils.Constant;
  7. import com.szwl.model.utils.HttpClientUtils;
  8. import com.szwl.service.TOrderService;
  9. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.apache.commons.codec.digest.DigestUtils;
  12. import org.apache.http.message.BasicNameValuePair;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import java.io.UnsupportedEncodingException;
  17. import java.math.BigDecimal;
  18. import java.math.RoundingMode;
  19. import java.net.URLDecoder;
  20. import java.text.SimpleDateFormat;
  21. import java.util.*;
  22. /**
  23. * <p>
  24. * 服务实现类
  25. * </p>
  26. *
  27. * @author wuhs
  28. * @since 2022-04-23
  29. */
  30. @Slf4j
  31. @Service
  32. public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> implements TOrderService {
  33. @Autowired
  34. private TOrderMapper tOrderMapper;
  35. @Override
  36. public Double getAreaPrice(Map<String, Object> params) {
  37. return tOrderMapper.getAreaPrice(params);
  38. }
  39. @Override
  40. @Transactional
  41. public synchronized String initSn(Long equipmentId) {
  42. StringBuilder number = new StringBuilder();
  43. if (equipmentId != null) {
  44. Random random = new Random();
  45. /**
  46. * 6位随机
  47. */
  48. for (int i = 0; i < 6; i++) {
  49. number.append(String.valueOf(random.nextInt(10)));
  50. }
  51. /**
  52. * 设备id
  53. */
  54. number.append(equipmentId.toString());
  55. /**
  56. * 日期
  57. */
  58. number.append(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
  59. }
  60. return number.toString();
  61. }
  62. @Override
  63. public Object initRefundSn(Long equipmentId, int refundNumber) {
  64. StringBuilder number = new StringBuilder();
  65. if (equipmentId != null) {
  66. Random random = new Random();
  67. /**
  68. * 6位随机
  69. */
  70. for (int i = 0; i < 6; i++) {
  71. number.append(String.valueOf(random.nextInt(10)));
  72. }
  73. /**
  74. * 设备id
  75. */
  76. number.append(equipmentId.toString());
  77. /**
  78. * 日期
  79. */
  80. number.append(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
  81. /**
  82. * 退款数量
  83. */
  84. number.append(refundNumber);
  85. }
  86. return "r" + number.toString();
  87. }
  88. @Override
  89. public String refund(String sn , Object refundSn , BigDecimal refundAmount , BigDecimal p8_MarketRefAmount , String refundReason , String notifyUrl , String altRefInfo ) {
  90. String url = "https://www.joinpay.com/trade/refund.action";
  91. List<BasicNameValuePair> data = new ArrayList<BasicNameValuePair>();
  92. data.add(new BasicNameValuePair("p1_MerchantNo", JoinpayConstant.mch_no));
  93. data.add(new BasicNameValuePair("p2_OrderNo", sn));
  94. data.add(new BasicNameValuePair("p3_RefundOrderNo", refundSn.toString()));
  95. data.add(new BasicNameValuePair("p4_RefundAmount", refundAmount.setScale(2, RoundingMode.HALF_DOWN).toString()));
  96. data.add(new BasicNameValuePair("p5_RefundReason", refundReason));
  97. data.add(new BasicNameValuePair("p6_NotifyUrl", notifyUrl));
  98. data.add(new BasicNameValuePair("p7_AltRefInfo", altRefInfo==null?null:altRefInfo.toString()));
  99. if(p8_MarketRefAmount!=null){
  100. data.add(new BasicNameValuePair("p8_MarketRefAmount", p8_MarketRefAmount.toString()));
  101. }
  102. // TODO: 2019-04-01 空值不参与签名!!!!!!!!!!!!!!!!!!
  103. String hmac = null;
  104. try {
  105. hmac = createHmacSign(data, JoinpayConstant.key);
  106. } catch (UnsupportedEncodingException e) {
  107. e.printStackTrace();
  108. }
  109. data.add(new BasicNameValuePair("hmac", hmac));
  110. String result = HttpClientUtils.postKeyValue(url, data);
  111. JSONObject resultJson = JSONObject.parseObject(result);
  112. log.info("汇聚返回参数:{}", resultJson);
  113. System.out.println(result);
  114. return resultJson.getString("rc_CodeMsg");
  115. }
  116. /**
  117. * 签名算法sign , hmac 签名
  118. *
  119. * @param data
  120. * @return
  121. */
  122. public static String createHmacSign( List<BasicNameValuePair> data , String key) throws UnsupportedEncodingException {
  123. StringBuffer sb = new StringBuffer();
  124. Iterator<BasicNameValuePair> es = data.iterator();
  125. while (es.hasNext()) {
  126. BasicNameValuePair entry = (BasicNameValuePair) es.next();
  127. String k = (String) entry.getName();
  128. String v = (String) entry.getValue();
  129. if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
  130. sb.append(URLDecoder.decode(String.valueOf(v), "utf-8"));
  131. }
  132. }
  133. sb.append(key);
  134. String sign = DigestUtils.md5Hex(sb.toString());
  135. return sign;
  136. }
  137. }