| @@ -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(); | |||||
| } | |||||
| } | } | ||||
| @@ -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 | ||||
| * | * | ||||
| @@ -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 | ||||
| @@ -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)) { | ||||