zhengfangyuan 3 лет назад
Родитель
Сommit
c7b33c8319
5 измененных файлов: 102 добавлений и 74 удалений
  1. +18
    -7
      mallinkCallback/src/main/java/com/iformall/controller/callback/TtPayController.java
  2. +39
    -40
      mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java
  3. +7
    -6
      mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java
  4. +4
    -2
      mallinkService/src/main/java/com/iformall/service/WxProfitSharingOrderService.java
  5. +34
    -19
      mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java

+ 18
- 7
mallinkCallback/src/main/java/com/iformall/controller/callback/TtPayController.java Просмотреть файл

@@ -6,10 +6,7 @@ import com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader;
import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxBatchOrder;
import com.iformall.domain.po.WxPayAccount;
import com.iformall.domain.po.WxPayOrder;
import com.iformall.domain.po.*;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.po.msg.FmInsideNotifyRefundSuccessMsg;
import com.iformall.douyin.pay.DouYinPayHelper;
@@ -48,6 +45,9 @@ public class TtPayController extends BaseController {
@Autowired
private WxPayAccountService payAccountService;

@Autowired
private WxProfitSharingOrderService wxProfitSharingOrderService;

@Autowired
private WxRefundOrderService wxRefundOrderService;

@@ -227,10 +227,21 @@ public class TtPayController extends BaseController {

resultMap.put("err_no",0);
resultMap.put("err_tips","success");
}else if("settle".equals(type)){

}else if("settle".equals(type)){//分账回调
String order_id = (String) pMap.get("order_id");
String settle_id = (String) pMap.get("settle_id");
String out_settle_no = (String) pMap.get("out_settle_no");
String status = (String) pMap.get("status");
WxProfitSharingOrder wxProfitSharingOrder = new WxProfitSharingOrder();
wxProfitSharingOrder.setTenantId(appinfo.getTenantId());
wxProfitSharingOrder.setOutSettleNo(Long.parseLong(out_settle_no));
WxProfitSharingOrder one = wxProfitSharingOrderService.findOne(wxProfitSharingOrder);
if(one != null){
wxProfitSharingOrderService.querySharingOrder(wxProfitSharingOrder);
resultMap.put("err_no",0);
resultMap.put("err_tips","success");
}
}

return resultMap;
} catch (Exception e){
logger.error(e.getMessage());


+ 39
- 40
mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java Просмотреть файл

@@ -193,47 +193,46 @@ public class CouponOrderExpiringSchedule {
}

if (co.getAutoRefund().equals(EnumCouponAutoRefund.UNSUPPORTED.getCode())){
// 不设退款,只能走微信分账-分账完结,把钱给分给商场
try {
WxPayOrder wxPayOrder = new WxPayOrder();
wxPayOrder.updateTenantInfo(co);
// Long orderId = co.getOrderId();
// if (!EnumComposeOrder.isSingle(co.getComposeOrderType())) {
// orderId = co.getComposeOrderId();
//todo 过期不退款 不设解冻(30天自动解冻)--不会抽取任何费用, 防止解冻后退款有问题
// try {
// WxPayOrder wxPayOrder = new WxPayOrder();
// wxPayOrder.updateTenantInfo(co);
//// Long orderId = co.getOrderId();
//// if (!EnumComposeOrder.isSingle(co.getComposeOrderType())) {
//// orderId = co.getComposeOrderId();
//// }
// wxPayOrder.setOrderId(co.getComposeOrderId());
// wxPayOrder.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode());
// wxPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper(wxPayOrder));
//
// if (wxPayOrder != null) {
// WxSharingOrderDto wxSharingOrderDto = new WxSharingOrderDto();
// wxSharingOrderDto.setCUserId(wxPayOrder.getCUserId());
// wxSharingOrderDto.setMerchantId(0L);
// wxSharingOrderDto.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE_FINISH.getCode());
// wxSharingOrderDto.setPayAmount(wxPayOrder.getPayAmount());
// wxSharingOrderDto.setOrderId(wxPayOrder.getId());
// wxSharingOrderDto.setSingleOrderId(co.getOrderId());
// wxSharingOrderDto.setSingleOrderAmount(co.getCouponPrice());
// wxSharingOrderDto.setPayTimeStart(wxPayOrder.getPayTimeStart());
// wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd());
// wxSharingOrderDto.updateTenantInfo(wxPayOrder);
// wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId());
// WxComposeChildOrderShare share = wxPayOrder.getChildOrderShare(co.getOrderId());
// if (share.getRateAmount() != null) {
// // 实际分账金额为 分账金额 + 通道费差
// wxSharingOrderDto.setMerchantShareAmount(share.getShareAmount()+share.getRateAmount());
// } else {
// // 未设置通道费差
// wxSharingOrderDto.setMerchantShareAmount(share.getShareAmount());
// }
// wxProfitSharingOrderService.createSharingOrder(wxSharingOrderDto,wxPayOrder);
// }
wxPayOrder.setOrderId(co.getComposeOrderId());
wxPayOrder.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode());
wxPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper(wxPayOrder));

//todo EnumPayShare.YES.getCode().equals(wxPayOrder.getShare()) 临时判断只有分账的才去分账
if (wxPayOrder != null && EnumPayShare.YES.getCode().equals(wxPayOrder.getShare())) {
WxSharingOrderDto wxSharingOrderDto = new WxSharingOrderDto();
wxSharingOrderDto.setCUserId(wxPayOrder.getCUserId());
wxSharingOrderDto.setMerchantId(0L);
wxSharingOrderDto.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE_FINISH.getCode());
wxSharingOrderDto.setPayAmount(wxPayOrder.getPayAmount());
wxSharingOrderDto.setOrderId(wxPayOrder.getId());
wxSharingOrderDto.setSingleOrderId(co.getOrderId());
wxSharingOrderDto.setSingleOrderAmount(co.getCouponPrice());
wxSharingOrderDto.setPayTimeStart(wxPayOrder.getPayTimeStart());
wxSharingOrderDto.setPayTimeEnd(wxPayOrder.getPayTimeEnd());
wxSharingOrderDto.updateTenantInfo(wxPayOrder);
wxSharingOrderDto.setTransactionId(wxPayOrder.getTransactionId());
WxComposeChildOrderShare share = wxPayOrder.getChildOrderShare(co.getOrderId());
if (share.getRateAmount() != null) {
// 实际分账金额为 分账金额 + 通道费差
wxSharingOrderDto.setMerchantShareAmount(share.getShareAmount()+share.getRateAmount());
} else {
// 未设置通道费差
wxSharingOrderDto.setMerchantShareAmount(share.getShareAmount());
}
wxProfitSharingOrderService.createSharingOrder(wxSharingOrderDto,wxPayOrder);
}

} catch (MallinkException e) {
logger.error("券过期不退款: " + co.getId() + " ERROR:" + e.getMessage(),e);
throw new MallinkException(e.getErrorCode(), e.getMessage());
}
//
// } catch (MallinkException e) {
// logger.error("券过期不退款: " + co.getId() + " ERROR:" + e.getMessage(),e);
// throw new MallinkException(e.getErrorCode(), e.getMessage());
// }

if(bStockBack) {
// 库存退回


+ 7
- 6
mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java Просмотреть файл

@@ -66,12 +66,13 @@ public class SharingOrderRedoSchedule {
// wxPayOrder.updateTenantInfo(sharingOrder);
// wxPayOrder.setId(sharingOrder.getOrderId());
// wxPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper(wxPayOrder));
// if (null == wxPayOrder) {
// logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getMessage()
// + " ID:" +sharingOrder.getId()
// + " RES: wxPayOrder is null." );
// }
ResultData result = wxProfitSharingOrderService.redoSharingOrder(sharingOrder);
WxPayOrder wxPayOrder = wxPayOrderMapper.selectById(sharingOrder.getOrderId(),sharingOrder.getTenantId());
if (null == wxPayOrder) {
logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getMessage()
+ " ID:" +sharingOrder.getId()
+ " RES: wxPayOrder is null." );
}
ResultData result = wxProfitSharingOrderService.redoSharingOrder(sharingOrder,wxPayOrder);
if (result.code != ResultData.SUCCESS) {
logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getMessage()
+ " ID:" +sharingOrder.getId()


+ 4
- 2
mallinkService/src/main/java/com/iformall/service/WxProfitSharingOrderService.java Просмотреть файл

@@ -26,7 +26,7 @@ public interface WxProfitSharingOrderService {
/**
* 分账重试
*/
ResultData redoSharingOrder(WxProfitSharingOrder sharingOrder);
ResultData redoSharingOrder(WxProfitSharingOrder sharingOrder,WxPayOrder payOrder);

/**
* 分账完结重试
@@ -51,7 +51,9 @@ public interface WxProfitSharingOrderService {
Map<String,Object> queryOrderSummary(TenantEntity tenantEntity);

ResultData findOrderDetails(Long id,String tenantId);

WxProfitSharingOrder findOne(WxProfitSharingOrder wxProfitSharingOrder);

// void updatetttttttttttttt(String tenantId);

// ResultData handerSharingOrder(WxProfitSharingOrder sharingOrder);


+ 34
- 19
mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java Просмотреть файл

@@ -139,14 +139,14 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
}

@Override
@Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class})
public ResultData redoSharingOrder(WxProfitSharingOrder sharingOrder) {
// @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class})
public ResultData redoSharingOrder(WxProfitSharingOrder sharingOrder,WxPayOrder payOrder) {

if(!EnumProfitSharingOrderStatus.shareStatus().contains(sharingOrder.getSharingStatus())){
return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),"分账状态不允许");
}

PayShareAdapterService payShareAdapterService = payServiceFactory.getPayShareAdapterService(sharingOrder.getPayVendor(),sharingOrder.getPayVersion());
PayShareAdapterService payShareAdapterService = payServiceFactory.getPayShareAdapterService(payOrder.getPayVendor(),payOrder.getPayVersion());
Date currentDate = new Date();
PayShareResult shareResult = null;

@@ -157,7 +157,13 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),"未获取到达人佣金");
}

WxComposeChildOrderShare wxComposeChildOrderShare = JSONObject.parseObject(sharingOrder.getPointDeduction(), WxComposeChildOrderShare.class);
WxComposeChildOrderShare wxComposeChildOrderShare = null;
if(sharingOrder.getSingleOrderId() != null){
wxComposeChildOrderShare = payOrder.getChildOrderShare(sharingOrder.getSingleOrderId());
}else{
wxComposeChildOrderShare = payOrder.getSingleChildOrderShare();
}

wxComposeChildOrderShare.setCpsCommission(cpsCommission);
//添加分账账号: 系统抽点,销售提成,商场扣点,平台(微信,抖音)抽佣
int systemAmount = wxComposeChildOrderShare.getSystemAmount();//系统抽点
@@ -170,6 +176,9 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ

JSONArray receivers = new JSONArray();//分账参数json
//todo
// 1.总分模式下 不分账(只分给各个抽成方)如果各个抽成方为0 则直接解冻
// 2.总分模式下 分账 (分账给商家及各个抽成方)
// 3.直连模式下 不分账和分账一样(只分账给各个抽成方)如果各种抽成金额为0 则直接解冻
if(systemAmount > 0){
//todo 查询系统抽点到账帐号 jsonArray.add()
}
@@ -180,8 +189,9 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
//todo 查询商场抽点到账帐号 jsonArray.add()
//需要判断当前订单收款帐号非商场抽点到账帐号
}
WxProfitSharingReceiver receiver = payShareAdapterService.getReceiver(sharingOrder,sharingOrder.getMerchantId(),null,sharingOrder.getMchType());
if(EnumPayMchType.TOTAL.getCode().equals(sharingOrder.getMchType())){

WxProfitSharingReceiver receiver = payShareAdapterService.getReceiver(sharingOrder,sharingOrder.getMerchantId(),payOrder.getTtPayWay(),sharingOrder.getMchType());
if(EnumPayMchType.TOTAL.getCode().equals(payOrder.getMchType()) && EnumPayShare.YES.getCode().equals(payOrder.getShare())){
JSONObject jo = new JSONObject();
jo.put("type",payShareAdapterService.getShareAccount(receiver.getReceiverType()).getMessage());
jo.put("account",receiver.getReceiverAccount());
@@ -191,7 +201,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
receivers.add(jo);
}

EnumPayWay enumPayWay = EnumPayWay.getEnum(sharingOrder.getPayVendor());
EnumPayWay enumPayWay = EnumPayWay.getEnum(payOrder.getPayVendor());
EnumAppPlat enumPlat = enumPayWay.getPlat();

WxAppinfo cAppInfo = wxAppinfoService.getCAppInfo(sharingOrder, enumPlat);
@@ -211,29 +221,29 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
updSharingOrder.updateTenantInfo(sharingOrder);
updSharingOrder.setId(sharingOrder.getId());
updSharingOrder.setOutSettleNo(sharingOrder.getOutSettleNo());
if (!shareResult.isSuccess()) {

updSharingOrder.setUpdateTime(currentDate);

if(shareResult.isSuccess()){
updSharingOrder.setSharingOrderNo(shareResult.getShareOrderNo());
updSharingOrder.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_ACCEPTED.getCode());
updSharingOrder.setErrorMsg("");
}else{
updSharingOrder.setSharingStatus(shareResult.getCode());
updSharingOrder.setErrorMsg(shareResult.getMsg());
updSharingOrder.setUpdateTime(currentDate);
wxProfitSharingOrderMapper.updateById(updSharingOrder);
return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),updSharingOrder.getErrorMsg());
}
updSharingOrder.setPointDeduction(JSON.toJSONString(wxComposeChildOrderShare));
updSharingOrder.setReceivers(JSON.toJSONString(receivers));
updSharingOrder.setSharingOrderNo(shareResult.getShareOrderNo());
updSharingOrder.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_ACCEPTED.getCode());
updSharingOrder.setErrorMsg("");
updSharingOrder.setUpdateTime(currentDate);
wxProfitSharingOrderMapper.updateById(updSharingOrder);

if(EnumPayMchType.DIRECT.getCode().equals(sharingOrder.getMchType())){
if(EnumPayMchType.DIRECT.getCode().equals(payOrder.getMchType()) || EnumPayShare.NO.getCode().equals(payOrder.getShare())){
//如果是直连 把分给商户的钱记录下来
JSONObject jo = new JSONObject();
jo.put("type",payShareAdapterService.getShareAccount(receiver.getReceiverType()).getMessage());
jo.put("account",receiver.getReceiverAccount());
jo.put("amount", receiver.getSharingAmount());
jo.put("merchantId",receiver.getMerchantId());
jo.put("description",receiver.getId().toString()); //为重试做准备
jo.put("description",receiver.getId().toString());
receivers.add(jo);
}
try{
@@ -256,7 +266,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
logger.info("记账失败"+sharingOrder.getId());
}

return new ResultData(shareResult.getData());
return new ResultData(shareResult);
}


@@ -314,7 +324,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
}

//实际调用分账
ResultData resultData = redoSharingOrder(record);
ResultData resultData = redoSharingOrder(record,payOrder);
return resultData;
}

@@ -464,6 +474,11 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
return new ResultData(result);
}

@Override
public WxProfitSharingOrder findOne(WxProfitSharingOrder wxProfitSharingOrder) {
return wxProfitSharingOrderMapper.selectOne(new QueryWrapper<>(wxProfitSharingOrder));
}

public void queryMerchantCount(TenantEntity tenantEntity, Map<String, Object> result) {
String systemTime = DateUtils.getSystemTime("yyyy-MM-dd");
//全部商户个数


Загрузка…
Отмена
Сохранить