SplitServiceImpl.java 10 KB

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