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