From e183139131798e2961b858e96b88b1ebf18621b9 Mon Sep 17 00:00:00 2001 From: xhxu Date: Wed, 22 Mar 2023 11:38:41 +0800 Subject: [PATCH] //card --- .../market/WxCardPayController.java | 18 ++++ .../db/migration/V2023031600001_cardspend.sql | 8 +- .../java/com/iformall/common/ErrorCode.java | 1 + .../com/iformall/enums/EnumCardSpendFrom.java | 4 + .../java/com/iformall/enums/EnumPayType.java | 4 +- .../iformall/service/WxCardInfoService.java | 2 + .../service/impl/WxCardInfoServiceImpl.java | 89 ++++++++++++++++--- .../impl/WxRefundOrderServiceImpl.java | 2 +- 8 files changed, 109 insertions(+), 19 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardPayController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardPayController.java index 59994815d..6f26ed71a 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardPayController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCardPayController.java @@ -273,4 +273,22 @@ public class WxCardPayController extends BaseController { } + + @ApiOperation(value = "卡充值") + @PostMapping("rechargeAmount") + public ResultData rechargeAmount(@RequestBody WxCardInfo cardInfo) { + logger.info("rechargeAmount: " + getIpAddr() + cardInfo.toString()); + if(cardInfo.getId() == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "id为空"); + } + if(cardInfo.getAmount() == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "充值金额为空"); + } + if(Constant.UNDEFINED.equals(cardInfo.getTransactionId())){ + cardInfo.setTransactionId(null); + } + + return wxCardInfoService.rechargeAmount(cardInfo); + } + } diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023031600001_cardspend.sql b/mallinkAdmin/src/main/resources/db/migration/V2023031600001_cardspend.sql index 126ececb9..da23a77cf 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V2023031600001_cardspend.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V2023031600001_cardspend.sql @@ -4,11 +4,15 @@ ADD COLUMN `settlement_status` smallint(2) NOT NULL DEFAULT 0 COMMENT '结算状 update wx_card_spend set settlement_status = pay_status where pay_status in (1,2); - update wx_card_spend set pay_status = 0 where pay_status in (1,2); +update wx_card_spend set pay_from=5 where pay_type=1; + +delete from sys_config where id = 7; +delete from sys_config_value where config_item_id = 7; + ALTER TABLE `mallink`.`wx_card_info` @@ -328,8 +332,6 @@ ADD COLUMN `is_recharge` smallint(2) DEFAULT 0 COMMENT '是否可充值' AFTER ` ADD COLUMN `used_password` varchar(50) COMMENT '使用密码' AFTER `is_recharge`; -delete from sys_config where id = 7; -delete from sys_config_value where config_item_id = 7; diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 8248bac80..dc5e6c994 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -264,6 +264,7 @@ public enum ErrorCode{ CARD_TRANSFERED(9004, "卡已被领取"), CARD_TRANSFER_INVALID(9005, "卡转赠已失效"), CARD_SUBSIDY_NOT_SET(9006, "卡补贴未设置"), + CARD_IS_NOT_RECHARGE(9007, "该卡不支持充值"), /** * 卡消费 diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCardSpendFrom.java b/mallinkService/src/main/java/com/iformall/enums/EnumCardSpendFrom.java index ab6c694b3..4a843d93e 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCardSpendFrom.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCardSpendFrom.java @@ -12,6 +12,10 @@ public enum EnumCardSpendFrom { card(2,"B扫实体卡收款"), phone(3,"B手机号查询收款"), pay(4,"C扫B付款"), + + refund(5,"B退款"), + + recharge(10,"A充值"), ; public static EnumCardSpendFrom getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java index 7bfd85f18..055934689 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java @@ -10,7 +10,9 @@ public enum EnumPayType { PAY_AUTO_REFUND(2, "自动退款"), PAY_ADMIN_REFUND(3, "A端退款"), PAY_POS_REFUND(4, "POS发起退款"), - PAY_C_REFUND(5, "用户自己发起退款"); + PAY_C_REFUND(5, "用户自己发起退款"), + + PAY_CARD_RECHARGE(10, "卡充值"); public static EnumPayType getEnum(Integer code) { for (EnumPayType value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java b/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java index 753392edc..63ea63f2d 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCardInfoService.java @@ -69,4 +69,6 @@ public interface WxCardInfoService { void updAmount(WxCardInfo cardInfo,Integer amount,Integer remainingAmount,Integer remainingShareFeeAmount); ResultData updatePayPassword(WxCardInfo cardInfo, EnumCUserFrom userFrom); + + ResultData rechargeAmount(WxCardInfo cardInfo); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java index 9761a493a..7d5e618ac 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCardInfoServiceImpl.java @@ -1,18 +1,13 @@ package com.iformall.service.impl; import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxCUserBasicInfo; -import com.iformall.domain.po.WxCardInfo; -import com.iformall.domain.po.WxCardTransferInfo; -import com.iformall.domain.po.WxCoupon; -import com.iformall.domain.po.WxCouponChannel; -import com.iformall.domain.po.WxCouponOrder; -import com.iformall.domain.po.WxCouponPassword; +import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.WxCardTransferVo; import com.iformall.domain.vo.WxCardVo; @@ -20,17 +15,13 @@ import com.iformall.domain.vo.WxCouponOrderBVo; import com.iformall.domain.vo.WxCouponPasswordVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; -import com.iformall.mapper.WxCardInfoMapper; -import com.iformall.mapper.WxCardTransferInfoMapper; -import com.iformall.mapper.WxCouponChannelMapper; -import com.iformall.mapper.WxCouponMapper; -import com.iformall.mapper.WxCouponOrderMapper; -import com.iformall.mapper.WxCouponPasswordMapper; +import com.iformall.mapper.*; import com.iformall.service.ExcelService; import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxCardInfoService; import com.iformall.service.WxCouponService; import com.iformall.utils.Constant; +import com.iformall.utils.DateUtils; import com.iformall.utils.RedisLock; import org.apache.commons.beanutils.BeanUtils; @@ -89,6 +80,9 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { @Autowired WxCardTransferInfoMapper wxCardTransferInfoMapper; + + @Autowired + WxCardSpendMapper wxCardSpendMapper; @@ -425,7 +419,7 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { public ResultData updatePayPassword(WxCardInfo cardInfo, EnumCUserFrom userFrom) { WxCardInfo wxCardInfo = wxCardInfoMapper.selectById(cardInfo.getId()); if(wxCardInfo == null){ - return new ResultData(ErrorCode.CARD_IS_NOT_FOUND.getCode()); + return new ResultData(ErrorCode.CARD_IS_NOT_FOUND); } WxCardInfo updateCIF = new WxCardInfo(); updateCIF.setId(cardInfo.getId()); @@ -449,6 +443,73 @@ public class WxCardInfoServiceImpl implements WxCardInfoService { return new ResultData(); } + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public ResultData rechargeAmount(WxCardInfo cardInfo) { + WxCardInfo wxCardInfo = wxCardInfoMapper.selectById(cardInfo.getId()); + if(wxCardInfo == null){ + return new ResultData(ErrorCode.CARD_IS_NOT_FOUND); + } + WxCoupon wxCoupon = wxCouponMapper.selectById(wxCardInfo.getCouponId(), wxCardInfo.getTenantId()); + if(wxCoupon == null){ + return new ResultData(ErrorCode.CARD_IS_NOT_FOUND); + } + if(EnumYesOrNo.NO.getCode().equals(wxCoupon.getIsRecharge())){ + return new ResultData(ErrorCode.CARD_IS_NOT_RECHARGE); + } + if(!wxCoupon.checkIsFree()){ + return new ResultData(ErrorCode.CARD_IS_NOT_RECHARGE.getCode(),"有价券不支持充值"); + } + if(wxCoupon.getSubsidyNum() != null && wxCoupon.getSubsidyNum() > 0){ + return new ResultData(ErrorCode.CARD_IS_NOT_RECHARGE.getCode(),"有补贴不支持充值"); + } + + Date currentDate = new Date(); + + WxCardSpend record = new WxCardSpend(); + record.updateTenantInfo(cardInfo); + record.setPayType(EnumPayType.PAY_CARD_RECHARGE.getCode()); + record.setCardId(cardInfo.getId()); + if(StringUtils.isBlank(cardInfo.getTransactionId())){ + Long yyyyMMddHHmmss = Long.valueOf(DateUtils.date2String(currentDate, "yyyyMMddHHmmss")); + record.setOrderId(yyyyMMddHHmmss);//默认当前日期为订单号 + } + WxCardSpend wxCardSpend = wxCardSpendMapper.selectOne(new QueryWrapper<>(record)); + if(wxCardSpend != null){ + logger.error("当前已存在充值订单, "); + throw new MallinkException(ErrorCode.CARD_IS_NOT_RECHARGE.getCode(),"当前已存在充值订单,请确认是否重复充值"); + } + + this.updAmount(cardInfo,cardInfo.getAmount(),cardInfo.getAmount(),null); + + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setOwnerId(cardInfo.getOwnerUserId()); + record.setMerchantId(0l);//充值订单无商户 + record.setPayFrom(EnumCardSpendFrom.recharge.getCode()); + record.setDeductionAmount(cardInfo.getAmount()); + record.setRemark("充值"); + + record.setPayment(0); + record.setRealPayment(0); + record.setCardBeforeAmount(wxCardInfo.getRemainingAmount()); + record.setCardRemainAmount(wxCardInfo.getRemainingAmount()+cardInfo.getAmount()); + record.setCardBeforeRealAmount(0); + record.setCardRemainRealAmount(0); + record.setPayStatus(EnumCardSpendStatus.NOT_PAY.getCode());// + + record.setCreateDate(currentDate); + record.setUpdateDate(currentDate); + try { + wxCardSpendMapper.insert(record); + } catch (Exception e) { + logger.error("card spend insert error"); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "card spend 插入出错!"); + } + return new ResultData(); + + } + private List toTransferVoList(List transferList,TenantEntity tenantEntity) { List retList = new ArrayList(); if (null != transferList && transferList.size() > 0 ) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java index abeff5507..8f0da04c1 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java @@ -1282,7 +1282,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { record.setId(idWorker.nextId()); record.setOwnerId(cardSend.getOwnerId()); record.setMerchantId(cardSend.getMerchantId()); - record.setPayFrom(EnumCardSpendFrom.C.getCode()); + record.setPayFrom(EnumCardSpendFrom.refund.getCode()); record.setDeductionAmount(refundFee); record.setRemark("退款");