Просмотр исходного кода

[核销、分账][修复]:核销与核销发券、分账分离

release_toaliyun_real
Stormeye.Wu 7 лет назад
Родитель
Сommit
e3d74cbf22
4 измененных файлов: 74 добавлений и 36 удалений
  1. +17
    -0
      mallinkService/src/main/java/com/simple/pay/WxProfitSharingP.java
  2. +4
    -0
      mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java
  3. +46
    -32
      mallinkService/src/main/java/com/simple/service/impl/WxCouponOrderServiceImpl.java
  4. +7
    -4
      mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingOrderServiceImpl.java

+ 17
- 0
mallinkService/src/main/java/com/simple/pay/WxProfitSharingP.java Просмотреть файл

@@ -94,4 +94,21 @@ public class WxProfitSharingP implements Serializable {
this.receivers = receivers;
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("WxPayOrderSQ{");
sb.append("appid='").append(appid).append('\'');
sb.append(", sub_appid='").append(sub_appid).append('\'');
sb.append(", mch_id='").append(mch_id).append('\'');
sb.append(", sub_mch_id='").append(sub_mch_id).append('\'');
sb.append(", nonce_str='").append(nonce_str).append('\'');
sb.append(", sign='").append(sign).append('\'');
sb.append(", sign_type='").append(sign_type).append('\'');
sb.append(", transaction_id='").append(transaction_id).append('\'');
sb.append(", out_order_no='").append(out_order_no).append('\'');
sb.append(", receivers='").append(receivers).append('\'');
sb.append('}');
return sb.toString();
}

}

+ 4
- 0
mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java Просмотреть файл

@@ -3,6 +3,8 @@ package com.simple.service;
import com.github.pagehelper.PageInfo;
import com.simple.common.ResultData;
import com.simple.domain.po.WxCouponOrder;
import com.simple.domain.po.WxMerchantBUser;
import com.simple.domain.po.WxOrder;
import com.simple.domain.vo.CUserDateAmountVo;

import java.util.Date;
@@ -63,6 +65,8 @@ public interface WxCouponOrderService {
*/
ResultData verify(Long couponOrderId, Long bUserId);

ResultData couponOrderVerify(WxCouponOrder wxCouponOrder, WxMerchantBUser wxMerchantBUser, WxOrder wxOrder);

/**
* 根据日期 b用户查券list
*


+ 46
- 32
mallinkService/src/main/java/com/simple/service/impl/WxCouponOrderServiceImpl.java Просмотреть файл

@@ -295,9 +295,35 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
}
}


@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public ResultData couponOrderVerify(WxCouponOrder wxCouponOrder, WxMerchantBUser wxMerchantBUser, WxOrder wxOrder) {
if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) {
logger.error("已过期: couponOrder-" + wxCouponOrder.getId());
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME);
}
if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()) {
logger.error("已退款: couponOrder-" + wxCouponOrder.getId());
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_INVALID);
}
if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) {
logger.error("已经核销过的券: couponOrder-" + wxCouponOrder.getId());
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED);
}
try {
wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销
wxCouponOrder.setBUserId(wxMerchantBUser.getBUserId());
wxCouponOrder.setUpdateDate(new Date());
wxCouponOrderMapper.updateByPrimaryKeySelective(wxCouponOrder);
} catch (Exception e) {
logger.error("db failed: couponOrder-" + wxCouponOrder.getId() + ", e:" + e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage());
}

return new ResultData(wxCouponOrder);
}

@Override
public ResultData verify(Long couponOrderId, Long bUserId) {

WxCouponOrder wxCouponOrder = wxCouponOrderMapper.selectByPrimaryKey(couponOrderId);
@@ -319,42 +345,30 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL);
}

if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) {
logger.error("已过期: couponOrder-" + couponOrderId);
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME);
}
if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()) {
logger.error("已退款: couponOrder-" + couponOrderId);
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_INVALID);
}
if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) {
logger.error("已经核销过的券: couponOrder-" + couponOrderId);
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED);
}
ResultData rd = couponOrderVerify(wxCouponOrder, wxMerchantBUser, wxOrder);

// 核销发券
try {
wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销
wxCouponOrder.setBUserId(bUserId);
wxCouponOrder.setUpdateDate(new Date());
wxCouponOrderMapper.updateByPrimaryKeySelective(wxCouponOrder);
wxCouponSendService.sendCouponToUser(wxMerchantBUser.getTenantId(), wxOrder.getCUserId(), EnumCouponSendType.COUPON_VERIFY.getCode());
} catch (Exception e) {
logger.error("db failed: couponOrder-" + couponOrderId + ", e:" + e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage());
logger.error("核销发券: " + e.getMessage());
}

// 核销发券
wxCouponSendService.sendCouponToUser(wxMerchantBUser.getTenantId(), wxOrder.getCUserId(), EnumCouponSendType.COUPON_VERIFY.getCode());


// 微信分账
WxPayOrder wxPayOrder = new WxPayOrder();
wxPayOrder.setOrderId(wxCouponOrder.getOrderId());
wxPayOrder.setPayOrderStatus(EnumPayStatus.PAY_WAY_SUCCESS.getCode());
wxPayOrder = wxPayOrderMapper.selectOne(wxPayOrder);
if (wxPayOrder == null)
throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND);
if (wxPayOrder.getShare() == EnumPayShare.YES.getCode())
wxProfitSharingOrderService.createSharingOrder(wxPayOrder);
return new ResultData(wxCouponOrder);
try {
WxPayOrder wxPayOrder = new WxPayOrder();
wxPayOrder.setOrderId(wxCouponOrder.getOrderId());
wxPayOrder.setPayOrderStatus(EnumPayStatus.PAY_WAY_SUCCESS.getCode());
wxPayOrder = wxPayOrderMapper.selectOne(wxPayOrder);
if (wxPayOrder == null)
throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND);
if (wxPayOrder.getShare() == EnumPayShare.YES.getCode())
wxProfitSharingOrderService.createSharingOrder(wxPayOrder);
} catch (Exception e) {
logger.error("微信分账: " + e.getMessage());
}

return rd;
}

@Override


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

@@ -23,6 +23,7 @@ import com.simple.pay.WxProfitSharingQueryP;
import com.simple.service.WxProfitSharingOrderService;
import com.simple.utils.BeanUtils;
import com.simple.utils.Utility;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.simple.common.IdWorker;
@@ -31,6 +32,7 @@ import com.simple.common.IdWorker;

@Service
public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderService {
private Logger logger = Logger.getLogger(getClass());
@Autowired
WxProfitSharingOrderMapper wxProfitSharingOrderMapper;
@@ -214,8 +216,9 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
wxProfitSharingP.setReceivers(receivers.toJSONString());

wxProfitSharingP.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(wxProfitSharingP), payAccount.getApiKey()));
logger.info("wxProfitSharingP :" + wxProfitSharingP.toString());
String response = WxProfitSharing.pushOrder(BeanUtils.toStringMap(wxProfitSharingP), payAccount.getCertPath(), payAccount.getMchId());
logger.info("response: " + response);
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String return_code = returnMap.get("return_code");
if (!"SUCCESS".equals(return_code)) {
@@ -225,9 +228,9 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
throw new MallinkException(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(), returnMap.get("return_msg"));
}

if (!WxPayment.verifyNotifyHMAC(returnMap,payAccount.getApiKey())){
throw new MallinkException(ErrorCode.PROFIT_SHARING_RETURN_INVALID.getCode(), ErrorCode.PROFIT_SHARING_RETURN_INVALID.getMessage());
}
//if (!WxPayment.verifyNotifyHMAC(returnMap,payAccount.getApiKey())){
// throw new MallinkException(ErrorCode.PROFIT_SHARING_RETURN_INVALID.getCode(), ErrorCode.PROFIT_SHARING_RETURN_INVALID.getMessage());
//}

String result_code = returnMap.get("result_code");
if (!"SUCCESS".equals(result_code)) {


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