SplitServiceImpl.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. package com.poteviohealth.ym.ipos.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.alibaba.fastjson.TypeReference;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.google.common.collect.Lists;
  7. import com.poteviohealth.cgp.common.model.VaultsResponse;
  8. import com.poteviohealth.ym.ipos.model.back.BaseBack;
  9. import com.poteviohealth.ym.ipos.model.payment.PayRefundQuery;
  10. import com.poteviohealth.ym.ipos.model.split.*;
  11. import com.poteviohealth.ym.ipos.model.split.back.AccountBalanceBack;
  12. import com.poteviohealth.ym.ipos.model.split.back.PayConfirmBack;
  13. import com.poteviohealth.ym.ipos.model.split.back.PayConfirmQueryBack;
  14. import com.poteviohealth.ym.ipos.model.split.back.SettlementQueryBack;
  15. import com.poteviohealth.ym.ipos.model.split.detail.*;
  16. import com.poteviohealth.ym.ipos.service.ISplitRecordsDetailService;
  17. import com.poteviohealth.ym.ipos.service.ISplitRecordsService;
  18. import com.poteviohealth.ym.ipos.service.ISplitService;
  19. import com.poteviohealth.ym.ipos.utils.YmUtil;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.stereotype.Service;
  22. import javax.annotation.Resource;
  23. import java.util.List;
  24. import java.util.stream.Collectors;
  25. /**
  26. * 分账
  27. * @author Qin
  28. */
  29. @Service
  30. public class SplitServiceImpl implements ISplitService {
  31. @Value("${pay.field.code}")
  32. private String code;
  33. @Resource
  34. private ISplitRecordsService splitRecordsService;
  35. @Resource
  36. private ISplitRecordsDetailService splitRecordsDetailService;
  37. @Override
  38. public VaultsResponse delayConfirm(SplitRecords records, List<SplitRecordsDetail> details) {
  39. PayConfirm payConfirm = new PayConfirm();
  40. payConfirm.setPos_id(code);
  41. payConfirm.setPos_seq(records.getSplitId().toString());
  42. payConfirm.setStore_id(records.getOperatorId().toString());
  43. PayConfirmDetail detail = new PayConfirmDetail();
  44. detail.setOrg_pos_seq(records.getPayId().toString());
  45. ExtendParamsConfirm extendParamsConfirm = new ExtendParamsConfirm();
  46. SplitInfoConfirm splitInfoConfirm = new SplitInfoConfirm();
  47. List<SplitListConfirm> list = Lists.newArrayList();
  48. String amt = "";
  49. for (SplitRecordsDetail recordsDetail : details) {
  50. if(recordsDetail.getSourceId().equals(0)){
  51. amt = recordsDetail.getDivAmt();
  52. continue;
  53. }
  54. SplitListConfirm slc = new SplitListConfirm();
  55. slc.setMerchant_id(recordsDetail.getMerchantId());
  56. slc.setDiv_amt(recordsDetail.getDivAmt());
  57. list.add(slc);
  58. }
  59. splitInfoConfirm.setKeep_amt(amt);
  60. splitInfoConfirm.setSplit_list(list);
  61. extendParamsConfirm.setSplit_info(splitInfoConfirm);
  62. detail.setExtend_params(extendParamsConfirm);
  63. payConfirm.setDelay_confirm_request(detail);
  64. PayConfirmBack back = null;
  65. try {
  66. back = (PayConfirmBack) YmUtil.resultBack(payConfirm,new PayConfirmBack());
  67. } catch (IllegalAccessException e) {
  68. e.printStackTrace();
  69. return VaultsResponse.failed(e.getMessage());
  70. }
  71. if(YmUtil.SUCCESS.equals(back.getResult().getId()) || YmUtil.FAIL.equals(back.getResult().getId())){
  72. return VaultsResponse.success(back.getResult().getId());
  73. }
  74. return VaultsResponse.failed(back.getResult().getComment());
  75. }
  76. @Override
  77. public VaultsResponse delayConfirmQuery(String splitId,String operatorId) {
  78. PayConfirmQuery paymentQuery = new PayConfirmQuery();
  79. paymentQuery.setPos_id(code);
  80. paymentQuery.setStore_id(operatorId);
  81. DelayConfirmQueryRequest detail = new DelayConfirmQueryRequest();
  82. detail.setOrg_pos_seq(splitId);
  83. paymentQuery.setDelay_confirmquery_request(detail);
  84. PayConfirmQueryBack back = null;
  85. try {
  86. back = (PayConfirmQueryBack) YmUtil.resultBack(paymentQuery,new PayConfirmQueryBack());
  87. } catch (IllegalAccessException e) {
  88. e.printStackTrace();
  89. return VaultsResponse.failed(e.getMessage());
  90. }
  91. if(YmUtil.SUCCESS.equals(back.getResult().getId())){
  92. return VaultsResponse.success(back.getRefund_status());
  93. }
  94. return VaultsResponse.failed(back.getResult().getComment());
  95. }
  96. @Override
  97. public VaultsResponse delayConfirmRefund(Long splitId) {
  98. QueryWrapper queryWrapper = new QueryWrapper<>();
  99. queryWrapper.eq("split_id",splitId);
  100. SplitRecords splitRecords = splitRecordsService.getOne(queryWrapper);
  101. List<SplitRecordsDetail> list = splitRecordsDetailService.list(queryWrapper);
  102. PayConfirmRefund payConfirmRefund = new PayConfirmRefund();
  103. payConfirmRefund.setPos_id(code);
  104. payConfirmRefund.setStore_id(splitRecords.getOperatorId().toString());
  105. PayConfirmDetail detail = new PayConfirmDetail();
  106. detail.setOrg_pos_seq(splitId.toString());
  107. ExtendParamsConfirm extendParamsConfirm = new ExtendParamsConfirm();
  108. SplitInfoConfirm splitInfoConfirm = new SplitInfoConfirm();
  109. List<SplitListConfirm> split_list = Lists.newArrayList();
  110. for (SplitRecordsDetail recordsDetail : list) {
  111. if(recordsDetail.getSourceId().equals(0)){
  112. splitInfoConfirm.setKeep_amt(recordsDetail.getDivAmt());
  113. }else{
  114. SplitListConfirm listConfirm = new SplitListConfirm();
  115. listConfirm.setMerchant_id(recordsDetail.getMerchantId());
  116. listConfirm.setDiv_amt(recordsDetail.getDivAmt());
  117. split_list.add(listConfirm);
  118. }
  119. }
  120. splitInfoConfirm.setSplit_list(split_list);
  121. extendParamsConfirm.setSplit_info(splitInfoConfirm);
  122. detail.setExtend_params(extendParamsConfirm);
  123. payConfirmRefund.setDelay_confirmrefund_request(detail);
  124. BaseBack back = null;
  125. try {
  126. back = (BaseBack) YmUtil.resultBack(payConfirmRefund,new BaseBack());
  127. } catch (IllegalAccessException e) {
  128. e.printStackTrace();
  129. return VaultsResponse.failed(e.getMessage());
  130. }
  131. if(YmUtil.SUCCESS.equals(back.getResult().getId())){
  132. return VaultsResponse.success();
  133. }
  134. return VaultsResponse.failed(back.getResult().getComment());
  135. }
  136. @Override
  137. public BaseBack delayRefundQuery(PayRefundQuery payRefundQuery) {
  138. return null;
  139. }
  140. @Override
  141. public VaultsResponse<SettlementQueryBack> merchantSettlementQuery(SettlementQueryDetail detail) {
  142. SettlementQuery settlementQuery = new SettlementQuery();
  143. settlementQuery.setMerchant_settlementquery_request(detail);
  144. SettlementQueryBack back = null;
  145. try {
  146. String val = (String) YmUtil.resultBack(settlementQuery,new SettlementQueryBack());
  147. JSONObject jsonObject = new JSONObject(JSON.parseObject(val));
  148. if(val.contains("list")){
  149. List<SettlementQueryList> list = jsonObject.getJSONArray("list").stream().map(item -> JSON.parseObject(item.toString(), new TypeReference<SettlementQueryList>() {})).collect(Collectors.toList());
  150. jsonObject.put("list",list);
  151. }
  152. back = JSONObject.toJavaObject(jsonObject, SettlementQueryBack.class);
  153. } catch (IllegalAccessException e) {
  154. e.printStackTrace();
  155. return VaultsResponse.failed(e.getMessage());
  156. }
  157. if(YmUtil.SUCCESS.equals(back.getResult().getId())){
  158. return VaultsResponse.success(back);
  159. }
  160. return VaultsResponse.failed(back.getResult().getComment());
  161. }
  162. @Override
  163. public VaultsResponse<AccountBalanceBack> accountBalanceQuery(String merchantId) {
  164. AccountBalance accountBalance = new AccountBalance();
  165. accountBalance.setMerchant_id(merchantId);
  166. AccountBalanceBack back = null;
  167. try {
  168. String val = (String) YmUtil.resultBack(accountBalance,new AccountBalanceBack());
  169. JSONObject jsonObject = new JSONObject(JSON.parseObject(val));
  170. if(val.contains("list")){
  171. List<AccountBalanceList> list = jsonObject.getJSONArray("list").stream().map(item -> JSON.parseObject(item.toString(), new TypeReference<AccountBalanceList>() {})).collect(Collectors.toList());
  172. jsonObject.put("list",list);
  173. }
  174. back = JSONObject.toJavaObject(jsonObject, AccountBalanceBack.class);
  175. } catch (IllegalAccessException e) {
  176. e.printStackTrace();
  177. return VaultsResponse.failed(e.getMessage());
  178. }
  179. if(YmUtil.SUCCESS.equals(back.getResult().getId())){
  180. return VaultsResponse.success(back);
  181. }
  182. return VaultsResponse.failed(back.getResult().getComment());
  183. }
  184. }