From ad593e6941faa59b6b94697b049955764f4d4bba Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 31 Oct 2019 18:28:38 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=94=B6=E9=93=B6=E5=8F=B0][=E4=BF=AE?= =?UTF-8?q?=E6=94=B9]:=E6=94=B6=E9=93=B6=E5=8F=B0=E5=AE=9E=E9=99=85?= =?UTF-8?q?=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WxMicroPayController.java | 21 +++--- .../service/WxCouponOrderService.java | 12 ++-- .../impl/WxCouponOrderServiceImpl.java | 65 +++++++++++++---- .../service/impl/WxPayOrderServiceImpl.java | 69 +++++++++++++------ 4 files changed, 119 insertions(+), 48 deletions(-) diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java index a7cc778d8..ca8084873 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java @@ -411,10 +411,16 @@ public class WxMicroPayController extends BaseController { } wxCouponOrder = wxCouponOrderService.getById(couponOrderId); } + WxPayOrder couponPayOrder = null; Integer remainPrice = payPrice; if (wxCouponOrder != null) { try { - remainPrice = wxCouponOrderService.microPayPreVerify(microOrder, wxCouponOrder, wxMerchantBUser, payPrice); + couponPayOrder = wxCouponOrderService.microPayPreVerify(microOrder, wxCouponOrder, wxMerchantBUser, payPrice); + remainPrice = microOrder.getPayment() - couponPayOrder.getPayAmount(); + WxOrder updateOrder = new WxOrder(); + updateOrder.setId(microOrder.getId()); + updateOrder.setRealPayment(remainPrice); + wxOrderService.saveOrUpdate(updateOrder); } catch (MallinkException e) { logger.error("核销异常: " + e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); @@ -449,22 +455,17 @@ public class WxMicroPayController extends BaseController { } } else { // 支付完成 - WxPayOrder record = new WxPayOrder(); - record.setTenantId(user.getTenantId()); - record.setOrderId(microOrder.getId()); - record.setCUserId(microOrder.getCUserId()); - record.setPayAmount(remainPrice); - record.setIp(ipStr); + couponPayOrder.setIp(ipStr); try { - wxPayOrderService.handleMicroOrderPaySuccessForVerify(user, record); + wxPayOrderService.handleMicroOrderPaySuccessForVerify(user, couponPayOrder); Map map = new HashMap(); map.put("end", "1"); return new ResultData(map); } catch (MallinkException e) { - logger.error("payment wechat, order create error, req 2: " + record.toString() + ", e:" + e.getMessage()); + logger.error("payment wechat, order create error, req 2: " + couponPayOrder.toString() + ", e:" + e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); } catch (Exception e) { - logger.error("payment wechat, order create error, req 3: " + record.toString() + ", e:" + e.getMessage()); + logger.error("payment wechat, order create error, req 3: " + couponPayOrder.toString() + ", e:" + e.getMessage()); return new ResultData(ErrorCode.PAY_ORDER_ERROR, e.getMessage()); } } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java index de22711c8..7ba69fdbe 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java @@ -3,10 +3,7 @@ package com.iformall.service; import com.alibaba.fastjson.JSONArray; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUser; -import com.iformall.domain.po.WxCouponOrder; -import com.iformall.domain.po.WxMerchantBUser; -import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.*; import com.iformall.domain.vo.*; import javax.servlet.http.HttpServletRequest; @@ -198,8 +195,13 @@ public interface WxCouponOrderService { */ JSONArray queryMicroPayCouponOrder(WxMerchantBUser user, WxCUser cUser, Integer price); - Integer microPayPreVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer price); + WxPayOrder microPayPreVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer price); Integer microPayVerify(WxMerchantBUser bUser, Long couponOrderId); + /** + * 尚安停车 + */ + Integer shangAnVerify(Long couponOrderId); + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index 34908733b..ac081b4fe 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -402,6 +402,34 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } } + private void doAfterVerify(WxCouponOrder couponOrder, WxCoupon wxCoupon, WxCUser cuUser) { + // 成长值 + try { + WxOrder order = wxOrderMapper.selectById(couponOrder.getOrderId()); + wxScoreRulesService.addScore2(EnumScoreType.CONSUMPTION, order, wxCoupon.getBusiness()); + } catch (Exception e) { + logger.error("成长值:" + e.getMessage()); + } + + // 积分 + try { + //-------此处为【现金支付】记录增加积分操作------- + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setOperatorType(EnumUserType.CUSER.getCode()); + creditHistory.setOperatorId(cuUser.getId()); + creditHistory.setCUserId(couponOrder.getcUserId()); + creditHistory.setCreateDate(new Date()); + creditHistory.setTenantId(couponOrder.getTenantId()); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setCouponId(wxCoupon.getId()); + creditHistory.setBusinessId(wxCoupon.getBusiness()); + creditHistory.setSpend(couponOrder.getCouponPrice()); + wxCreditHistoryService.saveOrUpdate(creditHistory); + } catch (Exception e) { + logger.error("积分值:" + e.getMessage()); + } + } + @Override public void sendInsideCouponVerifyMsg(String tenantId, Long couponOrderId, Long buUserId) { FmInsideCouponVerifyMsg verifyMsg = new FmInsideCouponVerifyMsg(); @@ -1153,7 +1181,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public Integer microPayPreVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer payPrice) { + public WxPayOrder microPayPreVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer payPrice) { // 1. 获取券信息 WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId()); if (wxCoupon == null) { @@ -1245,7 +1273,11 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { setPayTimeStart(curDate); setPayTimeEnd(curDate); setPayOrderNo(String.valueOf(id)); - setPayAmount(wxCoupon.getPrice()); + if (microOrder.getPayment() > wxCoupon.getPrice()) { + setPayAmount(wxCoupon.getPrice()); + } else { + setPayAmount(microOrder.getPayment()); + } setPayVendor(EnumPayWay.PAY_WAY_WEAPP.getCode()); setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); setShare(EnumPayShare.NO.getCode()); @@ -1259,16 +1291,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { logger.error("payOrder error"); } - Integer remainPrice = payPrice - wxCoupon.getPrice(); - if (remainPrice < 0) { - remainPrice = 0; - } - - WxOrder updateOrder = new WxOrder(); - updateOrder.setId(microOrder.getId()); - updateOrder.setRealPayment(remainPrice); - wxOrderMapper.updateById(updateOrder); - return remainPrice; + return payOrder; } @Override @@ -1289,4 +1312,22 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { return 0; } + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public Integer shangAnVerify(Long couponOrderId) { + WxCouponOrder updateCouponOrder = new WxCouponOrder(); + updateCouponOrder.setId(couponOrderId); + updateCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); + updateCouponOrder.setUpdateDate(new Date()); + // 核销状态更新 + int num = wxCouponOrderMapper.updateById(updateCouponOrder); + if (num == 1) { + WxCouponOrder couponOrder = wxCouponOrderMapper.selectById(couponOrderId); + WxCUser cuUser = wxCUserMapper.selectById(couponOrder.getcUserId()); + WxCoupon coupon = wxCouponMapper.selectById(couponOrder.getCouponId()); + doAfterVerify(couponOrder, coupon, cuUser); + } + return 0; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index 1a56054ec..c2dcd2903 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -1369,6 +1369,17 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { try { WxPayOrder unPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper<>(payOrderQ)); if (unPayOrder != null) { + // 更新券支付状态 + try { + WxPayOrder payOrderCoupon = new WxPayOrder(); + payOrderCoupon.setId(unPayOrder.getId()); + payOrderCoupon.setOrderId(order.getId()); + payOrderCoupon.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + wxPayOrderMapper.updateById(updateOrder); + } catch (Exception e) { + logger.error("支付订单数据库更新失败: " + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "支付订单数据库更新失败: " + e.getMessage()); + } if (unPayOrder.getPosPayOrderId() != null) { try { wxCouponOrderService.microPayVerify(user, unPayOrder.getPosPayOrderId()); @@ -1452,27 +1463,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { WxAppinfo appinfo = wxAppinfoService.getCAppInfo(order.getTenantId()); if (record.getPayAmount().equals(0)) { - // B端收银台核销券处理 - WxPayOrder payOrderQ = new WxPayOrder(); - payOrderQ.setOrderId(order.getId()); - payOrderQ.setPayFrom(EnumPayFrom.INSIDE_B.getCode()); - payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); - try { - WxPayOrder unPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper<>(payOrderQ)); - if (unPayOrder != null) { - if (unPayOrder.getPosPayOrderId() != null) { - try { - wxCouponOrderService.microPayVerify(user, unPayOrder.getPosPayOrderId()); - } catch (Exception e) { - logger.error(e.getMessage()); - } - // 更新后处理 - wxCouponOrderService.sendInsideCouponVerifyMsg(unPayOrder.getTenantId(), unPayOrder.getPosPayOrderId(), user.getId()); - } - } - } catch (Exception e) { - logger.error(e.getMessage()); - } + doCouponPayOrder(user, record, order); } else { throw new MallinkException(ErrorCode.PAY_ORDER_ERROR); } @@ -1490,6 +1481,42 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } } + private void doCouponPayOrder(WxMerchantBUser user, WxPayOrder record, WxOrder order) { + // B端收银台核销券处理 + WxPayOrder payOrderQ = new WxPayOrder(); + payOrderQ.setOrderId(order.getId()); + payOrderQ.setCUserId(record.getCUserId()); + payOrderQ.setPayFrom(EnumPayFrom.INSIDE_B.getCode()); + payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); + try { + WxPayOrder unPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper<>(payOrderQ)); + if (unPayOrder != null) { + // 更新券支付状态 + try { + WxPayOrder payOrderCoupon = new WxPayOrder(); + payOrderCoupon.setId(unPayOrder.getId()); + payOrderCoupon.setOrderId(order.getId()); + payOrderCoupon.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + wxPayOrderMapper.updateById(payOrderCoupon); + } catch (Exception e) { + logger.error("支付订单数据库更新失败: " + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "支付订单数据库更新失败: " + e.getMessage()); + } + if (unPayOrder.getPosPayOrderId() != null) { + try { + wxCouponOrderService.microPayVerify(user, unPayOrder.getPosPayOrderId()); + } catch (Exception e) { + logger.error(e.getMessage()); + } + // 更新后处理 + wxCouponOrderService.sendInsideCouponVerifyMsg(unPayOrder.getTenantId(), unPayOrder.getPosPayOrderId(), user.getId()); + } + } + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + public void createMerchantSubsidy(WxPayOrder record, WxOrder order, Date curDate) { final IdWorker idWorker = IdWorker.get(); WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy();