Explorar el Código

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

release_toaliyun_real
Stormeye.Wu hace 7 años
padre
commit
e3d74cbf22
Se han modificado 4 ficheros con 74 adiciones y 36 borrados
  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 Ver fichero

@@ -94,4 +94,21 @@ public class WxProfitSharingP implements Serializable {
this.receivers = receivers; 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 Ver fichero

@@ -3,6 +3,8 @@ package com.simple.service;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.simple.common.ResultData; import com.simple.common.ResultData;
import com.simple.domain.po.WxCouponOrder; 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 com.simple.domain.vo.CUserDateAmountVo;


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


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

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


+ 46
- 32
mallinkService/src/main/java/com/simple/service/impl/WxCouponOrderServiceImpl.java Ver fichero

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



@Override @Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @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) { public ResultData verify(Long couponOrderId, Long bUserId) {


WxCouponOrder wxCouponOrder = wxCouponOrderMapper.selectByPrimaryKey(couponOrderId); WxCouponOrder wxCouponOrder = wxCouponOrderMapper.selectByPrimaryKey(couponOrderId);
@@ -319,42 +345,30 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); 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 { 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) { } 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 @Override


+ 7
- 4
mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingOrderServiceImpl.java Ver fichero

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


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


wxProfitSharingP.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(wxProfitSharingP), payAccount.getApiKey())); 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()); String response = WxProfitSharing.pushOrder(BeanUtils.toStringMap(wxProfitSharingP), payAccount.getCertPath(), payAccount.getMchId());
logger.info("response: " + response);
Map<String, String> returnMap = WxPayment.xmlToMap(response); Map<String, String> returnMap = WxPayment.xmlToMap(response);
String return_code = returnMap.get("return_code"); String return_code = returnMap.get("return_code");
if (!"SUCCESS".equals(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")); 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"); String result_code = returnMap.get("result_code");
if (!"SUCCESS".equals(result_code)) { if (!"SUCCESS".equals(result_code)) {


Cargando…
Cancelar
Guardar