|
|
@@ -2,6 +2,7 @@ package com.fs.huifuPay.sdk.opps.core.utils;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.fs.common.utils.DateUtils;
|
|
|
import com.fs.common.utils.StringUtils;
|
|
|
import com.fs.common.utils.spring.SpringUtils;
|
|
|
import com.fs.company.domain.CompanyDivItem;
|
|
|
@@ -19,17 +20,26 @@ import com.fs.huifuPay.domain.HuiFuCreateOrder;
|
|
|
import com.fs.system.domain.SysConfig;
|
|
|
import com.fs.system.mapper.SysConfigMapper;
|
|
|
import com.google.gson.Gson;
|
|
|
+import com.fs.his.mapper.FsStorePaymentMapper;
|
|
|
+import com.fs.hisStore.domain.FsStorePaymentScrm;
|
|
|
+import com.fs.hisStore.mapper.FsStorePaymentScrmMapper;
|
|
|
+import com.fs.huifuPay.domain.HuiFuConfirmOrder;
|
|
|
+import com.fs.huifuPay.domain.HuiFuCreateOrder;
|
|
|
+import com.fs.huifuPay.domain.HuiFuQueryOrderResult;
|
|
|
+import com.fs.huifuPay.service.HuiFuService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
|
|
|
+@Slf4j
|
|
|
public class HuiFuUtils {
|
|
|
private static ICompanyDivConfigService companyDivConfigService = SpringUtils.getBean(ICompanyDivConfigService.class);
|
|
|
private static ICompanyDivItemService companyDivItemService = SpringUtils.getBean(ICompanyDivItemService.class);
|
|
|
+ private static FsStorePaymentMapper fsStorePaymentMapper = SpringUtils.getBean(FsStorePaymentMapper.class);
|
|
|
+ private static FsStorePaymentScrmMapper fsStorePaymentScrmMapper = SpringUtils.getBean(FsStorePaymentScrmMapper.class);
|
|
|
+ private static HuiFuService huiFuService = SpringUtils.getBean(HuiFuService.class);
|
|
|
|
|
|
/**
|
|
|
* 处理分账
|
|
|
@@ -148,18 +158,25 @@ public class HuiFuUtils {
|
|
|
|
|
|
public static void saveDivItem(HuiFuCreateOrder o, String orderCode, String payCode) {
|
|
|
CompanyDivItem companyDivItem = new CompanyDivItem();
|
|
|
- if (StringUtils.isNotBlank(o.getAcctSplitBunch())){
|
|
|
+ if (StringUtils.isNotBlank(o.getAcctSplitBunch())) {
|
|
|
companyDivItem.setOrderCode(orderCode);
|
|
|
companyDivItem.setPayCode(payCode);
|
|
|
companyDivItem.setDetail(o.getAcctSplitBunch());
|
|
|
companyDivItem.setIsRefund(0); //支付
|
|
|
- companyDivItem.setIsDelay(0); //延迟分账
|
|
|
+ if (StringUtils.isNotBlank(o.getDelayAcctFlag()) && o.getDelayAcctFlag().equals("Y")) {
|
|
|
+ companyDivItem.setIsDelay(1); //延迟分账
|
|
|
+
|
|
|
+ } else {
|
|
|
+ companyDivItem.setIsDelay(0);
|
|
|
+ companyDivItem.setDelayStatus(0);
|
|
|
+ }
|
|
|
companyDivItemService.insertCompanyDivItem(companyDivItem);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 回调修改分账明细状态
|
|
|
+ *
|
|
|
* @param payCode
|
|
|
*/
|
|
|
public static void updateDivItem(String payCode) {
|
|
|
@@ -168,6 +185,24 @@ public class HuiFuUtils {
|
|
|
if (companyDivItem != null) {
|
|
|
companyDivItem.setIsPay(1);
|
|
|
companyDivItemService.updateCompanyDivItem(companyDivItem);
|
|
|
+ try {
|
|
|
+ //查询是否分账payment
|
|
|
+ FsStorePayment fsStorePayment = fsStorePaymentMapper.selectFsStorePaymentByPaymentCode(payCode);
|
|
|
+ if (fsStorePayment == null) {
|
|
|
+ FsStorePaymentScrm fsStorePaymentScrm = fsStorePaymentScrmMapper.selectFsStorePaymentByPaymentCode(payCode);
|
|
|
+ if (fsStorePaymentScrm != null) {
|
|
|
+ fsStorePaymentScrm.setShareStatus(1);
|
|
|
+ fsStorePaymentScrm.setShareMoney(fsStorePaymentScrm.getPayMoney());
|
|
|
+ fsStorePaymentScrmMapper.updateFsStorePayment(fsStorePaymentScrm);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ fsStorePayment.setShareStatus(1);
|
|
|
+ fsStorePayment.setShareMoney(fsStorePayment.getPayMoney());
|
|
|
+ fsStorePaymentMapper.updateFsStorePayment(fsStorePayment);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("更新payment表分账状态失败{}", e.getMessage());
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -177,12 +212,12 @@ public class HuiFuUtils {
|
|
|
* 处理分账退款
|
|
|
*
|
|
|
* @param reMoney
|
|
|
- * @param payment
|
|
|
+ * @param payCode
|
|
|
* @param extendInfoMap
|
|
|
*/
|
|
|
- public static CompanyDivItem doRefundDiv(BigDecimal payPrice,BigDecimal reMoney, FsStorePayment payment, Map<String, Object> extendInfoMap) {
|
|
|
+ public static CompanyDivItem doRefundDiv(BigDecimal payPrice,BigDecimal reMoney,String payCode , Map<String, Object> extendInfoMap) {
|
|
|
CompanyDivItem companyDivItem = null;
|
|
|
- companyDivItem = companyDivItemService.selectCompanyDivItemByPayCode(payment.getPayCode());
|
|
|
+ companyDivItem = companyDivItemService.selectCompanyDivItemByPayCode(payCode);
|
|
|
if (companyDivItem != null) {
|
|
|
if (payPrice.compareTo(reMoney) > 0) {
|
|
|
//部分退款
|
|
|
@@ -251,4 +286,109 @@ public class HuiFuUtils {
|
|
|
return companyDivItem;
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ public static void confirmByOrderCode(String orderCode) {
|
|
|
+ FsStorePayment queryParam = new FsStorePayment();
|
|
|
+ queryParam.setBusinessCode(orderCode);
|
|
|
+ queryParam.setStatus(1);
|
|
|
+ List<FsStorePayment> fsStorePayments = fsStorePaymentMapper.selectFsStorePaymentList(queryParam);
|
|
|
+ if (!fsStorePayments.isEmpty()) {
|
|
|
+ FsStorePayment fsStorePayment = fsStorePayments.get(0);
|
|
|
+ Integer businessType = fsStorePayment.getBusinessType();
|
|
|
+ String appId = fsStorePayment.getAppId();
|
|
|
+ Date payTime = fsStorePayment.getPayTime();
|
|
|
+ String payCode = fsStorePayment.getPayCode();
|
|
|
+ confirm(payCode, businessType, appId, payTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void confirmByPayCode(String payCode) {
|
|
|
+ FsStorePayment fsStorePayment = fsStorePaymentMapper.selectFsStorePaymentByPaymentCode(payCode);
|
|
|
+ if (fsStorePayment == null){
|
|
|
+ confirmByPayCodeScrm(payCode);
|
|
|
+ } else {
|
|
|
+ Integer businessType = fsStorePayment.getBusinessType();
|
|
|
+ String appId = fsStorePayment.getAppId();
|
|
|
+ Date payTime = fsStorePayment.getPayTime();
|
|
|
+ confirm(payCode, businessType, appId, payTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static void confirmByPayCodeScrm(String payCode) {
|
|
|
+ FsStorePaymentScrm fsStorePayment = fsStorePaymentScrmMapper.selectFsStorePaymentByPaymentCode(payCode);
|
|
|
+ if (fsStorePayment != null) {
|
|
|
+ Integer businessType = fsStorePayment.getBusinessType();
|
|
|
+ String appId = fsStorePayment.getAppId();
|
|
|
+ Date payTime = fsStorePayment.getPayTime();
|
|
|
+ confirm(payCode, businessType, appId, payTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void confirm(String payCode, Integer businessType, String appId,Date payTime) {
|
|
|
+ CompanyDivItem companyDivItem = companyDivItemService.selectCompanyDivItemByPayCode(payCode);
|
|
|
+ if (companyDivItem != null) {
|
|
|
+ if (companyDivItem.getIsDelay() != null && companyDivItem.getIsDelay() == 1) {
|
|
|
+ //延时分账 确认订单分账
|
|
|
+ HuiFuConfirmOrder confirmOrder = new HuiFuConfirmOrder();
|
|
|
+ String orgReqSeqId = payCode;
|
|
|
+ switch (businessType) {
|
|
|
+ case 1:
|
|
|
+ orgReqSeqId = "inquiry-" + orgReqSeqId;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ orgReqSeqId = "store-" + orgReqSeqId;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ orgReqSeqId = "package-" + orgReqSeqId;
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ orgReqSeqId = "course-" + orgReqSeqId;
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ orgReqSeqId = "appvip-" + orgReqSeqId;
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ orgReqSeqId = "integral-" + orgReqSeqId;
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ orgReqSeqId = "payment-" + orgReqSeqId;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ confirmOrder.setOrgReqSeqId(orgReqSeqId);
|
|
|
+ if (payTime == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ confirmOrder.setOrgReqDate(DateUtils.parseDateToStr("yyyyMMdd", payTime));
|
|
|
+ confirmOrder.setAppId(appId);
|
|
|
+ HuiFuQueryOrderResult huiFuResult = huiFuService.delayTransConfirm(confirmOrder);
|
|
|
+ /**
|
|
|
+ * {
|
|
|
+ * "org_req_date": "20251111",
|
|
|
+ * "resp_desc": "交易成功",
|
|
|
+ * "trans_stat": "S",
|
|
|
+ * "org_hf_seq_id": "002900TOP2A251111092843P250ac139c1400000",
|
|
|
+ * "confirmed_amt": "0.02",
|
|
|
+ * "hf_seq_id": "003500TOP3A251111101202P443ac13696f00000",
|
|
|
+ * "org_mer_ord_id": "package-1988056235747835904",
|
|
|
+ * "org_req_seq_id": "package-1988056235747835904",
|
|
|
+ * "unconfirm_amt": "0.00",
|
|
|
+ * "req_seq_id": "202511111011597366vxgcpozqvirxg",
|
|
|
+ * "req_date": "20251111",
|
|
|
+ * "resp_code": "00000000",
|
|
|
+ * "acct_resp_desc": "成功",
|
|
|
+ * "huifu_id": "6666000171179317",
|
|
|
+ * "acct_split_bunch": "{\"acct_infos\":[{\"acct_id\":\"F13245119\",\"div_amt\":\"0.01\",\"huifu_id\":\"6666000181121137\",\"split_fee_acct_id\":\"F13245119\",\"split_fee_amt\":\"0.00\",\"split_fee_huifu_id\":\"6666000181121137\"},{\"acct_id\":\"F08847757\",\"div_amt\":\"0.01\",\"huifu_id\":\"6666000171179317\"}]}",
|
|
|
+ * "acct_resp_code": "000"
|
|
|
+ * }
|
|
|
+ */
|
|
|
+ if (huiFuResult != null) {
|
|
|
+ if ("00000000".equals(huiFuResult.getResp_code())) {
|
|
|
+ companyDivItem.setDelayStatus(1);
|
|
|
+ companyDivItemService.updateCompanyDivItem(companyDivItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|