From c619972c50577bb699be6ee099b5e2741882fabb Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Wed, 27 Dec 2023 16:15:59 +0800 Subject: [PATCH] 直推奖励,冻结的用户,则直推奖励销毁,用户未冻结才能领取成功 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAppServiceImpl.java | 161 +++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 131 insertions(+), 30 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAppServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAppServiceImpl.java index 6fc27d6..3616044 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAppServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAppServiceImpl.java @@ -13,6 +13,7 @@ import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IApiMallAppService; import cc.mrbird.febs.mall.vo.*; +import cc.mrbird.febs.pay.service.IXcxCodePayService; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; @@ -20,7 +21,9 @@ import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; +import cn.hutool.db.sql.Order; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -47,6 +50,7 @@ private final MallOrderInfoMapper mallOrderInfoMapper; private final MallOrderItemMapper mallOrderItemMapper; private final MallMemberWalletMapper mallMemberWalletMapper; + private final IXcxCodePayService xcxCodePayService; public static void main(String[] args) { System.out.println(SecureUtil.md5("a123456")); @@ -80,7 +84,7 @@ @Override public FebsResponse appMemberInfo(ApiMallAppMemberInfoDto apiMallAppMemberInfoDto) { - Long memberId = LoginUserUtil.getLoginUser().getId(); +// Long memberId = LoginUserUtil.getLoginUser().getId(); List<ApiMallAppMemberInfoVo> mallMembers = this.baseMapper.selectMemberInfoLikePhone(apiMallAppMemberInfoDto.getPhone()); return new FebsResponse().success().data(mallMembers); } @@ -100,6 +104,13 @@ @Override @Transactional public FebsResponse createAppOrder(ApiAddOrderDto addOrderDto) { + if(ObjectUtil.isNotEmpty(addOrderDto.getOrderId())){ + MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(addOrderDto.getOrderId()); + if(ObjectUtil.isNotEmpty(mallOrderInfo)){ + mallOrderInfo.setStatus(OrderStatusEnum.CANCEL.getValue()); + mallOrderInfoMapper.updateById(mallOrderInfo); + } + } MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(addOrderDto.getMemberId()); if (ObjectUtil.isEmpty(mallMemberWallet)) { throw new FebsException("用户钱包不存在。"); @@ -114,6 +125,7 @@ orderInfo.setIsApp(AppContants.IS_APP_ORDER); orderInfo.setOrderTime(new Date()); orderInfo.setMemberId(addOrderDto.getMemberId()); + orderInfo.setPayResult(2); //会员结算 orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue()); mallOrderInfoMapper.insert(orderInfo); @@ -157,33 +169,6 @@ }else{ totalCarriage = total; } - //减少用户积分和余额 - - BigDecimal avaAmount = totalCarriage;//剩余需要折扣的金额 - if(avaAmount.compareTo(memberAmount) >= 0){ - //清零用户的积分和余额 - mallMemberWallet.setBalance(BigDecimal.ZERO); - mallMemberWallet.setScore(BigDecimal.ZERO); - mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet); - }else{ - /** - * 先扣积分,再扣余额 - */ - if(avaAmount.compareTo(score) >= 0){ - mallMemberWallet.setScore(BigDecimal.ZERO); - avaAmount = avaAmount.subtract(score); - }else{ - mallMemberWallet.setScore(score.subtract(avaAmount)); - avaAmount = BigDecimal.ZERO; - } - //积分不够 - if(avaAmount.compareTo(BigDecimal.ZERO) > 0){ - mallMemberWallet.setBalance(balance.subtract(avaAmount)); - }else{ - mallMemberWallet.setBalance(balance); - } - mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet); - } } orderInfo.setCarriage(totalCarriage); } @@ -203,6 +188,7 @@ orderInfo.setIsApp(AppContants.IS_APP_ORDER); orderInfo.setOrderTime(new Date()); orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue()); + orderInfo.setPayResult(2); if (CollUtil.isEmpty(addOrderDto.getItems())) { throw new FebsException("商品明细不能为空。"); } @@ -229,17 +215,31 @@ } orderInfo.setAmount(total); mallOrderInfoMapper.updateById(orderInfo); - return new FebsResponse().success().message("操作成功"); + + Integer cnt = 0; + List<MallOrderInfo> mallOrderInfos = mallOrderInfoMapper.selectOrderInfoByStatusIsApp(OrderStatusEnum.WAIT_PAY.getValue()); + if(ObjectUtil.isNotEmpty(mallOrderInfos)){ + cnt = mallOrderInfos.size(); + } + return new FebsResponse().success().data(cnt).message("操作成功"); } @Override public FebsResponse normalInsure(ApiNormalInsureDto addOrderDto) { + if(ObjectUtil.isNotEmpty(addOrderDto.getOrderId())){ + MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(addOrderDto.getOrderId()); + if(ObjectUtil.isNotEmpty(mallOrderInfo)){ + mallOrderInfo.setStatus(OrderStatusEnum.CANCEL.getValue()); + mallOrderInfoMapper.updateById(mallOrderInfo); + } + } String orderNo = MallUtils.getOrderNum(); MallOrderInfo orderInfo = new MallOrderInfo(); orderInfo.setOrderNo(orderNo); orderInfo.setIsApp(AppContants.IS_APP_ORDER); orderInfo.setOrderTime(new Date()); orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue()); + orderInfo.setPayResult(2); if (CollUtil.isEmpty(addOrderDto.getItems())) { throw new FebsException("商品明细不能为空。"); } @@ -289,13 +289,114 @@ @Override public FebsResponse getOrder(ApiGetOrderDto apiGetOrderDto) { - ApiGetOrderListVo apiGetOrderListVo = mallOrderInfoMapper.getAppOrderByOrderId(apiGetOrderDto.getOrderId()); + Long orderId = apiGetOrderDto.getOrderId(); + ApiGetOrderListVo apiGetOrderListVo = mallOrderInfoMapper.getAppOrderByOrderId(orderId); if(ObjectUtil.isNotEmpty(apiGetOrderListVo)){ apiGetOrderListVo.setItems(mallOrderItemMapper.getAppOrderItemByOrderId(apiGetOrderListVo.getId())); } +// mallOrderInfoMapper.deleteById(orderId); +// QueryWrapper<MallOrderItem> mallOrderItemQuery = new QueryWrapper<>(); +// mallOrderItemQuery.eq("order_id",orderId); +// mallOrderItemMapper.delete(mallOrderItemQuery); return new FebsResponse().success().data(apiGetOrderListVo); } + @Override + public FebsResponse getOrderCancel(ApiGetOrderDto apiGetOrderDto) { + MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(apiGetOrderDto.getOrderId()); + mallOrderInfo.setStatus(OrderStatusEnum.CANCEL.getValue()); + mallOrderInfoMapper.updateById(mallOrderInfo); + + return new FebsResponse().success().message("订单已取消"); + } + + @Override + @Transactional + public FebsResponse wxCodePay(ApiWxCodePayDto wxCodePayDto) { + Long orderId = wxCodePayDto.getOrderId(); + MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId); + if(OrderStatusEnum.FINISH.getValue() == (mallOrderInfo.getStatus())){ + throw new FebsException("已支付"); + } + BigDecimal amount = mallOrderInfo.getAmount(); + BigDecimal carriage = mallOrderInfo.getCarriage(); + //减少用户积分和余额 + if(ObjectUtil.isNotEmpty(mallOrderInfo.getMemberId())){ + BigDecimal avaAmount = carriage;//剩余需要折扣的金额 + if(avaAmount.compareTo(BigDecimal.ZERO) > 0){ + MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallOrderInfo.getMemberId()); + BigDecimal score = mallMemberWallet.getScore(); + BigDecimal balance = mallMemberWallet.getBalance(); + BigDecimal memberAmount = score.add(balance); + if(avaAmount.compareTo(memberAmount) >= 0){ + //清零用户的积分和余额 + mallMemberWallet.setBalance(BigDecimal.ZERO); + mallMemberWallet.setScore(BigDecimal.ZERO); + mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet); + }else{ + /** + * 先扣积分,再扣余额 + */ + if(avaAmount.compareTo(score) >= 0){ + mallMemberWallet.setScore(BigDecimal.ZERO); + avaAmount = avaAmount.subtract(score); + }else{ + mallMemberWallet.setScore(score.subtract(avaAmount)); + avaAmount = BigDecimal.ZERO; + } + //积分不够 + if(avaAmount.compareTo(BigDecimal.ZERO) > 0){ + mallMemberWallet.setBalance(balance.subtract(avaAmount)); + }else{ + mallMemberWallet.setBalance(balance); + } + mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet); + } + } + } + String wxPayCode = wxCodePayDto.getWxPayCode(); + mallOrderInfo.setTakeCode(wxPayCode); + List<ApiGetOrderOrderItemVo> appOrderItemByOrderId = mallOrderItemMapper.getAppOrderItemByOrderId(orderId); + if(CollUtil.isEmpty(appOrderItemByOrderId)){ + mallOrderInfo.setName("商品"); + }else{ + mallOrderInfo.setName(appOrderItemByOrderId.get(0).getGoodsName()); + } + mallOrderInfo.setStatus(OrderStatusEnum.FINISH.getValue()); + mallOrderInfoMapper.updateById(mallOrderInfo); + // 发起付款码支付请求 + String payResult = "支付成功"; + if(amount.subtract(carriage).compareTo(BigDecimal.ZERO) > 0){ + /** + * auth_code 扫码支付付款码 微信付款码规则:18位纯数字,前缀以10、11、12、13、14、15开头 + */ + String regex = "^(10|11|12|13|14|15)\\d{16}$"; + boolean flag = wxPayCode.matches(regex); + if(!flag){ + throw new FebsException("请打开微信付款码!"); + } + payResult = xcxCodePayService.pay(mallOrderInfo); + } + return new FebsResponse().success().message(payResult); + } + + @Override + public FebsResponse cancelOrder(Long id) { + MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(id); + if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { + throw new FebsException("订单不存在"); + } + + if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) { + throw new FebsException("订单不是待付款, 无法取消"); + } + + orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue()); + orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF); + mallOrderInfoMapper.updateById(orderInfo); + return new FebsResponse().success().message("取消成功"); + } + public String generateAsaToken(String token) { RSA rsa = new RSA(null, AppContants.PUBLIC_KEY); return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey); -- Gitblit v1.9.1