Просмотр исходного кода

[收银台][修改]:收银台实际支付

release_toaliyun_real
Stormeye Wu 6 лет назад
Родитель
Сommit
ad593e6941
4 измененных файлов: 119 добавлений и 48 удалений
  1. +11
    -10
      mallinkBApi/src/main/java/com/iformall/controller/WxMicroPayController.java
  2. +7
    -5
      mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java
  3. +53
    -12
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java
  4. +48
    -21
      mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java

+ 11
- 10
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());
}
}


+ 7
- 5
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);

}

+ 53
- 12
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;
}

}

+ 48
- 21
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();


Загрузка…
Отмена
Сохранить