NotifyCallback.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. package com.ym.mec.biz.service;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.huifu.adapay.Adapay;
  5. import com.huifu.adapay.notify.MQTTCallbackHandler;
  6. import com.ym.mec.biz.dal.dao.HfMemberDao;
  7. import com.ym.mec.biz.dal.dao.SysConfigDao;
  8. import com.ym.mec.biz.dal.entity.HfMember;
  9. import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
  10. import com.ym.mec.biz.dal.entity.TenantPaymentOrder;
  11. import com.ym.mec.biz.dal.enums.DealStatusEnum;
  12. import com.ym.mec.thirdparty.adapay.ConfigInit;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.stereotype.Service;
  16. import javax.annotation.PostConstruct;
  17. import java.math.BigDecimal;
  18. import java.util.HashMap;
  19. import java.util.Map;
  20. @Service
  21. public class NotifyCallback implements MQTTCallbackHandler {
  22. @Autowired
  23. private StudentPaymentOrderService studentPaymentOrderService;
  24. @Autowired
  25. private TenantPaymentOrderService tenantPaymentOrderService;
  26. @Autowired
  27. private HfMemberDao hfMemberDao;
  28. private static NotifyCallback notifyCallback;
  29. @Value("${spring.profiles.active}")
  30. private String profiles;
  31. @Value("${spring.application.name}")
  32. private String appName;
  33. @PostConstruct
  34. public void init() {
  35. notifyCallback = this;
  36. if (!profiles.equals("prod") && !appName.equals("student-server")) {
  37. Adapay.debug = true;
  38. /**
  39. * prodMode 模式,默认为生产模式,false可以使用mock模式
  40. */
  41. Adapay.prodMode = false;
  42. }
  43. Adapay.setDeviceID(appName);
  44. }
  45. /**
  46. * 用户接收并处理支付成功的异步消息
  47. *
  48. * @param payment 成功的支付对象
  49. * @throws Exception 异常
  50. */
  51. @Override
  52. public void paymentSuccessMessageArrived(String payment) throws Exception {
  53. boolean prodMode = Adapay.prodMode;
  54. System.out.println(String.format("receive paymentSuccess msg=%s", prodMode));
  55. System.out.println(String.format("receive paymentSuccess msg=%s", payment));
  56. JSONObject dataObj = JSON.parseObject(payment);
  57. if (!dataObj.getString("app_id").equals(ConfigInit.appId)) {
  58. return;
  59. }
  60. String orderNo = dataObj.getString("order_no");
  61. StudentPaymentOrder studentPaymentOrder = notifyCallback.studentPaymentOrderService.findOrderByOrderNo(orderNo);
  62. if (studentPaymentOrder != null) {
  63. Map<String, String> notifyMap = new HashMap<>();
  64. notifyMap.put("channelType", dataObj.getString("pay_channel"));
  65. notifyMap.put("tradeState", "1");
  66. notifyMap.put("totalMoney", dataObj.getString("pay_amt"));
  67. notifyMap.put("merOrderNo", dataObj.getString("order_no"));
  68. notifyCallback.studentPaymentOrderService.updateOrder(notifyMap);
  69. return;
  70. }
  71. TenantPaymentOrder tenantPaymentOrder = notifyCallback.tenantPaymentOrderService.queryByOrderNo(orderNo);
  72. if (tenantPaymentOrder != null) {
  73. tenantPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
  74. tenantPaymentOrder.setPaymentBusinessChannel(dataObj.getString("pay_channel"));
  75. tenantPaymentOrder.setActualAmount(new BigDecimal(dataObj.getString("pay_amt")));
  76. notifyCallback.tenantPaymentOrderService.paymentForCallback(tenantPaymentOrder);
  77. }
  78. }
  79. /**
  80. * 用户接收并处理支付失败的异步消息
  81. *
  82. * @param payment 失败的支付对象
  83. * @throws Exception 异常
  84. */
  85. @Override
  86. public void paymentFailedMessageArrived(String payment) throws Exception {
  87. System.out.println(String.format("receive paymentFailed msg=%s", payment));
  88. JSONObject dataObj = JSON.parseObject(payment);
  89. if (!dataObj.getString("app_id").equals(ConfigInit.appId)) {
  90. return;
  91. }
  92. String orderNo = dataObj.getString("order_no");
  93. StudentPaymentOrder studentPaymentOrder = notifyCallback.studentPaymentOrderService.findOrderByOrderNo(orderNo);
  94. if (studentPaymentOrder != null) {
  95. Map<String, String> notifyMap = new HashMap<>();
  96. notifyMap.put("channelType", dataObj.getString("pay_channel"));
  97. notifyMap.put("tradeState", "0");
  98. notifyMap.put("totalMoney", dataObj.getString("pay_amt"));
  99. notifyMap.put("merOrderNo", dataObj.getString("order_no"));
  100. notifyMap.put("remarks", dataObj.getString("error_msg"));
  101. notifyCallback.studentPaymentOrderService.updateOrder(notifyMap);
  102. return;
  103. }
  104. TenantPaymentOrder tenantPaymentOrder = notifyCallback.tenantPaymentOrderService.queryByOrderNo(orderNo);
  105. if (tenantPaymentOrder != null) {
  106. tenantPaymentOrder.setStatus(DealStatusEnum.FAILED);
  107. tenantPaymentOrder.setPaymentBusinessChannel(dataObj.getString("pay_channel"));
  108. notifyCallback.tenantPaymentOrderService.paymentForCallback(tenantPaymentOrder);
  109. }
  110. }
  111. /**
  112. * 用户接收并处理关闭支付交易成功的异步消息
  113. *
  114. * @param payment 关闭成功的支付对象
  115. * @throws Exception 异常
  116. */
  117. @Override
  118. public void paymentCloseSuccessMessageArrived(String payment) throws Exception {
  119. System.out.println(String.format("receive paymentCloseSuccess msg=%s", payment));
  120. JSONObject dataObj = JSON.parseObject(payment);
  121. if (!dataObj.getString("app_id").equals(ConfigInit.appId)) {
  122. return;
  123. }
  124. String orderNo = dataObj.getString("order_no");
  125. StudentPaymentOrder studentPaymentOrder = notifyCallback.studentPaymentOrderService.findOrderByOrderNo(orderNo);
  126. if (studentPaymentOrder != null) {
  127. Map<String, String> notifyMap = new HashMap<>();
  128. notifyMap.put("channelType", dataObj.getString("pay_channel"));
  129. notifyMap.put("tradeState", "0");
  130. notifyMap.put("totalMoney", dataObj.getString("pay_amt"));
  131. notifyMap.put("merOrderNo", dataObj.getString("order_no"));
  132. notifyMap.put("remarks", dataObj.getString("error_msg"));
  133. notifyCallback.studentPaymentOrderService.updateOrder(notifyMap);
  134. return;
  135. }
  136. TenantPaymentOrder tenantPaymentOrder = notifyCallback.tenantPaymentOrderService.queryByOrderNo(orderNo);
  137. if (tenantPaymentOrder != null) {
  138. tenantPaymentOrder.setStatus(DealStatusEnum.FAILED);
  139. tenantPaymentOrder.setPaymentBusinessChannel(dataObj.getString("pay_channel"));
  140. tenantPaymentOrderService.paymentForCallback(tenantPaymentOrder);
  141. }
  142. }
  143. /**
  144. * 用户接收并处理关闭支付交易失败的异步消息
  145. *
  146. * @param payment 关闭失败的支付对象
  147. * @throws Exception 异常
  148. */
  149. @Override
  150. public void paymentCloseFailedMessageArrived(String payment) throws Exception {
  151. System.out.println(String.format("receive paymentCloseFailed msg=%s", payment));
  152. }
  153. @Override
  154. public void paymentReverseFailedMessageArrived(String payment) throws Exception {
  155. System.out.println(String.format("receive payment ReverseFailed msg=%s", payment));
  156. }
  157. @Override
  158. public void paymentReverseSuccessMessageArrived(String payment) throws Exception {
  159. System.out.println(String.format("receive payment ReverseSuccess msg=%s", payment));
  160. }
  161. /**
  162. * 用户接收并处理退款成功的异步消息
  163. *
  164. * @param refund 成功的退款对象
  165. * @throws Exception 异常
  166. */
  167. @Override
  168. public void refundSuccessMessageArrived(String refund) throws Exception {
  169. System.out.println(String.format("receive refundSuccess msg=%s", refund));
  170. }
  171. /**
  172. * 用户接收并处理退款失败的异步消息
  173. *
  174. * @param refund 失败的退款对象
  175. * @throws Exception 异常
  176. */
  177. @Override
  178. public void refundFailedMessageArrived(String refund) throws Exception {
  179. System.out.println(String.format("receive refundFailed msg=%s", refund));
  180. }
  181. @Override
  182. public void corpMemberSuccessMessageArrived(String corpMember) throws Exception {
  183. System.out.println(String.format("receive corpMember msg=%s", corpMember));
  184. JSONObject corpMemberObj = JSON.parseObject(corpMember);
  185. if (!corpMemberObj.getString("app_id").equals(ConfigInit.appId)) {
  186. return;
  187. }
  188. String memberId = corpMemberObj.getString("member_id");
  189. HfMember hfMember = notifyCallback.hfMemberDao.getByMemberId(memberId);
  190. if (hfMember == null || !hfMember.getStatus().equals("pending")) {
  191. return;
  192. }
  193. hfMember.setStatus("succeeded");
  194. hfMember.setMemo(corpMemberObj.getString("audit_desc"));
  195. if (corpMemberObj.containsKey("audit_state") && corpMemberObj.getString("audit_state").equals("E")) {
  196. JSONObject accounts = JSON.parseObject(corpMemberObj.get("settle_accounts").toString());
  197. hfMember.setSettleAccountId(accounts.getString("id"));
  198. }
  199. notifyCallback.hfMemberDao.update(hfMember);
  200. }
  201. @Override
  202. public void corpMemberFailedMessageArrived(String corpMember) throws Exception {
  203. System.out.println(String.format("receive corpMember msg=%s", corpMember));
  204. JSONObject corpMemberObj = JSON.parseObject(corpMember);
  205. if (!corpMemberObj.getString("app_id").equals(ConfigInit.appId)) {
  206. return;
  207. }
  208. String memberId = corpMemberObj.getString("member_id");
  209. HfMember hfMember = notifyCallback.hfMemberDao.getByMemberId(memberId);
  210. if (hfMember == null || !hfMember.getStatus().equals("pending")) {
  211. return;
  212. }
  213. hfMember.setStatus("failed");
  214. hfMember.setMemo(corpMemberObj.getString("audit_desc"));
  215. notifyCallback.hfMemberDao.update(hfMember);
  216. }
  217. @Override
  218. public void unknowMessageArrived(String message) throws Exception {
  219. System.out.println(String.format("receive unknow msg=%s", message));
  220. }
  221. @Override
  222. public void drawCashFailedMessageArrived(String drawCash) throws Exception {
  223. System.out.println(String.format("receive unknow msg=%s", drawCash));
  224. }
  225. @Override
  226. public void drawCashSuccessedMessageArrived(String drawCash) throws Exception {
  227. System.out.println(String.format("receive unknow msg=%s", drawCash));
  228. }
  229. @Override
  230. public void pagePaymentFailedMessageArrived(String arg0) throws Exception {
  231. // TODO Auto-generated method stub
  232. }
  233. @Override
  234. public void pagePaymentSuccessedMessageArrived(String arg0) throws Exception {
  235. // TODO Auto-generated method stub
  236. }
  237. @Override
  238. public void connectionLost(String message) throws Exception {
  239. // TODO Auto-generated method stub
  240. System.out.println("mqtt...........lost.............");
  241. }
  242. @Override
  243. public void connectSuccess() throws Exception {
  244. System.out.println("mqtt...........connect.............");
  245. }
  246. }