| | |
| | | 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; |
| | |
| | | import cn.hutool.crypto.asymmetric.KeyType; |
| | | import cn.hutool.crypto.asymmetric.RSA; |
| | | 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; |
| | |
| | | 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")); |
| | |
| | | |
| | | @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); |
| | | } |
| | |
| | | @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("用户钱包不存在。"); |
| | |
| | | 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); |
| | |
| | | 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); |
| | | } |
| | | // 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); |
| | | } |
| | |
| | | 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("商品明细不能为空。"); |
| | | } |
| | |
| | | } |
| | | 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("商品明细不能为空。"); |
| | | } |
| | |
| | | |
| | | @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()); |
| | | } |
| | | 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); |