From 41422cb74d137e590fefefa4390cd6eedc02a0fb Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期一, 16 六月 2025 16:19:03 +0800 Subject: [PATCH] 对接部分抖音接口 --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 262 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 252 insertions(+), 10 deletions(-) diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java index 24d7837..4640431 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.douyin.openapi.client.models.*; import com.github.binarywang.wxpay.bean.ecommerce.*; import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult; @@ -49,6 +50,8 @@ import com.ruoyi.order.service.account.ProfitSharingService; import com.ruoyi.order.service.order.*; import com.ruoyi.order.util.HuiFuTianXiaUtil; +import com.ruoyi.order.util.douyin.OrderUtil; +import com.ruoyi.order.util.douyin.VerifyUtil; import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.constant.DelayTaskEnum; import com.ruoyi.system.api.constant.SecurityConstant; @@ -1809,12 +1812,12 @@ merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); merVerifyOrderVo.setPayType(order.getPayType()); merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney()); - if(order.getPayType()==1){ + if (order.getPayType() == 1) { merVerifyOrderVo.setReceiveMoney(order.getPayMoney()); - }else{ - if(order.getOfflinePayMoney()!=null){ + } else { + if (order.getOfflinePayMoney() != null) { merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney()); - }else{ + } else { merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO); } } @@ -1826,7 +1829,41 @@ // 返回结果 return merVerifyOrderVo; } - + + + @Override + public MerVerifyOrderVo verifyOrderDouYin(String orderId, Long shopId) { + CertificatePrepareResponseData data = VerifyUtil.certificatePrepare(orderId); + if (null == data) { + throw new ServiceException("查询券信息失败"); + } + List<CertificatePrepareResponseDataCertificatesItem> itemList = data.getCertificates(); + if (null == itemList || itemList.isEmpty()) { + throw new ServiceException("查询券信息失败"); + } + CertificatePrepareResponseDataCertificatesItem certificatesItem = itemList.get(0); + //商品信息 + CertificatePrepareResponseDataCertificatesItemSku sku = certificatesItem.getSku(); + //次卡信息 + CertificatePrepareResponseDataCertificatesItemTimeCard timeCard = certificatesItem.getTimeCard(); + //券的状态 + Number status = certificatesItem.getStatus(); + // 创建返回对象 + MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); + // 设置返回对象的属性值 + merVerifyOrderVo.setOrderId(orderId); + merVerifyOrderVo.setOrderFrom(6); + merVerifyOrderVo.setOrderStatus(status.intValue() == 1 ? 2 : 3); + List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = new ArrayList<>(); + AppUserOrderGoodsPageVo orderGoodsPageVo = new AppUserOrderGoodsPageVo(); + orderGoodsPageVo.setGoodsName(sku.getTitle()); + appUserOrderGoodsPageVoList.add(orderGoodsPageVo); + merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); + merVerifyOrderVo.setLaveTime(timeCard.getTimesCount() - timeCard.getTimesUsed()); + // 返回结果 + return merVerifyOrderVo; + } + /** * 确认核销订单 * @@ -2068,17 +2105,222 @@ remoteMemberService.changeMemberTotal(memberTotalChangeDto); return merVerifyOrderVo; } - + + /** - * @description 分账实现 - * @author jqs - * @date 2023/9/8 11:56 + * 核销抖音券 + * + * @return + */ + @Override + @Transactional + @GlobalTransactional(rollbackFor = Exception.class) + public MerVerifyOrderVo sureVerifyOrderDouYin(MerVerifyOrderDto merVerifyOrderDto) { + String phone = merVerifyOrderDto.getPhone(); + String orderId = merVerifyOrderDto.getOrderId(); + Long shopId = merVerifyOrderDto.getShopId(); + //获取核销商户 + Shop shop = remoteShopService.getShop(shopId).getData(); + CertificatePrepareResponseData data = VerifyUtil.certificatePrepare(orderId); + if (null == data) { + throw new ServiceException("查询券信息失败"); + } + List<CertificatePrepareResponseDataCertificatesItem> itemList = data.getCertificates(); + if (null == itemList || itemList.isEmpty()) { + throw new ServiceException("查询券信息失败"); + } + CertificatePrepareResponseDataCertificatesItem certificatesItem = itemList.get(0); + Number status = certificatesItem.getStatus(); + if (status.intValue() == 2) { + throw new ServiceException("该抖音券不能重复核销"); + } + if (status.intValue() != 1) { + throw new ServiceException("抖音券核销失败"); + } + String encryptedCode = certificatesItem.getEncryptedCode(); + List<CertificateVerifyResponseDataVerifyResultsItem> items = VerifyUtil.certificateVerify(data.getVerifyToken(), shop.getPoiId(), new ArrayList<String>() {{ + add(encryptedCode); + }}); + if (null == items || items.isEmpty()) { + throw new ServiceException("抖音券核销失败"); + } + Order one = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getTripartiteOrderId, data.getOrderId())); + if (null != one) { + throw new ServiceException("该抖音券不能重复核销"); + } + + TradeOrderQueryResponseData tradeOrderQueryResponseData = OrderUtil.queryOrderList(1, 10, data.getOrderId()); + //原始金额 + BigDecimal originAmount = BigDecimal.ZERO; + //支付金额 + BigDecimal payAmount = BigDecimal.ZERO; + //优惠金额 + BigDecimal payDiscountAmount = BigDecimal.ZERO; + if (null != tradeOrderQueryResponseData) { + TradeOrderQueryResponseDataOrdersItem ordersItem = tradeOrderQueryResponseData.getOrders().get(0); + TradeOrderQueryResponseDataOrdersItemAmountInfo amountInfo = ordersItem.getAmountInfo(); + originAmount = BigDecimal.valueOf(amountInfo.getOriginAmount()).divide(new BigDecimal(100)); + payAmount = BigDecimal.valueOf(amountInfo.getPayAmount()).divide(new BigDecimal(100)); + payDiscountAmount = BigDecimal.valueOf(amountInfo.getPayDiscountAmount()).divide(new BigDecimal(100)); + } + + Date nowTime = new Date(); + Member member = remoteMemberService.getMemberByMobile(phone).getData(); + //开始添加订单数据 + Order order = new Order(); + order.setOrderId(IdUtils.fastSimpleUUID()); + order.setDelFlag(0); + order.setOrderStatus(3); + order.setOrderNo(CodeFactoryUtil.getShopOrderNo()); + order.setOrderFrom(6); + order.setShopId(shopId); + order.setUserId(member.getUserId()); + order.setOrderMoney(originAmount); + order.setDiscountMoney(payDiscountAmount); + order.setReceivableMoney(payAmount); + order.setPayType(1); + order.setPayMoney(payAmount); + order.setOnlinePayMoney(payAmount); + order.setOrderRemark("抖音订单"); + order.setCreateTime(nowTime); + order.setPayTime(nowTime); + order.setTripartiteOrderId(data.getOrderId()); + + //绑定用户判断核销商户 + if (member.getBindingFlag() == 1) { + if (!member.getRelationShopId().equals(shopId)) { + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + } + order.setUseTime(nowTime); + order.setUseUserId(merVerifyOrderDto.getUserId()); + order.setCloseFlag(1); + this.save(order); + //创建服务商品 + //获取商品信息(商品简介,调理问题) + //商品信息 + CertificatePrepareResponseDataCertificatesItemSku sku = certificatesItem.getSku(); + //次卡信息 + CertificatePrepareResponseDataCertificatesItemTimeCard timeCard = certificatesItem.getTimeCard(); + + OrderGoods orderGoods = new OrderGoods(); + orderGoods.setOrderGoodsId(IdUtils.simpleUUID()); + orderGoods.setDelFlag(0); + orderGoods.setOrderId(order.getOrderId()); + orderGoods.setBuyNum(timeCard.getTimesCount()); + orderGoods.setCycleNumFlag(1); + orderGoods.setServiceNum(timeCard.getTimesCount()); + orderGoods.setGoodsType(2); + orderGoods.setGoodsName(sku.getTitle()); + orderGoodsService.save(orderGoods); + + ConsumerGoods consumerGoods = new ConsumerGoods(); + consumerGoods.setConsumerGoodsId(IdUtils.simpleUUID()); + consumerGoods.setDelFlag(0); + consumerGoods.setServiceStatus(1); + consumerGoods.setShopId(order.getShopId()); + consumerGoods.setUserId(order.getUserId()); + consumerGoods.setOrderId(orderId); + consumerGoods.setOrderGoodsId(orderGoods.getOrderGoodsId()); + consumerGoods.setGoodsName(sku.getTitle()); + consumerGoods.setCycleNumFlag(1); + consumerGoods.setServiceNum(timeCard.getTimesCount()); + consumerGoods.setCreateTime(nowTime); + consumerGoods.setGoodsType(2); + consumerGoods.setSourceFrom(1); + consumerGoodsService.save(consumerGoods); + //生成返回 + MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); + merVerifyOrderVo.setOrderId(orderId); + merVerifyOrderVo.setOrderNo(order.getOrderNo()); + merVerifyOrderVo.setOrderStatus(order.getOrderStatus()); + merVerifyOrderVo.setOrderFrom(order.getOrderFrom()); + merVerifyOrderVo.setOrderGoodsMoney(order.getOrderMoney()); + merVerifyOrderVo.setCouponDiscount(order.getCouponMoney()); + merVerifyOrderVo.setReceivableDeposit(order.getReceivableDeposit()); + merVerifyOrderVo.setPayMoney(order.getPayMoney()); + merVerifyOrderVo.setOrderRemark(order.getOrderRemark()); + merVerifyOrderVo.setAppUserOrderGoodsPageVoList(new ArrayList<AppUserOrderGoodsPageVo>() {{ + add(new AppUserOrderGoodsPageVo() {{ + setOrderGoodsId(orderGoods.getOrderGoodsId()); + setGoodsName(orderGoods.getGoodsName()); + setGoodsType(orderGoods.getGoodsType()); + setBuyNum(orderGoods.getBuyNum()); + }}); + }}); + merVerifyOrderVo.setCreateTime(order.getCreateTime()); + merVerifyOrderVo.setPayTime(order.getPayTime()); + merVerifyOrderVo.setUseTime(order.getUseTime()); + merVerifyOrderVo.setPayType(order.getPayType()); + merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney()); + //根据支付方式返回应收金额和已收金额 + if (order.getPayType() == 1) { + merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getPayMoney())); + merVerifyOrderVo.setReceiveMoney(order.getPayMoney()); + } else { + merVerifyOrderVo.setReceivableMoney(order.getOrderMoney().subtract(order.getCouponMoney()).subtract(order.getReceivableDeposit())); + if (order.getOfflinePayMoney() != null) { + merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney()); + } else { + merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO); + } + } + merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(merVerifyOrderVo.getReceiveMoney())); + merVerifyOrderVo.setUserId(order.getUserId()); + merVerifyOrderVo.setUserName(member.getRealName()); + merVerifyOrderVo.setUserMobile(member.getMobile()); + merVerifyOrderVo.setCloseFlag(order.getCloseFlag()); + //判断用户是否绑定 2023-09-05需求改变核销时绑定用户 + if (member.getBindingFlag() != 1) { + //绑定商户 + AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); + appMemberBindingDto.setShopId(order.getShopId()); + appMemberBindingDto.setUserId(order.getUserId()); + appMemberBindingDto.setBindingFlag(1); + if (order.getOrderFrom() == 1) { + appMemberBindingDto.setBindingType(1); + } else if (order.getOrderFrom() == 2) { + appMemberBindingDto.setBindingType(2); + } + remoteMemberService.updateMemberBinding(appMemberBindingDto); + order.setNewMemberFlag(1); + } else { + order.setNewMemberFlag(0); + } + this.saveOrUpdate(order); + //更新用户积分和消费统计 + MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); + memberTotalChangeDto.setUserId(order.getUserId()); + // 如果存在积分兑换比例,则计算积分 + if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { + Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); + BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); + BigDecimal integralBig = moneyValueBig.multiply(order.getOnlinePayMoney()).setScale(0, BigDecimal.ROUND_HALF_UP); + Integer integral = Integer.valueOf(integralBig.toString()); + if (integral > 0) { + memberTotalChangeDto.setChangeIntegral(integral); + memberTotalChangeDto.setTypeIntegral(1); + memberTotalChangeDto.setOrderId(orderId); + memberTotalChangeDto.setOrderNo(order.getOrderNo()); + } + } + //更新消费时间 + memberTotalChangeDto.setConsumeTime(nowTime); + remoteMemberService.changeMemberTotal(memberTotalChangeDto); + return merVerifyOrderVo; + } + + + /** * @param orderId * @param orderNo * @param shopId * @param orderMoney * @param orderFrom - * @return void + * @return void + * @description 分账实现 + * @author jqs + * @date 2023/9/8 11:56 */ private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney, Integer orderFrom) { String sendMessage = ""; -- Gitblit v1.7.1