Pārlūkot izejas kodu

//分账

private_deployment
xhxu pirms 1 gada
vecāks
revīzija
1fb08c2e4e
20 mainītis faili ar 492 papildinājumiem un 24 dzēšanām
  1. +39
    -1
      suimangSchedule/src/main/java/com/iformall/schedule/ProductOrderSharingSchedule.java
  2. +1
    -1
      suimangService/src/main/java/com/iformall/domain/po/ProductOrder.java
  3. +13
    -1
      suimangService/src/main/java/com/iformall/domain/po/ProductOrderSharing.java
  4. +4
    -1
      suimangService/src/main/java/com/iformall/douyin/pay/DouYinPayHelper.java
  5. +3
    -0
      suimangService/src/main/java/com/iformall/douyin/pay/orderQuery/QuerySettleResult.java
  6. +12
    -0
      suimangService/src/main/java/com/iformall/mapper/ProductOrderSharingMapper.java
  7. +1
    -0
      suimangService/src/main/java/com/iformall/service/ProductOrderService.java
  8. +25
    -0
      suimangService/src/main/java/com/iformall/service/ProductOrderSharingService.java
  9. +1
    -0
      suimangService/src/main/java/com/iformall/service/ProductService.java
  10. +33
    -8
      suimangService/src/main/java/com/iformall/service/impl/ProductOrderServiceImpl.java
  11. +115
    -0
      suimangService/src/main/java/com/iformall/service/impl/ProductOrderSharingServiceImpl.java
  12. +1
    -1
      suimangService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java
  13. +20
    -1
      suimangService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java
  14. +44
    -3
      suimangService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java
  15. +16
    -1
      suimangService/src/main/java/com/iformall/service/pay/service/share/entity/PayShareQueryResult.java
  16. +11
    -1
      suimangService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java
  17. +12
    -2
      suimangService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java
  18. +48
    -2
      suimangService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java
  19. +1
    -1
      suimangService/src/main/java/com/iformall/service/pay/service/share/wx/v3/entity/V3PayShareQueryReq.java
  20. +92
    -0
      suimangService/src/main/resources/mapper/ProductOrderSharingMapper.xml

+ 39
- 1
suimangSchedule/src/main/java/com/iformall/schedule/ProductOrderSharingSchedule.java Parādīt failu

@@ -1,8 +1,10 @@
package com.iformall.schedule;

import com.iformall.domain.po.ProductOrder;
import com.iformall.domain.po.ProductOrderSharing;
import com.iformall.enums.*;
import com.iformall.service.ProductOrderService;
import com.iformall.service.ProductOrderSharingService;
import com.iformall.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -20,7 +22,10 @@ public class ProductOrderSharingSchedule {
@Autowired
private ProductOrderService productOrderService;

@Scheduled(cron = "0 15 2 * * ?") // 每天凌晨02:00分账重试
@Autowired
private ProductOrderSharingService productOrderSharingService;

@Scheduled(cron = "0 15 1 * * ?") // 每天凌晨02:00分账重试
public void productOrderSharingSchedule() {
ProductOrder productOrderQ = new ProductOrder();
productOrderQ.setOrderStatus(EnumProductOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode());
@@ -30,6 +35,9 @@ public class ProductOrderSharingSchedule {
for (ProductOrder order: orderList) {
try{
productOrderService.handldSharing(order);

productOrderSharingService.sharingOrder(order.getId());

}catch(Exception e){
logger.error("分账失败:" + e.getMessage());
}
@@ -37,4 +45,34 @@ public class ProductOrderSharingSchedule {
}
}

@Scheduled(cron = "0 15 2 * * ?") // 每天凌晨02:00分账重试
public void productOrderSharing2Schedule() {
ProductOrderSharing productOrderSharingQ = new ProductOrderSharing();
productOrderSharingQ.setSettleStatus(EnumProductOrderSettleStatus.unfreeze_before.getCode());
List<ProductOrderSharing> sharingList = productOrderSharingService.findList(productOrderSharingQ);
for (ProductOrderSharing sharing: sharingList) {
try{
productOrderSharingService.sharingOrder(sharing.getId());
}catch(Exception e){
logger.error("分账失败:" + e.getMessage());
}

}
}

@Scheduled(cron = "0 15 3 * * ?") // 查询分账结果
public void productOrderSharingQuerySchedule() {
ProductOrderSharing productOrderSharingQ = new ProductOrderSharing();
productOrderSharingQ.setSettleStatus(EnumProductOrderSettleStatus.unfreeze_ing.getCode());
List<ProductOrderSharing> sharingList = productOrderSharingService.findList(productOrderSharingQ);
for (ProductOrderSharing sharing: sharingList) {
try{
productOrderSharingService.handleSharingOrder(sharing.getId());
}catch(Exception e){
logger.error("分账失败:" + e.getMessage());
}

}
}

}

+ 1
- 1
suimangService/src/main/java/com/iformall/domain/po/ProductOrder.java Parādīt failu

@@ -64,7 +64,7 @@ public class ProductOrder extends TenantEntity {
@io.swagger.annotations.ApiModelProperty(value="支付时间",name="paymentTime")
private Date paymentTime;

@io.swagger.annotations.ApiModelProperty(value="支付时间",name="paymentTime")
@io.swagger.annotations.ApiModelProperty(value="支付渠道",name="payWay")
private Integer payWay;



+ 13
- 1
suimangService/src/main/java/com/iformall/domain/po/ProductOrderSharing.java Parādīt failu

@@ -1,5 +1,6 @@
package com.iformall.domain.po;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.iformall.domain.po.base.TenantEntity;
import lombok.Data;
@@ -20,6 +21,9 @@ public class ProductOrderSharing extends TenantEntity {
@io.swagger.annotations.ApiModelProperty(value="订单价格",name="orderPrice")
private Integer orderPrice;

@io.swagger.annotations.ApiModelProperty(value="支付渠道",name="payWay")
private Integer payWay;

@io.swagger.annotations.ApiModelProperty(value="平台支付单号",name="transactionId")
private String transactionId;

@@ -43,10 +47,12 @@ public class ProductOrderSharing extends TenantEntity {
@io.swagger.annotations.ApiModelProperty(value = "EnumProductOrderSettleStatus", name = "settleStatus")
private Integer settleStatus;

@io.swagger.annotations.ApiModelProperty(value="",name="settleMsg")
private String settleMsg;

@io.swagger.annotations.ApiModelProperty(value="",name="settleDetail")
private String settleDetail;


@io.swagger.annotations.ApiModelProperty(value="手续费",name="rake")
private Integer rake;
@io.swagger.annotations.ApiModelProperty(value="佣金",name="commission")
@@ -57,4 +63,10 @@ public class ProductOrderSharing extends TenantEntity {
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate")
private Date createDate;

@TableField(exist = false)
private Date startDate;

@TableField(exist = false)
private Date endDate;

}

+ 4
- 1
suimangService/src/main/java/com/iformall/douyin/pay/DouYinPayHelper.java Parādīt failu

@@ -344,8 +344,11 @@ public class DouYinPayHelper {
QuerySettleResult result = new QuerySettleResult();
result.setSettleNo(info.getString("settle_no"));
result.setSettleAmount(info.getInteger("settle_amount"));
result.setRake(info.getInteger("rake"));
result.setCommission(info.getInteger("commission"));
result.setSettleStatus(info.getString("settle_status"));
result.setMsg(jsonObject.getString("err_tips"));
result.setMsg(jsonObject.getString("msg"));
result.setSettleDetail(jsonObject.getString("settle_detail"));
return result;
}else {
log.error("settleQuery reponse error. request: "+JSON.toJSONString(map)+" response:"+response);


+ 3
- 0
suimangService/src/main/java/com/iformall/douyin/pay/orderQuery/QuerySettleResult.java Parādīt failu

@@ -8,5 +8,8 @@ public class QuerySettleResult {
private String settleNo;//担保支付侧的分账单号
private Integer settleAmount;//分账金额,单位[分]
private String settleStatus;//分账状态,成功-SUCCESS;失败-FAIL
private String settleDetail;
private Integer rake;
private Integer commission;
private String msg;
}

+ 12
- 0
suimangService/src/main/java/com/iformall/mapper/ProductOrderSharingMapper.java Parādīt failu

@@ -0,0 +1,12 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.ProductOrderSharing;

import java.util.List;

public interface ProductOrderSharingMapper extends CommonMapper<ProductOrderSharing, Long>{
List<ProductOrderSharing> findList(ProductOrderSharing record);

}

+ 1
- 0
suimangService/src/main/java/com/iformall/service/ProductOrderService.java Parādīt failu

@@ -33,4 +33,5 @@ public interface ProductOrderService {
List<ProductOrder> findList(ProductOrder record);

void handldSharing(ProductOrder order);

}

+ 25
- 0
suimangService/src/main/java/com/iformall/service/ProductOrderSharingService.java Parādīt failu

@@ -0,0 +1,25 @@
package com.iformall.service;

import com.github.pagehelper.PageInfo;
import com.iformall.domain.po.ProductOrderSharing;

import java.util.List;

public interface ProductOrderSharingService {

/**
* 根据实体查询分页列表
*
* @param record
* @param pageIndex
* @param pageSize
* @return
*/
PageInfo<ProductOrderSharing> listAsPage(ProductOrderSharing record, Integer pageIndex, Integer pageSize);

List<ProductOrderSharing> findList(ProductOrderSharing record);

void sharingOrder(Long id);

void handleSharingOrder(Long id);
}

+ 1
- 0
suimangService/src/main/java/com/iformall/service/ProductService.java Parādīt failu

@@ -16,4 +16,5 @@ public interface ProductService {
PageInfo<Product> listAsPage(Product record, Integer pageIndex, Integer pageSize);

Product getById(Long id);

}

+ 33
- 8
suimangService/src/main/java/com/iformall/service/impl/ProductOrderServiceImpl.java Parādīt failu

@@ -6,12 +6,11 @@ import com.iformall.common.ErrorCode;
import com.iformall.common.IdWorker;
import com.iformall.common.ResultData;
import com.iformall.domain.po.*;
import com.iformall.enums.EnumProductOrderPayVendor;
import com.iformall.enums.EnumProductOrderStatus;
import com.iformall.enums.EnumProductType;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.ProductMapper;
import com.iformall.mapper.ProductOrderMapper;
import com.iformall.mapper.ProductOrderSharingMapper;
import com.iformall.service.ProductOrderService;
import com.iformall.service.UserBasicPropertyService;
import com.iformall.service.WxAppinfoService;
@@ -42,6 +41,9 @@ public class ProductOrderServiceImpl implements ProductOrderService {
@Autowired
ProductOrderMapper productOrderMapper;

@Autowired
ProductOrderSharingMapper productOrderSharingMapper;

@Autowired
ProductMapper productMapper;

@@ -200,12 +202,35 @@ public class ProductOrderServiceImpl implements ProductOrderService {
@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public void handldSharing(ProductOrder order) {
if(!EnumProductOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode().equals(order.getOrderStatus())){
return;
}
if(!EnumProfitSharing.PROFIT_SHARING_MAST.getCode().equals(order.getProfitSharing())){
return;
}


PayShareAdapterService payShareAdapterService = payServiceFactory.getPayShareAdapterService(order.getPayVendor());

payShareAdapterService.noReciverShare()

Date now = new Date();
ProductOrderSharing productOrderSharing = new ProductOrderSharing();
productOrderSharing.setId(order.getId());
productOrderSharing.setOutOrderId(order.getOrderNumber());
productOrderSharing.setOrderPrice(order.getOrderPrice());
productOrderSharing.setPayWay(order.getPayWay());
productOrderSharing.setTransactionId(order.getTransactionId());
productOrderSharing.setProjectType(order.getProjectType());
productOrderSharing.setPayVendor(order.getPayVendor());
final IdWorker idWorker = IdWorker.get();
productOrderSharing.setOutSettleNo(String.valueOf(idWorker.nextId()));
productOrderSharing.setSettleDesc("解冻至收款方");
productOrderSharing.setSettleStatus(EnumProductOrderSettleStatus.unfreeze_before.getCode());
productOrderSharing.setCreateDate(now);
productOrderSharing.setUpdateDate(now);
productOrderSharingMapper.insert(productOrderSharing);

ProductOrder updOrder = new ProductOrder();
updOrder.setId(order.getId());
updOrder.setProfitSharing(EnumProfitSharing.PROFIT_SHARING_FINISH.getCode());
updOrder.setUpdateDate(now);
productOrderMapper.updateById(updOrder);

}



+ 115
- 0
suimangService/src/main/java/com/iformall/service/impl/ProductOrderSharingServiceImpl.java Parādīt failu

@@ -0,0 +1,115 @@
package com.iformall.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.domain.po.Product;
import com.iformall.domain.po.ProductOrderSharing;
import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxPayAccount;
import com.iformall.enums.EnumProductOrderPayVendor;
import com.iformall.enums.EnumProductOrderSettleStatus;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.ProductMapper;
import com.iformall.mapper.ProductOrderSharingMapper;
import com.iformall.service.ProductOrderSharingService;
import com.iformall.service.ProductService;
import com.iformall.service.WxAppinfoService;
import com.iformall.service.WxPayAccountService;
import com.iformall.service.pay.PayServiceFactory;
import com.iformall.service.pay.service.share.PayShareAdapterService;
import com.iformall.service.pay.service.share.entity.PayShareQueryResult;
import com.iformall.service.pay.service.share.entity.PayShareResult;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
@Slf4j
public class ProductOrderSharingServiceImpl implements ProductOrderSharingService {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
ProductOrderSharingMapper productOrderSharingFromMapper;

@Autowired
WxAppinfoService wxAppinfoService;

@Autowired
WxPayAccountService wxPayAccountService;

@Autowired
PayServiceFactory payServiceFactory;

@Override
public PageInfo<ProductOrderSharing> listAsPage(ProductOrderSharing record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> productOrderSharingFromMapper.findList(record));
}

@Override
public List<ProductOrderSharing> findList(ProductOrderSharing record) {
return productOrderSharingFromMapper.findList(record);
}

@Override
public void sharingOrder(Long id) {
ProductOrderSharing productOrderSharing = productOrderSharingFromMapper.selectById(id);
if(productOrderSharing == null){
return;
}
if(!EnumProductOrderSettleStatus.unfreeze_before.getCode().equals(productOrderSharing.getSettleStatus())){
return;
}
PayShareAdapterService payShareAdapterService = payServiceFactory.getPayShareAdapterService(productOrderSharing.getPayVendor());
EnumProductOrderPayVendor payVendoEnum = EnumProductOrderPayVendor.getEnum(productOrderSharing.getPayVendor());
WxAppinfo appinfo = wxAppinfoService.getProjectCAppInfoFromRedis(productOrderSharing.getProjectType(), payVendoEnum.getPlat());
WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appinfo.getPayId());
PayShareResult payShareResult = payShareAdapterService.noReciverShare(appinfo, payAccount, productOrderSharing);
if(payShareResult.isSuccess()){
ProductOrderSharing updSharing = new ProductOrderSharing();
updSharing.setId(productOrderSharing.getId());
updSharing.setSettleNo(payShareResult.getShareOrderNo());
updSharing.setSettleStatus(EnumProductOrderSettleStatus.unfreeze_ing.getCode());
updSharing.setUpdateDate(new Date());
productOrderSharingFromMapper.updateById(updSharing);
}else{
throw new MallinkException(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),payShareResult.getMsg());
}
}

@Override
public void handleSharingOrder(Long id) {
ProductOrderSharing productOrderSharing = productOrderSharingFromMapper.selectById(id);
if(productOrderSharing == null){
return;
}
if(!EnumProductOrderSettleStatus.unfreeze_ing.getCode().equals(productOrderSharing.getSettleStatus())){
return;
}
PayShareAdapterService payShareAdapterService = payServiceFactory.getPayShareAdapterService(productOrderSharing.getPayVendor());
EnumProductOrderPayVendor payVendoEnum = EnumProductOrderPayVendor.getEnum(productOrderSharing.getPayVendor());
WxAppinfo appinfo = wxAppinfoService.getProjectCAppInfoFromRedis(productOrderSharing.getProjectType(), payVendoEnum.getPlat());
WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appinfo.getPayId());
PayShareQueryResult payShareQueryResult = payShareAdapterService.shareQuery(appinfo, payAccount, productOrderSharing);
ProductOrderSharing updSharing = new ProductOrderSharing();
updSharing.setId(productOrderSharing.getId());
updSharing.setSettleMsg(productOrderSharing.getSettleMsg());
if(payShareQueryResult.isSuccess()){
updSharing.setSettleStatus(EnumProductOrderSettleStatus.unfreeze.getCode());
updSharing.setSettleDetail(productOrderSharing.getSettleDetail());
updSharing.setRake(productOrderSharing.getRake());
updSharing.setCommission(productOrderSharing.getCommission());
}else{
updSharing.setSettleStatus(EnumProductOrderSettleStatus.unfreeze_error.getCode());
}
productOrderSharingFromMapper.updateById(updSharing);
}

}

+ 1
- 1
suimangService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java Parādīt failu

@@ -636,7 +636,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
// }
// }
// }
return new ResultData(payShareQueryResult.getData());
return new ResultData(payShareQueryResult);
}

@Override


+ 20
- 1
suimangService/src/main/java/com/iformall/service/pay/service/share/PayShareAdapterService.java Parādīt failu

@@ -47,6 +47,15 @@ public interface PayShareAdapterService {
* @return
*/
WxProfitSharingReceiver getReceiver(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay,Integer mchType);

/**
* 无分账接收方分账 ,钱直接分给小程序方 调用API分账
* @param appInfo
* @param payAccount
* @param record
* @return
*/
public PayShareResult noReciverShare(WxAppinfo appInfo,WxPayAccount payAccount,ProductOrderSharing record);
/**
* 无分账接收方分账 ,钱直接分给小程序方 调用API分账
@@ -71,7 +80,17 @@ public interface PayShareAdapterService {
* @throws MallinkException
*/
public PayShareResult haveReciversShare(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingOrder record,JSONArray receivers) throws MallinkException;

/**
* 分账结果查询
* @param appInfo
* @param payAccount
* @param record
* @return
* @throws MallinkException
*/
public PayShareQueryResult shareQuery(WxAppinfo appInfo,WxPayAccount payAccount,ProductOrderSharing record) throws MallinkException;

/**
* 分账结果查询
* @param appInfo


+ 44
- 3
suimangService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java Parādīt failu

@@ -34,6 +34,7 @@ import com.iformall.service.pay.service.share.entity.ShareAccountResult;
import com.iformall.service.pay.service.share.entity.ShareNotifyAdapterResult;
import com.iformall.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Lazy;
@@ -222,7 +223,29 @@ public class TtPayShareService extends PayShareBaseAdapterService{

}

@Override
@Override
public PayShareQueryResult shareQuery(WxAppinfo appInfo, WxPayAccount payAccount, ProductOrderSharing record) throws MallinkException {
QuerySettleResult querySettleResult = DouYinPayHelper.settleQuery(appInfo.getAppId(), payAccount.getApiKey(), record.getOutSettleNo(), null);
if(querySettleResult == null){
throw new MallinkException(ErrorCode.PROFIT_SHARING_QUERY_REQUEST_FAILED.getCode(), "分账查询异常");
}
PayShareQueryResult payShareQueryResult = new PayShareQueryResult();
if(querySettleResult.getSettleStatus().equals("SUCCESS")){
payShareQueryResult.setSuccess(true);
payShareQueryResult.setMsg("success");
payShareQueryResult.setDetail(querySettleResult.getSettleDetail());
payShareQueryResult.setRake(querySettleResult.getRake());
payShareQueryResult.setCommission(querySettleResult.getCommission());
return payShareQueryResult;
}else if(querySettleResult.getSettleStatus().equals("FAIL")){
payShareQueryResult.setSuccess(false);
payShareQueryResult.setMsg(querySettleResult.getMsg());
return payShareQueryResult;
}
throw new MallinkException(ErrorCode.PROFIT_SHARING_QUERY_REQUEST_FAILED.getCode(), "分账状态异常");
}

@Override
public PayShareQueryResult shareQuery(WxAppinfo appInfo, WxPayAccount payAccount, WxProfitSharingOrder record) throws MallinkException {
try {
TtPayService ttPayService = maUtil.getTtPayService(appInfo, payAccount);
@@ -230,9 +253,9 @@ public class TtPayShareService extends PayShareBaseAdapterService{
if(profitSharingResult.isSuccess()){
ProfitSharingResult.Receiver receiver = profitSharingResult.getData().get(0);
if("SUCCESS".equals(receiver.getSettleStatus())){
return new PayShareQueryResult(true, EnumProfitSharingOrderStatus.PROFIT_SHARING_DONE.getCode(), "success",receiver, null);
return new PayShareQueryResult(true, EnumProfitSharingOrderStatus.PROFIT_SHARING_DONE.getCode(), "success", null);
} else if("FAIL".equals(receiver.getSettleStatus())){
return new PayShareQueryResult(true, EnumProfitSharingOrderStatus.PROFIT_SHARING_FAILED.getCode(), "fail",receiver, null);
return new PayShareQueryResult(true, EnumProfitSharingOrderStatus.PROFIT_SHARING_FAILED.getCode(), "fail", null);
}
}
throw new MallinkException(ErrorCode.PROFIT_SHARING_QUERY_REQUEST_FAILED.getCode(), profitSharingResult.getErrTips());
@@ -334,4 +357,22 @@ public class TtPayShareService extends PayShareBaseAdapterService{

}

@Override
public PayShareResult noReciverShare(WxAppinfo appInfo, WxPayAccount payAccount, ProductOrderSharing record) {

Settle settle = new Settle();
settle.setAppId(appInfo.getAppId());
settle.setSalt(payAccount.getApiKey());
settle.setOutSettleNo(record.getOutSettleNo());
settle.setOutOrderNo(record.getOutOrderId());
settle.setSettleDesc(record.getSettleDesc());
SettleResult settleResult = DouYinPayHelper.settle(settle);

if (settleResult.isSuccess()) {
return new PayShareResult(true, null,"success", settleResult,settleResult.getSettleNo());
}else{
return new PayShareResult(false, null,settleResult.getMsg(), null,null);
}
}

}

+ 16
- 1
suimangService/src/main/java/com/iformall/service/pay/service/share/entity/PayShareQueryResult.java Parādīt failu

@@ -12,10 +12,25 @@ public class PayShareQueryResult implements Serializable{

private static final long serialVersionUID = -3701322871877301001L;

public PayShareQueryResult(){

}

public PayShareQueryResult(boolean isSuccess,Integer code,String msg,List<PayShareQueryResultReceivers> receivers){
this.isSuccess = isSuccess;
this.code = code;
this.msg = msg;
this.receivers = receivers;
}

private boolean isSuccess;
private Integer code;
private String msg;
private Object data;
private String detail;

private Integer rake;
private Integer commission;

private List<PayShareQueryResultReceivers> receivers;//数组字符串,平台查询返回的分账账户列表


+ 11
- 1
suimangService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java Parādīt failu

@@ -95,6 +95,11 @@ public class WxPayShareSFTService extends PayShareBaseAdapterService{
}

@Override
public PayShareQueryResult shareQuery(WxAppinfo appInfo, WxPayAccount payAccount, ProductOrderSharing record) throws MallinkException {
return null;
}

@Override
public PayShareQueryResult shareQuery(WxAppinfo appInfo, WxPayAccount payAccount, WxProfitSharingOrder record) throws MallinkException {
return null;
@@ -160,5 +165,10 @@ public class WxPayShareSFTService extends PayShareBaseAdapterService{
return null;
}

@Override
public PayShareResult noReciverShare(WxAppinfo appInfo, WxPayAccount payAccount, ProductOrderSharing record) {
return null;
}


}

+ 12
- 2
suimangService/src/main/java/com/iformall/service/pay/service/share/wx/v2/WxPayShareService.java Parādīt failu

@@ -182,7 +182,12 @@ public class WxPayShareService extends PayShareBaseAdapterService{
return new PayShareResult(true, null, "success",returnMap, returnMap.get("order_id"));
}

@Override
@Override
public PayShareQueryResult shareQuery(WxAppinfo appInfo, WxPayAccount payAccount, ProductOrderSharing record) throws MallinkException {
return null;
}

@Override
public PayShareQueryResult shareQuery(WxAppinfo appInfo, WxPayAccount payAccount, WxProfitSharingOrder record) throws MallinkException {
WxProfitSharingQueryP wxProfitSharingQueryP = new WxProfitSharingQueryP();;
wxProfitSharingQueryP.setMch_id(payAccount.getMchId());
@@ -219,7 +224,7 @@ public class WxPayShareService extends PayShareBaseAdapterService{
}
Integer code = (Integer) statusMap.get(returnMap.get("status"));
return new PayShareQueryResult(true, code, "success",returnMap, getReceivers(returnMap.get("receivers")));
return new PayShareQueryResult(true, code, "success",getReceivers(returnMap.get("receivers")));
}
@@ -367,6 +372,11 @@ public class WxPayShareService extends PayShareBaseAdapterService{
return record;
}

@Override
public PayShareResult noReciverShare(WxAppinfo appInfo, WxPayAccount payAccount, ProductOrderSharing record) {
return null;
}

private static String queryOrderShareAmount(String mchId,String transcationId,String apiKey) {
WxProfitSharingP psCmd = new WxProfitSharingP();
psCmd.setMch_id(mchId);//服务商商户id


+ 48
- 2
suimangService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java Parādīt failu

@@ -98,7 +98,29 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{
return null;
}

//无需分账,直接解冻
@Override
public PayShareResult noReciverShare(WxAppinfo appInfo, WxPayAccount payAccount, ProductOrderSharing record) {
V3PayShareUnfreezeReq req = new V3PayShareUnfreezeReq();
req.setTransaction_id(record.getTransactionId());
req.setOut_order_no(record.getOutOrderId());
req.setDescription(record.getSettleDesc());
WxPayService payService = maUtil.getWxPayServiceBySelfModel(appInfo, payAccount);
String response = null;;
try {
response = WxPayV3.unfreezn(payService, req);
if (StringUtils.isBlank(response)) {
return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_REQ_FAILED.getCode(),"分账解冻请求失败.返回值为空", null,null);
}
} catch (WxPayException e) {
log.error("wx v3 noreciver share error:",e);
return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_REQ_FAILED.getCode(),ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getMessage()+":"+e.getCustomErrorMsg(), null,null);
}

JSONObject result = JSON.parseObject(response);
return new PayShareResult(true, null,"success", result,result.getString("order_id"));
}

//无需分账,直接解冻
@Override
public PayShareResult noReciverShare(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingOrder record) {
V3PayShareUnfreezeReq req = new V3PayShareUnfreezeReq();
@@ -178,6 +200,30 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{
}

@Override
public PayShareQueryResult shareQuery(WxAppinfo appInfo, WxPayAccount payAccount, ProductOrderSharing record) throws MallinkException {
V3PayShareQueryReq req = new V3PayShareQueryReq();
req.setTransaction_id(record.getTransactionId());
req.setOut_order_no(record.getOutSettleNo());
WxPayService payService = maUtil.getWxPayService(appInfo, payAccount);
String response = null;
try {
response = WxPayV3.shareQuery(payService, req);
if (StringUtils.isBlank(response)) {
throw new MallinkException(EnumProfitSharingOrderStatus.PROFIT_SHARING_REQ_FAILED.getCode(),"分账请求失败.返回值为空");
}
} catch (WxPayException e) {
log.error("weixin pay v3 share error.",e);
throw new MallinkException(ErrorCode.PROFIT_SHARING_QUERY_REQUEST_FAILED.getCode(), ErrorCode.PROFIT_SHARING_QUERY_REQUEST_FAILED.getMessage()+e.getCustomErrorMsg());
}
JSONObject result = JSON.parseObject(response);
String return_code = result.getString("state");
if (!"FINISHED".equals(return_code)) {
throw new MallinkException(ErrorCode.PROFIT_SHARING_QUERY_REQUEST_FAILED.getCode(), "分账状态:"+return_code);
}
return new PayShareQueryResult(true, 200, "success",this.getReceivers(JSON.toJSONString(result.get("receivers"))));
}

@Override
public PayShareQueryResult shareQuery(WxAppinfo appInfo, WxPayAccount payAccount, WxProfitSharingOrder record) throws MallinkException {
V3PayShareQueryReq req = new V3PayShareQueryReq();
@@ -211,7 +257,7 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{
if (StringUtils.isBlank(out_order_no) || !out_order_no.equals(record.getId().toString())){
throw new MallinkException(ErrorCode.PROFIT_SHARING_QUERY_RETURN_INVALID.getCode(),"out_order_no:["+out_order_no+"] WxProfitSharingOrder:["+record.getId()+"]");
}
return new PayShareQueryResult(true, 200, "success",result, this.getReceivers(JSON.toJSONString(result.get("receivers"))));
return new PayShareQueryResult(true, 200, "success",this.getReceivers(JSON.toJSONString(result.get("receivers"))));
}


+ 1
- 1
suimangService/src/main/java/com/iformall/service/pay/service/share/wx/v3/entity/V3PayShareQueryReq.java Parādīt failu

@@ -9,6 +9,6 @@ public class V3PayShareQueryReq {
private String sub_mchid;//微信支付分配的子商户号,即分账的出资商户号。
private String transaction_id;//微信支付订单号
@JSONField(serialize = false)
// @JSONField(serialize = false)
private String out_order_no;//商户订单号
}

+ 92
- 0
suimangService/src/main/resources/mapper/ProductOrderSharingMapper.xml Parādīt failu

@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.ProductOrderSharingMapper">
<resultMap id="BaseResultMap" type="com.iformall.domain.po.ProductOrderSharing">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId" />
<result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId"/>
<result column="out_order_no" jdbcType="VARCHAR" property="outOrderNo"/>
<result column="order_price" jdbcType="INTEGER" property="orderPrice"/>
<result column="pay_way" jdbcType="INTEGER" property="payWay"/>
<result column="transaction_id" jdbcType="VARCHAR" property="transactionId"/>
<result column="project_type" jdbcType="INTEGER" property="projectType"/>
<result column="pay_vendor" jdbcType="INTEGER" property="payVendor"/>
<result column="out_settle_no" jdbcType="VARCHAR" property="outSettleNo" />
<result column="settle_desc" jdbcType="VARCHAR" property="settleDesc"/>
<result column="settle_no" jdbcType="VARCHAR" property="settleNo" />
<result column="settle_amount" jdbcType="INTEGER" property="settleAmount"/>
<result column="settle_status" jdbcType="INTEGER" property="settleStatus"/>
<result column="settle_msg" jdbcType="VARCHAR" property="settleMsg" />
<result column="settle_detail" jdbcType="VARCHAR" property="settleDetail" />
<result column="rake" jdbcType="INTEGER" property="rake"/>
<result column="commission" jdbcType="INTEGER" property="commission"/>
<result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate" />
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`parent_tenant_id`,`out_order_no`,`order_price`,`pay_way`,`transaction_id`,`project_type`,`pay_vendor`,
`out_settle_no`,`settle_desc`,`settle_no`,`settle_amount`,`settle_status`,`settle_msg`,
`settle_detail`,`rake`,`commission`,`create_date`,`update_date`
</sql>

<sql id="dynamicWhereConditions">
where 1=1
<if test=" null != id ">
and `id` = #{id}
</if>
<if test=" null != outOrderNo and '' != outSettleNo">
and `out_order_no` = #{outSettleNo}
</if>
<if test=" null != payWay">
and `pay_way` = #{payWay}
</if>
<if test=" null != transactioniId and '' != transactioniId">
and `transaction_id` = #{transactioniId}
</if>

<if test=" null != projectType">
and `project_type` = #{projectType}
</if>

<if test=" null != payVendor">
and `pay_vendor` = #{payVendor}
</if>

<if test=" null != outSettleNo and '' != outSettleNo">
and `out_settle_no` = #{outSettleNo}
</if>
<if test=" null != settleNo and '' != settleNo">
and `settle_no` = #{settleNo}
</if>
<if test=" null != settleStatus ">
and `settle_status` = #{settleStatus}
</if>

<if test=" null != startDate ">
and `create_date` &gt;= #{startDate}
</if>
<if test=" null != endDate">
and `create_date` &lt;= #{endDate}
</if>

<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != sortColumns"> order by ${sortColumns} </if>
</sql>
<select id="findList" parameterType="com.iformall.domain.po.ProductOrderSharing" resultMap="BaseResultMap">
select
<include refid="allColumns"/>
from product_order_sharing
<include refid="dynamicWhereConditions" />
</select>

</mapper>

Notiek ielāde…
Atcelt
Saglabāt