| @@ -0,0 +1,115 @@ | |||||
| package com.iformall.controller; | |||||
| import com.iformall.common.ErrorCode; | |||||
| import com.iformall.common.ResultData; | |||||
| import com.iformall.domain.po.*; | |||||
| import com.iformall.exception.MallinkException; | |||||
| import com.iformall.service.*; | |||||
| import io.swagger.annotations.Api; | |||||
| import io.swagger.annotations.ApiOperation; | |||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.web.bind.annotation.*; | |||||
| import javax.servlet.http.HttpServletRequest; | |||||
| import java.math.BigDecimal; | |||||
| import java.util.Map; | |||||
| /** | |||||
| * @author Stormeye Wu wuguoqiang@iformall.com | |||||
| */ | |||||
| @RestController | |||||
| @Api(description = "C端扫B端商户码储值卡支付") | |||||
| @RequestMapping("/api/carday") | |||||
| public class WxCardPayController extends BaseController { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| @Autowired | |||||
| WxMerchantService wxMerchantService; | |||||
| @Autowired | |||||
| WxOrderService wxOrderService; | |||||
| @Autowired | |||||
| WxCardSpendService wxCardSpendService; | |||||
| @ApiOperation(value = "C端扫B端商户码支付订单", notes = "params:{\"cardId\":\"String\",\"merchantCode\":\"String\",\"totalFee\":\"String\"}") | |||||
| @PostMapping("order_create") | |||||
| public ResultData saveCardPayOrder(@RequestBody Map<String, String> paramMap, HttpServletRequest request) { | |||||
| String ipStr = getIpAddr(); | |||||
| logger.info("saveCardPayOrder: " + ipStr + " :"+ paramMap.toString()); | |||||
| String cardIdStr = paramMap.get("cardId"); | |||||
| String merchantCode = paramMap.get("merchantCode"); | |||||
| String totalFeeStr = paramMap.get("totalFee"); | |||||
| if (StringUtils.isBlank(cardIdStr)) { | |||||
| logger.error("cardId不能为空"); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardId不能为空"); | |||||
| } | |||||
| if (StringUtils.isBlank(merchantCode)) { | |||||
| logger.error("merchantCode不能为空"); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "merchantCode不能为空"); | |||||
| } | |||||
| if (StringUtils.isBlank(totalFeeStr)) { | |||||
| logger.error("totalFee不能为空"); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "totalFee不能为空"); | |||||
| } | |||||
| Long cardId = null; | |||||
| Long merchantId = null; | |||||
| try { | |||||
| cardId = Long.valueOf(cardIdStr); | |||||
| } catch (Exception e) { | |||||
| logger.error("cardId convert failed:" + cardIdStr); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "cardIdStr转换失败"); | |||||
| } | |||||
| try { | |||||
| merchantId = Long.valueOf(merchantCode); | |||||
| } catch (Exception e) { | |||||
| logger.error("merchantCode convert failed:" + merchantCode); | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "merchantCode转换失败"); | |||||
| } | |||||
| BigDecimal totalFee = new BigDecimal(totalFeeStr); | |||||
| totalFee.setScale(2, BigDecimal.ROUND_HALF_UP); // 第一个变量是小数位数,第二个变量是取舍方法(四舍五入) | |||||
| Integer payment = totalFee.multiply(new BigDecimal(100)).intValue(); | |||||
| WxCUser user = getUser(); | |||||
| WxMerchant merchant = wxMerchantService.getById(merchantId); | |||||
| WxOrder order = null; | |||||
| try { | |||||
| order = wxOrderService.saveCardPayOrder(merchant, totalFeeStr, payment); | |||||
| } catch (MallinkException e) { | |||||
| logger.error("saveCardPayOrder 1" + e.getMessage()); | |||||
| return new ResultData(e.getErrorCode(), e.getMessage()); | |||||
| } catch (Exception e) { | |||||
| logger.error("saveCardPayOrder 2" + e.getMessage()); | |||||
| return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage()); | |||||
| } | |||||
| WxCardSpend record = new WxCardSpend(); | |||||
| record.setTenantId(merchant.getTenantId()); | |||||
| record.setCardId(cardId); | |||||
| record.setOwnerId(user.getId()); | |||||
| record.setMerchantId(merchantId); | |||||
| record.setOrderId(order.getId()); | |||||
| record.setIp(ipStr); | |||||
| record.setDeductionAmount(payment); | |||||
| try { | |||||
| return wxCardSpendService.createCardSpend(record, order, user); | |||||
| } catch (MallinkException e) { | |||||
| logger.error("card spend error, req 2: " + record.toString() + ", e:" + e.getMessage()); | |||||
| return new ResultData(e.getErrorCode(), e.getMessage()); | |||||
| } catch (Exception e) { | |||||
| logger.error("card spend error, req 3: " + record.toString() + ", e:" + e.getMessage()); | |||||
| return new ResultData(ErrorCode.PAY_ORDER_ERROR, e.getMessage()); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -142,6 +142,11 @@ public enum ErrorCode{ | |||||
| COUPON_ORDER_IS_INVALID(4003, "卡券已经作废"), | COUPON_ORDER_IS_INVALID(4003, "卡券已经作废"), | ||||
| COUPON_ORDER_BUSER_IS_NULL(4004, "卡券B端用户不存在"), | COUPON_ORDER_BUSER_IS_NULL(4004, "卡券B端用户不存在"), | ||||
| /** | |||||
| * 卡 | |||||
| */ | |||||
| CARD_IS_NOT_FOUND(9001, "优惠卡不存在"), | |||||
| /** | /** | ||||
| * 微信 | * 微信 | ||||
| @@ -33,6 +33,9 @@ public class WxCardInfo implements Serializable { | |||||
| /**面额总金额*/ | /**面额总金额*/ | ||||
| @io.swagger.annotations.ApiModelProperty(value="面额总金额",name="amount") | @io.swagger.annotations.ApiModelProperty(value="面额总金额",name="amount") | ||||
| private Integer amount; | private Integer amount; | ||||
| /**购买总金额*/ | |||||
| @io.swagger.annotations.ApiModelProperty(value="购买总金额",name="saleAmount") | |||||
| private Integer saleAmount; | |||||
| /**剩余面额*/ | /**剩余面额*/ | ||||
| @io.swagger.annotations.ApiModelProperty(value="剩余面额",name="remainingAmount") | @io.swagger.annotations.ApiModelProperty(value="剩余面额",name="remainingAmount") | ||||
| private Integer remainingAmount; | private Integer remainingAmount; | ||||
| @@ -61,6 +64,7 @@ public class WxCardInfo implements Serializable { | |||||
| ,CouponId_ASC("`coupon_id` ASC"),CouponId_DESC("`coupon_id` DESC") | ,CouponId_ASC("`coupon_id` ASC"),CouponId_DESC("`coupon_id` DESC") | ||||
| ,TransactionId_ASC("`transaction_id` ASC"),TransactionId_DESC("`transaction_id` DESC") | ,TransactionId_ASC("`transaction_id` ASC"),TransactionId_DESC("`transaction_id` DESC") | ||||
| ,Amount_ASC("`amount` ASC"),Amount_DESC("`amount` DESC") | ,Amount_ASC("`amount` ASC"),Amount_DESC("`amount` DESC") | ||||
| ,SaleAmount_ASC("`sale_amount` ASC"),SaleAmount_DESC("`sale_amount` DESC") | |||||
| ,RemainingAmount_ASC("`remaining_amount` ASC"),RemainingAmount_DESC("`remaining_amount` DESC") | ,RemainingAmount_ASC("`remaining_amount` ASC"),RemainingAmount_DESC("`remaining_amount` DESC") | ||||
| ,ServiceFeeAmount_ASC("`service_fee_amount` ASC"),ServiceFeeAmount_DESC("`service_fee_amount` DESC") | ,ServiceFeeAmount_ASC("`service_fee_amount` ASC"),ServiceFeeAmount_DESC("`service_fee_amount` DESC") | ||||
| ,ShareFeeAmount_ASC("`share_fee_amount` ASC"),ShareFeeAmount_DESC("`share_fee_amount` DESC") | ,ShareFeeAmount_ASC("`share_fee_amount` ASC"),ShareFeeAmount_DESC("`share_fee_amount` DESC") | ||||
| @@ -36,6 +36,12 @@ public class WxCardSpend implements Serializable { | |||||
| /**订单账号*/ | /**订单账号*/ | ||||
| @io.swagger.annotations.ApiModelProperty(value="订单账号",name="orderId") | @io.swagger.annotations.ApiModelProperty(value="订单账号",name="orderId") | ||||
| private Long orderId; | private Long orderId; | ||||
| /**ip地址*/ | |||||
| @io.swagger.annotations.ApiModelProperty(value="ip地址",name="ip") | |||||
| private String ip; | |||||
| /**抵扣金额*/ | |||||
| @io.swagger.annotations.ApiModelProperty(value="抵扣金额",name="deductionAmount") | |||||
| private Integer deductionAmount; | |||||
| /**支付金额(包含通道费)*/ | /**支付金额(包含通道费)*/ | ||||
| @io.swagger.annotations.ApiModelProperty(value="支付金额(包含通道费)",name="payment") | @io.swagger.annotations.ApiModelProperty(value="支付金额(包含通道费)",name="payment") | ||||
| private Integer payment; | private Integer payment; | ||||
| @@ -43,11 +49,17 @@ public class WxCardSpend implements Serializable { | |||||
| @io.swagger.annotations.ApiModelProperty(value="实收金额(不包含通道费)",name="realPayment") | @io.swagger.annotations.ApiModelProperty(value="实收金额(不包含通道费)",name="realPayment") | ||||
| private Integer realPayment; | private Integer realPayment; | ||||
| /**卡剩余总金额*/ | /**卡剩余总金额*/ | ||||
| @io.swagger.annotations.ApiModelProperty(value="卡剩余总金额",name="remainAmount") | |||||
| private Integer remainAmount; | |||||
| @io.swagger.annotations.ApiModelProperty(value="卡剩余总金额",name="cardRemainAmount") | |||||
| private Integer cardRemainAmount; | |||||
| /**卡支付前总金额*/ | /**卡支付前总金额*/ | ||||
| @io.swagger.annotations.ApiModelProperty(value="卡支付前总金额",name="beforeAmount") | |||||
| private Integer beforeAmount; | |||||
| @io.swagger.annotations.ApiModelProperty(value="卡支付前总金额",name="cardBeforeAmount") | |||||
| private Integer cardBeforeAmount; | |||||
| /**卡剩余实际总金额*/ | |||||
| @io.swagger.annotations.ApiModelProperty(value="卡剩余总金额",name="cardRemainRealAmount") | |||||
| private Integer cardRemainRealAmount; | |||||
| /**卡支付前实际总金额*/ | |||||
| @io.swagger.annotations.ApiModelProperty(value="卡支付前总金额",name="cardBeforeRealAmount") | |||||
| private Integer cardBeforeRealAmount; | |||||
| /**创建时间*/ | /**创建时间*/ | ||||
| @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | ||||
| private Date createDate; | private Date createDate; | ||||
| @@ -65,10 +77,13 @@ public class WxCardSpend implements Serializable { | |||||
| ,OwnerId_ASC("`owner_id` ASC"),OwnerId_DESC("`owner_id` DESC") | ,OwnerId_ASC("`owner_id` ASC"),OwnerId_DESC("`owner_id` DESC") | ||||
| ,MerchantId_ASC("`merchant_id` ASC"),MerchantId_DESC("`merchant_id` DESC") | ,MerchantId_ASC("`merchant_id` ASC"),MerchantId_DESC("`merchant_id` DESC") | ||||
| ,OrderId_ASC("`order_id` ASC"),OrderId_DESC("`order_id` DESC") | ,OrderId_ASC("`order_id` ASC"),OrderId_DESC("`order_id` DESC") | ||||
| ,Ip_ASC("`ip` ASC"),Ip_DESC("`ip` DESC") | |||||
| ,Payment_ASC("`payment` ASC"),Payment_DESC("`payment` DESC") | ,Payment_ASC("`payment` ASC"),Payment_DESC("`payment` DESC") | ||||
| ,RealPayment_ASC("`real_payment` ASC"),RealPayment_DESC("`real_payment` DESC") | ,RealPayment_ASC("`real_payment` ASC"),RealPayment_DESC("`real_payment` DESC") | ||||
| ,RemainAmount_ASC("`remain_amount` ASC"),RemainAmount_DESC("`remain_amount` DESC") | |||||
| ,BeforeAmount_ASC("`before_amount` ASC"),BeforeAmount_DESC("`before_amount` DESC") | |||||
| ,CardRemainAmount_ASC("`card_remain_amount` ASC"),CardRemainAmount_DESC("`card_remain_amount` DESC") | |||||
| ,CardBeforeAmount_ASC("`card_before_amount` ASC"),CardBeforeAmount_DESC("`card_before_amount` DESC") | |||||
| ,CardRemainRealAmount_ASC("`card_remain_real_amount` ASC"),CardRemainRealAmount_DESC("`card_remain_real_amount` DESC") | |||||
| ,CardBeforeRealAmount_ASC("`card_before_real_amount` ASC"),CardBeforeRealAmount_DESC("`card_before_real_amount` DESC") | |||||
| ,CreateDate_ASC("`create_date` ASC"),CreateDate_DESC("`create_date` DESC") | ,CreateDate_ASC("`create_date` ASC"),CreateDate_DESC("`create_date` DESC") | ||||
| ,UpdateDate_ASC("`update_date` ASC"),UpdateDate_DESC("`update_date` DESC") | ,UpdateDate_ASC("`update_date` ASC"),UpdateDate_DESC("`update_date` DESC") | ||||
| ; | ; | ||||
| @@ -1,11 +1,23 @@ | |||||
| package com.iformall.service; | package com.iformall.service; | ||||
| import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
| import com.iformall.common.ResultData; | |||||
| import com.iformall.domain.po.WxCUser; | |||||
| import com.iformall.domain.po.WxCardSpend; | import com.iformall.domain.po.WxCardSpend; | ||||
| import com.iformall.domain.po.WxOrder; | |||||
| public interface WxCardSpendService { | public interface WxCardSpendService { | ||||
| /** | |||||
| /** | |||||
| * 创建卡花费 | |||||
| * @param record | |||||
| * @param order | |||||
| * @param user | |||||
| * @return | |||||
| */ | |||||
| ResultData createCardSpend(WxCardSpend record, WxOrder order, WxCUser user); | |||||
| /** | |||||
| * 根据实体查询分页列表 | * 根据实体查询分页列表 | ||||
| * | * | ||||
| * @param record | * @param record | ||||
| @@ -2,10 +2,7 @@ package com.iformall.service; | |||||
| 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.WxOrderCouponVo; | import com.iformall.domain.vo.WxOrderCouponVo; | ||||
| import com.iformall.domain.vo.WxOrderQueryVo; | import com.iformall.domain.vo.WxOrderQueryVo; | ||||
| import com.iformall.enums.EnumOrderStatus; | import com.iformall.enums.EnumOrderStatus; | ||||
| @@ -44,13 +41,21 @@ public interface WxOrderService { | |||||
| WxOrder saveCouponOrder(WxCUser user, Long couponChannelId, Long couponId); | WxOrder saveCouponOrder(WxCUser user, Long couponChannelId, Long couponId); | ||||
| /** | /** | ||||
| * 刷卡支付 | |||||
| * 付款码支付 | |||||
| * @param user | * @param user | ||||
| * @param totalFeeStr | * @param totalFeeStr | ||||
| * @return 订单id | * @return 订单id | ||||
| */ | */ | ||||
| WxOrder saveMicroPayOrder(WxMerchantBUser user, String totalFeeStr); | WxOrder saveMicroPayOrder(WxMerchantBUser user, String totalFeeStr); | ||||
| /** | |||||
| * 商户码-储值卡支付 | |||||
| * @param merchant | |||||
| * @param totalFeeStr | |||||
| * @return 订单id | |||||
| */ | |||||
| WxOrder saveCardPayOrder(WxMerchant merchant, String totalFeeStr, Integer payment); | |||||
| /** | /** | ||||
| * 免费券订单接口 | * 免费券订单接口 | ||||
| * @param userId | * @param userId | ||||
| @@ -2,19 +2,85 @@ package com.iformall.service.impl; | |||||
| import com.github.pagehelper.PageHelper; | import com.github.pagehelper.PageHelper; | ||||
| import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
| import com.iformall.domain.po.WxCardSpend; | |||||
| import com.iformall.common.ErrorCode; | |||||
| import com.iformall.common.ResultData; | |||||
| import com.iformall.domain.po.*; | |||||
| import com.iformall.mapper.WxCardInfoMapper; | |||||
| import com.iformall.mapper.WxCardSpendMapper; | import com.iformall.mapper.WxCardSpendMapper; | ||||
| import com.iformall.mapper.WxPayAccountMapper; | |||||
| import com.iformall.service.WxCardSpendService; | import com.iformall.service.WxCardSpendService; | ||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import com.iformall.common.IdWorker; | import com.iformall.common.IdWorker; | ||||
| @Service | @Service | ||||
| public class WxCardSpendServiceImpl implements WxCardSpendService { | public class WxCardSpendServiceImpl implements WxCardSpendService { | ||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| @Autowired | @Autowired | ||||
| WxCardSpendMapper wxCardSpendMapper; | WxCardSpendMapper wxCardSpendMapper; | ||||
| @Autowired | |||||
| WxCardInfoMapper wxCardInfoMapper; | |||||
| @Autowired | |||||
| WxPayAccountMapper payAccountMapper; | |||||
| @Override | |||||
| public ResultData createCardSpend(WxCardSpend record, WxOrder order, WxCUser user) { | |||||
| // 1. get card info | |||||
| WxCardInfo cardInfo = wxCardInfoMapper.selectByPrimaryKey(record.getCardId()); | |||||
| if (cardInfo != null) { | |||||
| logger.error("card not found: " + record.getCardId()); | |||||
| return new ResultData(ErrorCode.CARD_IS_NOT_FOUND); | |||||
| } | |||||
| // 2. get pay account | |||||
| WxPayAccount payAccount = null; | |||||
| WxPayAccount payAccountQ = new WxPayAccount(); | |||||
| payAccountQ.setTenantId(user.getTenantId()); | |||||
| try { | |||||
| payAccount = payAccountMapper.selectOne(payAccountQ); | |||||
| } catch (Exception e) { | |||||
| logger.error("获取payAccount error: " + user.getTenantId()); | |||||
| return new ResultData(ErrorCode.DB_FAIL.getCode(), "获取payAccount失败"); | |||||
| } | |||||
| // 3. 扣减计算 | |||||
| Integer payment = cardInfo.getSaleAmount() * record.getDeductionAmount() / cardInfo.getAmount(); | |||||
| Double dChargeFee = Math.ceil(payment * 1.0D * payAccount.getRate() / 1000); | |||||
| Integer real_payment = payment - dChargeFee.intValue(); | |||||
| // 4 insert card_spend | |||||
| record.setPayment(payment); | |||||
| record.setRealPayment(real_payment); | |||||
| record.setCardBeforeAmount(cardInfo.getRemainingAmount()); | |||||
| record.setCardRemainAmount(cardInfo.getRemainingAmount()-record.getDeductionAmount()); | |||||
| record.setCardBeforeRealAmount(cardInfo.getRemainingShareFeeAmount()); | |||||
| record.setCardRemainAmount(cardInfo.getRemainingShareFeeAmount()-real_payment); | |||||
| try { | |||||
| wxCardSpendMapper.insertSelective(record); | |||||
| } catch (Exception e) { | |||||
| logger.error("card spend insert error"); | |||||
| return new ResultData(ErrorCode.DB_FAIL.getCode(), "card spend 插入出错!"); | |||||
| } | |||||
| // 5. update card info | |||||
| cardInfo.setRemainingAmount(cardInfo.getRemainingAmount()-record.getDeductionAmount()); | |||||
| cardInfo.setRemainingShareFeeAmount(cardInfo.getRemainingShareFeeAmount()-real_payment); | |||||
| try { | |||||
| wxCardInfoMapper.updateByPrimaryKey(cardInfo); | |||||
| } catch (Exception e) { | |||||
| logger.error("card info update error"); | |||||
| return new ResultData(ErrorCode.DB_FAIL.getCode(), "card info 更新出错!"); | |||||
| } | |||||
| return new ResultData(record); | |||||
| } | |||||
| @Override | @Override | ||||
| public PageInfo<WxCardSpend> listAsPage(WxCardSpend record, Integer pageIndex, Integer pageSize) { | public PageInfo<WxCardSpend> listAsPage(WxCardSpend record, Integer pageIndex, Integer pageSize) { | ||||
| @@ -444,6 +444,46 @@ public class WxOrderServiceImpl implements WxOrderService { | |||||
| return record; | return record; | ||||
| } | } | ||||
| @Override | |||||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||||
| public WxOrder saveCardPayOrder(WxMerchant merchant, String totalFeeStr, Integer payment) { | |||||
| if (merchant.getStatus() == EnumMerchantStatus.NOT_VALID.getCode()) { | |||||
| logger.error("商户已禁用, merchantId: " + merchant.getId()); | |||||
| throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_VALID); | |||||
| } | |||||
| Date curr = new Date(); | |||||
| final IdWorker idWorker = IdWorker.get(); | |||||
| Long orderNumber = idWorker.nextId(); | |||||
| // body | |||||
| // tenant_id + merchant_id + title + subtitle | |||||
| String bodyStr = "C扫B储值卡支付, 金额:" + totalFeeStr; | |||||
| WxOrder record = new WxOrder(); | |||||
| record.setId(orderNumber); | |||||
| record.setTenantId(merchant.getTenantId()); | |||||
| record.setOrderNumber(orderNumber); | |||||
| record.setType(EnumOrderType.PREPAIDCARD.getCode()); | |||||
| record.setProductId(merchant.getId()); | |||||
| record.setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); | |||||
| record.setPayment(payment); | |||||
| record.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode()); | |||||
| record.setDetail(bodyStr); | |||||
| record.setCreateDate(curr); | |||||
| record.setUpdateDate(curr); | |||||
| try { | |||||
| // 保存订单 | |||||
| wxOrderMapper.insertSelective(record); | |||||
| } catch (RuntimeException e) { | |||||
| logger.error("保存订单:" + e.getMessage()); | |||||
| throw new MallinkException(ErrorCode.ORDER_SAVE_ERR); | |||||
| } | |||||
| return record; | |||||
| } | |||||
| /** | /** | ||||
| * 创建 couponOrder | * 创建 couponOrder | ||||
| * | * | ||||
| @@ -512,9 +552,11 @@ public class WxOrderServiceImpl implements WxOrderService { | |||||
| WxCardInfo cardInfo = new WxCardInfo(); | WxCardInfo cardInfo = new WxCardInfo(); | ||||
| cardInfo.setId(couponOrder.getId()); | cardInfo.setId(couponOrder.getId()); | ||||
| cardInfo.setTenantId(user.getTenantId()); | |||||
| cardInfo.setCouponId(order.getProductId()); | cardInfo.setCouponId(order.getProductId()); | ||||
| cardInfo.setTransactionId(payOrder.getTransactionId()); | cardInfo.setTransactionId(payOrder.getTransactionId()); | ||||
| cardInfo.setAmount(coupon.getPrice()); | cardInfo.setAmount(coupon.getPrice()); | ||||
| cardInfo.setSaleAmount(coupon.getSalePrice()); | |||||
| cardInfo.setRemainingAmount(coupon.getPrice()); | cardInfo.setRemainingAmount(coupon.getPrice()); | ||||
| cardInfo.setServiceFeeAmount(fee); | cardInfo.setServiceFeeAmount(fee); | ||||
| cardInfo.setShareFeeAmount(payOrder.getShareAmount()); | cardInfo.setShareFeeAmount(payOrder.getShareAmount()); | ||||
| @@ -7,6 +7,7 @@ | |||||
| <result column="coupon_id" jdbcType="BIGINT" property="couponId" /> | <result column="coupon_id" jdbcType="BIGINT" property="couponId" /> | ||||
| <result column="transaction_id" jdbcType="VARCHAR" property="transactionId" /> | <result column="transaction_id" jdbcType="VARCHAR" property="transactionId" /> | ||||
| <result column="amount" jdbcType="INTEGER" property="amount" /> | <result column="amount" jdbcType="INTEGER" property="amount" /> | ||||
| <result column="sale_amount" jdbcType="INTEGER" property="saleAmount" /> | |||||
| <result column="remaining_amount" jdbcType="INTEGER" property="remainingAmount" /> | <result column="remaining_amount" jdbcType="INTEGER" property="remainingAmount" /> | ||||
| <result column="service_fee_amount" jdbcType="INTEGER" property="serviceFeeAmount" /> | <result column="service_fee_amount" jdbcType="INTEGER" property="serviceFeeAmount" /> | ||||
| <result column="share_fee_amount" jdbcType="INTEGER" property="shareFeeAmount" /> | <result column="share_fee_amount" jdbcType="INTEGER" property="shareFeeAmount" /> | ||||
| @@ -16,7 +17,7 @@ | |||||
| </resultMap> | </resultMap> | ||||
| <sql id="allColumns"> | <sql id="allColumns"> | ||||
| `id`,`tenant_id`,`coupon_id`,`transaction_id`,`amount`,`remaining_amount`,`service_fee_amount`,`share_fee_amount`,`remaining_share_fee_amount`,`create_date`,`update_date` | |||||
| `id`,`tenant_id`,`coupon_id`,`transaction_id`,`amount`,`sale_amount`,`remaining_amount`,`service_fee_amount`,`share_fee_amount`,`remaining_share_fee_amount`,`create_date`,`update_date` | |||||
| </sql> | </sql> | ||||
| <sql id="dynamicWhereConditions"> | <sql id="dynamicWhereConditions"> | ||||
| @@ -35,7 +36,10 @@ | |||||
| </if> | </if> | ||||
| <if test=" null != amount "> | <if test=" null != amount "> | ||||
| and `amount` = #{amount} | and `amount` = #{amount} | ||||
| </if> | |||||
| </if> | |||||
| <if test=" null != saleAmount "> | |||||
| and `sale_amount` = #{saleAmount} | |||||
| </if> | |||||
| <if test=" null != remainingAmount "> | <if test=" null != remainingAmount "> | ||||
| and `remaining_amount` = #{remainingAmount} | and `remaining_amount` = #{remainingAmount} | ||||
| </if> | </if> | ||||
| @@ -8,16 +8,20 @@ | |||||
| <result column="owner_id" jdbcType="BIGINT" property="ownerId" /> | <result column="owner_id" jdbcType="BIGINT" property="ownerId" /> | ||||
| <result column="merchant_id" jdbcType="BIGINT" property="merchantId" /> | <result column="merchant_id" jdbcType="BIGINT" property="merchantId" /> | ||||
| <result column="order_id" jdbcType="BIGINT" property="orderId" /> | <result column="order_id" jdbcType="BIGINT" property="orderId" /> | ||||
| <result column="deduction_amount" jdbcType="INTEGER" property="deductionAmount" /> | |||||
| <result column="payment" jdbcType="INTEGER" property="payment" /> | <result column="payment" jdbcType="INTEGER" property="payment" /> | ||||
| <result column="real_payment" jdbcType="INTEGER" property="realPayment" /> | <result column="real_payment" jdbcType="INTEGER" property="realPayment" /> | ||||
| <result column="remain_amount" jdbcType="INTEGER" property="remainAmount" /> | |||||
| <result column="before_amount" jdbcType="INTEGER" property="beforeAmount" /> | |||||
| <result column="card_remain_amount" jdbcType="INTEGER" property="cardRemainAmount" /> | |||||
| <result column="card_before_amount" jdbcType="INTEGER" property="cardBeforeAmount" /> | |||||
| <result column="card_remain_real_amount" jdbcType="INTEGER" property="cardRemainRealAmount" /> | |||||
| <result column="card_before_real_amount" jdbcType="INTEGER" property="cardBeforeRealAmount" /> | |||||
| <result column="create_date" jdbcType="TIMESTAMP" property="createDate" /> | <result column="create_date" jdbcType="TIMESTAMP" property="createDate" /> | ||||
| <result column="update_date" jdbcType="TIMESTAMP" property="updateDate" /> | <result column="update_date" jdbcType="TIMESTAMP" property="updateDate" /> | ||||
| </resultMap> | </resultMap> | ||||
| <sql id="allColumns"> | <sql id="allColumns"> | ||||
| `id`,`tenant_id`,`card_id`,`owner_id`,`merchant_id`,`order_id`,`payment`,`real_payment`,`remain_amount`,`before_amount`,`create_date`,`update_date` | |||||
| `id`,`tenant_id`,`card_id`,`owner_id`,`merchant_id`,`order_id`,`deduction_amount`,`payment`,`real_payment`, | |||||
| `card_remain_amount`,`card_before_amount`,`card_remain_real_amount`,`card_before_real_amount`,`create_date`,`update_date` | |||||
| </sql> | </sql> | ||||
| <sql id="dynamicWhereConditions"> | <sql id="dynamicWhereConditions"> | ||||
| @@ -39,19 +43,28 @@ | |||||
| </if> | </if> | ||||
| <if test=" null != orderId "> | <if test=" null != orderId "> | ||||
| and `order_id` = #{orderId} | and `order_id` = #{orderId} | ||||
| </if> | |||||
| <if test=" null != payment "> | |||||
| and `payment` = #{payment} | |||||
| </if> | |||||
| </if> | |||||
| <if test=" null != deductionAmount "> | |||||
| and `deduction_amount` = #{deductionAmount} | |||||
| </if> | |||||
| <if test=" null != payment "> | |||||
| and `payment` = #{payment} | |||||
| </if> | |||||
| <if test=" null != realPayment "> | <if test=" null != realPayment "> | ||||
| and `real_payment` = #{realPayment} | and `real_payment` = #{realPayment} | ||||
| </if> | </if> | ||||
| <if test=" null != remainAmount "> | |||||
| and `remain_amount` = #{remainAmount} | |||||
| </if> | |||||
| <if test=" null != beforeAmount "> | |||||
| and `before_amount` = #{beforeAmount} | |||||
| <if test=" null != cardRemainAmount "> | |||||
| and `card_remain_amount` = #{cardRemainAmount} | |||||
| </if> | </if> | ||||
| <if test=" null != cardBeforeAmount "> | |||||
| and `card_before_amount` = #{cardBeforeAmount} | |||||
| </if> | |||||
| <if test=" null != cardRemainRealAmount "> | |||||
| and `card_remain_real_amount` = #{cardRemainRealAmount} | |||||
| </if> | |||||
| <if test=" null != cardBeforeRealAmount "> | |||||
| and `card_before_real_amount` = #{cardBeforeRealAmount} | |||||
| </if> | |||||
| <if test=" null != createDate "> | <if test=" null != createDate "> | ||||
| and `create_date` = #{createDate} | and `create_date` = #{createDate} | ||||
| </if> | </if> | ||||