| @@ -411,10 +411,16 @@ public class WxMicroPayController extends BaseController { | |||||
| } | } | ||||
| wxCouponOrder = wxCouponOrderService.getById(couponOrderId); | wxCouponOrder = wxCouponOrderService.getById(couponOrderId); | ||||
| } | } | ||||
| WxPayOrder couponPayOrder = null; | |||||
| Integer remainPrice = payPrice; | Integer remainPrice = payPrice; | ||||
| if (wxCouponOrder != null) { | if (wxCouponOrder != null) { | ||||
| try { | 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) { | } catch (MallinkException e) { | ||||
| logger.error("核销异常: " + e.getMessage()); | logger.error("核销异常: " + e.getMessage()); | ||||
| return new ResultData(e.getErrorCode(), e.getMessage()); | return new ResultData(e.getErrorCode(), e.getMessage()); | ||||
| @@ -449,22 +455,17 @@ public class WxMicroPayController extends BaseController { | |||||
| } | } | ||||
| } else { | } 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 { | try { | ||||
| wxPayOrderService.handleMicroOrderPaySuccessForVerify(user, record); | |||||
| wxPayOrderService.handleMicroOrderPaySuccessForVerify(user, couponPayOrder); | |||||
| Map map = new HashMap(); | Map map = new HashMap(); | ||||
| map.put("end", "1"); | map.put("end", "1"); | ||||
| return new ResultData(map); | return new ResultData(map); | ||||
| } catch (MallinkException e) { | } 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()); | return new ResultData(e.getErrorCode(), e.getMessage()); | ||||
| } catch (Exception e) { | } 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()); | return new ResultData(ErrorCode.PAY_ORDER_ERROR, e.getMessage()); | ||||
| } | } | ||||
| } | } | ||||
| @@ -3,10 +3,7 @@ package com.iformall.service; | |||||
| import com.alibaba.fastjson.JSONArray; | import com.alibaba.fastjson.JSONArray; | ||||
| import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
| import com.iformall.common.ResultData; | 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 com.iformall.domain.vo.*; | ||||
| import javax.servlet.http.HttpServletRequest; | import javax.servlet.http.HttpServletRequest; | ||||
| @@ -198,8 +195,13 @@ public interface WxCouponOrderService { | |||||
| */ | */ | ||||
| JSONArray queryMicroPayCouponOrder(WxMerchantBUser user, WxCUser cUser, Integer price); | 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 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 | @Override | ||||
| public void sendInsideCouponVerifyMsg(String tenantId, Long couponOrderId, Long buUserId) { | public void sendInsideCouponVerifyMsg(String tenantId, Long couponOrderId, Long buUserId) { | ||||
| FmInsideCouponVerifyMsg verifyMsg = new FmInsideCouponVerifyMsg(); | FmInsideCouponVerifyMsg verifyMsg = new FmInsideCouponVerifyMsg(); | ||||
| @@ -1153,7 +1181,7 @@ 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 Integer microPayPreVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer payPrice) { | |||||
| public WxPayOrder microPayPreVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer payPrice) { | |||||
| // 1. 获取券信息 | // 1. 获取券信息 | ||||
| WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId()); | WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId()); | ||||
| if (wxCoupon == null) { | if (wxCoupon == null) { | ||||
| @@ -1245,7 +1273,11 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| setPayTimeStart(curDate); | setPayTimeStart(curDate); | ||||
| setPayTimeEnd(curDate); | setPayTimeEnd(curDate); | ||||
| setPayOrderNo(String.valueOf(id)); | 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()); | setPayVendor(EnumPayWay.PAY_WAY_WEAPP.getCode()); | ||||
| setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); | setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode()); | ||||
| setShare(EnumPayShare.NO.getCode()); | setShare(EnumPayShare.NO.getCode()); | ||||
| @@ -1259,16 +1291,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| logger.error("payOrder error"); | 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 | @Override | ||||
| @@ -1289,4 +1312,22 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| return 0; | 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 { | try { | ||||
| WxPayOrder unPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper<>(payOrderQ)); | WxPayOrder unPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper<>(payOrderQ)); | ||||
| if (unPayOrder != null) { | 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) { | if (unPayOrder.getPosPayOrderId() != null) { | ||||
| try { | try { | ||||
| wxCouponOrderService.microPayVerify(user, unPayOrder.getPosPayOrderId()); | wxCouponOrderService.microPayVerify(user, unPayOrder.getPosPayOrderId()); | ||||
| @@ -1452,27 +1463,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||||
| WxAppinfo appinfo = wxAppinfoService.getCAppInfo(order.getTenantId()); | WxAppinfo appinfo = wxAppinfoService.getCAppInfo(order.getTenantId()); | ||||
| if (record.getPayAmount().equals(0)) { | 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 { | } else { | ||||
| throw new MallinkException(ErrorCode.PAY_ORDER_ERROR); | 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) { | public void createMerchantSubsidy(WxPayOrder record, WxOrder order, Date curDate) { | ||||
| final IdWorker idWorker = IdWorker.get(); | final IdWorker idWorker = IdWorker.get(); | ||||
| WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy(); | WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy(); | ||||