From a9b0b4a9e867fd3d7006a70a3b874b576e05d612 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Thu, 3 Jan 2019 08:44:36 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=82=A8=E5=80=BC=E5=8D=A1=E5=AE=8C=E7=BB=93?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3][=E6=96=B0=E5=A2=9E]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WxCardPayController.java | 14 ++++ .../iformall/service/WxCardSpendService.java | 8 ++ .../service/impl/WxCardSpendServiceImpl.java | 79 +++++++++++-------- 3 files changed, 70 insertions(+), 31 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxCardPayController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxCardPayController.java index 40cc4b850..d204ec946 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxCardPayController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxCardPayController.java @@ -151,4 +151,18 @@ public class WxCardPayController extends BaseController { int num = wxCardSpendService.update(wxCardSpend); return new ResultData(num); } + + @ApiOperation("卡完结") + @PostMapping("/finishCard") + public ResultData finishCard(@RequestBody WxCardInfo wxCardInfo) { + String ipStr = getIpAddr(); + logger.info("cardPay/finishCard: " + ipStr + " :" + wxCardInfo.toString()); + if (wxCardInfo == null) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "过滤条件为空"); + } + MallUserInfo user = getUser(); + wxCardInfo.setTenantId(user.getTenantId()); + int remainShareAmount = wxCardSpendService.finishCard(user.getTenantId(), wxCardInfo.getId()); + return new ResultData(remainShareAmount); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCardSpendService.java b/mallinkService/src/main/java/com/iformall/service/WxCardSpendService.java index 12002c281..a03e72f35 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCardSpendService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCardSpendService.java @@ -75,6 +75,14 @@ public interface WxCardSpendService { */ int update(WxCardSpend record); + /** + * 卡完结 + * + * @param tenantId + * @param cardId + */ + int finishCard(String tenantId, Long cardId); + /** * 根据Id删除实体 * diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java index b9fec4200..fd5e8a3d8 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardSpendServiceImpl.java @@ -285,11 +285,55 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { record.setPayStatus(EnumCardSpendStatus.MANUAL_PAY.getCode()); record.setUpdateDate(new Date()); int num = wxCardSpendMapper.updateByCond(record); - // 3. 分账完结 - shareFinishForCardPay(record.getTenantId(), record.getCardId()); return num; } + @Override + public int finishCard(String tenantId, Long cardId) { + // admin用户手动帮已用卡消费用户退卡, 此卡需要分账完结, 买卡的钱进商场账户 + WxCardInfo cardInfo = null; + try { + cardInfo = wxCardInfoMapper.selectByPrimaryKey(cardId); + } catch (Exception e) { + logger.error("微信分账: " + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), e.getMessage()); + } + if(cardInfo != null) { + if (cardInfo.getRemainingAmount().equals(cardInfo.getAmount())){ + logger.error("请用订单退款接口: "); + throw new MallinkException(ErrorCode.CARD_IS_NOT_COST); + } else if(cardInfo.getRemainingAmount() > 0){ + // 卡已消费, 余额不为0 + int remainShareFeeAmount = cardInfo.getRemainingShareFeeAmount(); + try { + WxCouponOrder couponOrder = wxCouponOrderMapper.selectByPrimaryKey(cardInfo.getId()); + // 更新 coupon order状态 + couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.CARD_RETURNED.getCode()); + couponOrder.setUpdateDate(new Date()); + wxCouponOrderMapper.updateByPrimaryKeySelective(couponOrder); + // 卡余额 + WxCardInfo cardInfo1 = new WxCardInfo(); + cardInfo1.setId(cardInfo.getId()); + cardInfo1.setRemainingAmount(0); + cardInfo1.setUpdateDate(new Date()); + wxCardInfoMapper.updateByPrimaryKeySelective(cardInfo1); + + // 分账完结 + WxSharingOrderDto shareOrder = new WxSharingOrderDto(); + shareOrder.setcUserId(couponOrder.getOwnerId()); + shareOrder.setTenantId(tenantId); + shareOrder.setTransactionId(cardInfo.getTransactionId()); + cardShareFinished(cardInfo, shareOrder); + } catch (MallinkException e) { + logger.error("微信分账: " + e.getMessage()); + throw new MallinkException(e.getErrorCode(), e.getMessage()); + } + return remainShareFeeAmount; + } + } + return 0; + } + @Override public void deleteById(Long id) { wxCardSpendMapper.deleteByPrimaryKey(id); @@ -375,34 +419,7 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { } } - private void shareFinishForCardPay(String tenantId, Long cardId) { - // admin用户手动帮已用卡消费用户退卡, 此卡需要分账完结, 买卡的钱进商场账户 - WxCardInfo cardInfo = null; - try { - cardInfo = wxCardInfoMapper.selectByPrimaryKey(cardId); - } catch (Exception e) { - logger.error("微信分账: " + e.getMessage()); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), e.getMessage()); - } - if(cardInfo != null) { - if (cardInfo.getRemainingAmount().equals(cardInfo.getAmount())){ - logger.error("请用订单退款接口: "); - throw new MallinkException(ErrorCode.CARD_IS_NOT_COST); - } else { - try { - WxCouponOrder couponOrder = wxCouponOrderMapper.selectByPrimaryKey(cardInfo.getId()); - WxSharingOrderDto shareOrder = new WxSharingOrderDto(); - shareOrder.setcUserId(couponOrder.getOwnerId()); - shareOrder.setTenantId(tenantId); - shareOrder.setTransactionId(cardInfo.getTransactionId()); - cardShareFinished(cardInfo, shareOrder); - } catch (MallinkException e) { - logger.error("微信分账: " + e.getMessage()); - throw new MallinkException(e.getErrorCode(), e.getMessage()); - } - } - } - } + /** * 卡分账完结 @@ -433,7 +450,7 @@ public class WxCardSpendServiceImpl implements WxCardSpendService { logger.error("card spend insert error"); return; } - // card info 更新 余额 + // card info 更新 分账 余额 WxCardInfo cardInfo1 = new WxCardInfo(); cardInfo1.setId(cardInfo.getId()); cardInfo1.setRemainingShareFeeAmount(0);