@@ -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()); | |||
} | |||
} | |||
} | |||
} |
@@ -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; | |||
@@ -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; | |||
} |
@@ -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); | |||
@@ -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; | |||
} |
@@ -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); | |||
} |
@@ -33,4 +33,5 @@ public interface ProductOrderService { | |||
List<ProductOrder> findList(ProductOrder record); | |||
void handldSharing(ProductOrder order); | |||
} |
@@ -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); | |||
} |
@@ -16,4 +16,5 @@ public interface ProductService { | |||
PageInfo<Product> listAsPage(Product record, Integer pageIndex, Integer pageSize); | |||
Product getById(Long id); | |||
} |
@@ -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); | |||
} | |||
@@ -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); | |||
} | |||
} |
@@ -636,7 +636,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ | |||
// } | |||
// } | |||
// } | |||
return new ResultData(payShareQueryResult.getData()); | |||
return new ResultData(payShareQueryResult); | |||
} | |||
@Override | |||
@@ -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 | |||
@@ -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); | |||
} | |||
} | |||
} |
@@ -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;//数组字符串,平台查询返回的分账账户列表 | |||
@@ -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; | |||
} | |||
} |
@@ -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 | |||
@@ -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")))); | |||
} | |||
@@ -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;//商户订单号 | |||
} |
@@ -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` >= #{startDate} | |||
</if> | |||
<if test=" null != endDate"> | |||
and `create_date` <= #{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> |