diff --git a/mallinkService/src/main/java/com/simple/pay/WxProfitSharingP.java b/mallinkService/src/main/java/com/simple/pay/WxProfitSharingP.java index 38cea0e08..49f81226a 100644 --- a/mallinkService/src/main/java/com/simple/pay/WxProfitSharingP.java +++ b/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(); + } + } diff --git a/mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java index eeb5e4c1a..bfc38c53b 100644 --- a/mallinkService/src/main/java/com/simple/service/WxCouponOrderService.java +++ b/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 * diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxCouponOrderServiceImpl.java index 74772197c..4eaf5aeed 100644 --- a/mallinkService/src/main/java/com/simple/service/impl/WxCouponOrderServiceImpl.java +++ b/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 diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingOrderServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingOrderServiceImpl.java index 4d2a37d36..30d6d84b2 100644 --- a/mallinkService/src/main/java/com/simple/service/impl/WxProfitSharingOrderServiceImpl.java +++ b/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 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)) {