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

[卡券][新增]:券补贴计算并入库

release_toaliyun_real
hupeng 7 лет назад
Родитель
Сommit
0c2c3ef25a
3 измененных файлов: 100 добавлений и 8 удалений
  1. +8
    -8
      mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java
  2. +5
    -0
      mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java
  3. +87
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java

+ 8
- 8
mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java Просмотреть файл

@@ -123,28 +123,28 @@ public class WxCouponOrderController extends BaseController {
logger.error("核销异常: " + e.getMessage());
return new ResultData(ErrorCode.VERIFY_ERROR, e.getMessage());
}
// 核销分账
if (couponOrder != null) {
try {
// 核销分账
wxCouponOrderService.shareAfterVerify(couponOrder, getUser().getMerchantId());
// 核销补贴
wxCouponOrderService.subsidyAfterVerify(couponOrder, getUser().getMerchantId());
} catch (Exception e) {
logger.error(e.getMessage());
}
}

boolean bSentCoupon = false;

// 核销发券
if (couponOrder != null) {
boolean bSentCoupon = false;

// 核销发券
try {
bSentCoupon = wxCouponOrderService.sendCouponAfterVerify(couponOrder, getUser());
} catch (Exception e) {
logger.error(e.getMessage());
}
}

// 核销发模板消息
if (couponOrder != null) {
// 核销发模板消息
try {
wxCouponOrderService.sendVerifyMsg(couponOrder, getUser(), bSentCoupon);
} catch (Exception e) {


+ 5
- 0
mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java Просмотреть файл

@@ -76,6 +76,11 @@ public interface WxCouponOrderService {
*/
void shareAfterVerify(WxCouponOrder couponOrder, Long merchantId);

/**
* 核销后补贴
* @param couponOrder
*/
void subsidyAfterVerify(WxCouponOrder couponOrder, Long merchantId);
/**
* 核销模板消息
* @param couponOrder


+ 87
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java Просмотреть файл

@@ -83,6 +83,11 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
@Autowired
WxAppinfoService wxAppinfoService;

@Autowired
WxMerchantSubsidyMapper wxMerchantSubsidyMapper;

@Autowired
WxPayAccountMapper wxPayAccountMapper;

@Override
public PageInfo<WxCouponOrder> listAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize) {
@@ -390,6 +395,88 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService {
}
}


// 补贴
@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public void subsidyAfterVerify(WxCouponOrder couponOrder, Long merchantId) {
final IdWorker idWorker = IdWorker.get();

WxCouponMerchant couponMerchantQ = new WxCouponMerchant();

couponMerchantQ.setProductId(couponOrder.getCouponId());
couponMerchantQ.setMerchantId(merchantId);
WxCouponMerchant couponMerchant;
try {
couponMerchant = wxCouponMerchantMapper.selectOne(couponMerchantQ);
}catch (Exception e) {
logger.error("查找所属卡券商户错误: " + "CouponId:" + couponMerchantQ.getProductId(), " merchantId:" + merchantId );
throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR);
}

if (couponMerchant == null) {
logger.error("未找到所属卡券商户: " + "CouponId:" + couponMerchantQ.getProductId(), " merchantId:" + merchantId);
throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR);
}

// coupon 补贴 rate
Integer subsidyRate = 0;
if(couponMerchant.getParameter() != null) {
try {
subsidyRate = Integer.valueOf(couponMerchant.getParameter());
} catch (Exception e) {
logger.error("补贴比例计算不合法:" + "CouponId:" + couponMerchantQ.getProductId(), " merchantId:" + merchantId);
throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR);
}
} else {
logger.info("无补贴参数:" + "CouponId:" + couponMerchantQ.getProductId(), " merchantId:" + merchantId);
}

WxCoupon coupon;
try {
coupon = wxCouponMapper.selectByPrimaryKey(couponOrder.getCouponId());
}catch (Exception e) {
logger.error("查找卡券错误: " + "CouponId:" + couponMerchantQ.getProductId());
throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR);
}

WxAppinfo wxAppinfo = wxAppinfoService.getCAppInfo(couponOrder.getTenantId());
WxPayAccount payAccount = wxPayAccountMapper.selectByPrimaryKey(wxAppinfo.getPayId());

Integer subsidyFee = (coupon.getPrice() - coupon.getSalePrice()) * subsidyRate / 10000;
if (subsidyFee > 0) {
// 有补贴时入库
Double dSubChargeFee = Math.ceil(subsidyFee * 1.0D * payAccount.getRate() / 10000);
Integer realSubsidyFee = subsidyFee - dSubChargeFee.intValue();

Double priceChargeFee = Math.ceil(coupon.getSalePrice() * 1.0D * payAccount.getRate() / 10000);
Integer realPayment = coupon.getSalePrice() - priceChargeFee.intValue();

WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy();
merchantSubsidy.setId(idWorker.nextId());
merchantSubsidy.setTenantId(couponOrder.getTenantId());
merchantSubsidy.setOrderId(couponOrder.getOrderId());
merchantSubsidy.setOrderType(EnumOrderType.COUPON.getCode());
merchantSubsidy.setMerchantId(merchantId);
merchantSubsidy.setCouponOrderId(couponOrder.getId());
merchantSubsidy.setCouponType(EnumCouponType.COUPON_MULTIMCH.getCode());
merchantSubsidy.setOrderPayment(coupon.getPrice());
merchantSubsidy.setReceiverPayment(coupon.getSalePrice());
merchantSubsidy.setRealPayment(realPayment);
merchantSubsidy.setSubsidy(subsidyFee);
merchantSubsidy.setRealSubsidy(realSubsidyFee);
merchantSubsidy.setStatus(EnumMerchantSubsidyStatus.NOT_SUBSIDY.getCode());
merchantSubsidy.setCreateDate(new Date());
merchantSubsidy.setUpdateDate(new Date());
try {
wxMerchantSubsidyMapper.insertSelective(merchantSubsidy);
} catch (Exception e) {
logger.error("数据库插入错误:" + e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL);
}
}
}

@Override
public boolean sendCouponAfterVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser) {
// 核销发券


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