From 2e3f5dfec643f2b2b91bf70e68dd882a1a32140c Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期四, 18 九月 2025 10:24:36 +0800 Subject: [PATCH] 修改bug --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 161 ++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 115 insertions(+), 46 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 f557573..92ef12c 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 @@ -35,6 +35,7 @@ import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.CodeFactoryUtil; import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.goods.api.domain.GetLotteryEventList; import com.ruoyi.goods.api.domain.TLotteryEvent; import com.ruoyi.goods.api.service.LotteryEventClient; import com.ruoyi.order.config.WxPayConfiguration; @@ -405,7 +406,10 @@ appSureOrderVo.setAppSureOrderGoodsVoList(appSureOrderGoodsVoList); appSureOrderVo.setLotteryDraw(false); // 返回AppPlaceOrderVo对象 - List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); + GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); + getLotteryEventList.setActivityType(2); + getLotteryEventList.setUserId(SecurityUtils.getUserId()); + List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); if (data.size() > 0) { BigDecimal finalOrderPayMoney = orderPayMoney; List<TLotteryEvent> collect = data.stream().filter(s -> s.getPayMoney().compareTo(finalOrderPayMoney) <= 0).collect(Collectors.toList()); @@ -524,7 +528,10 @@ appPanicBuyVo.setOrderPayMoney(orderPayMoney); appPanicBuyVo.setLotteryDraw(false); // 返回AppPlaceOrderVo对象 - List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); + GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); + getLotteryEventList.setActivityType(2); + getLotteryEventList.setUserId(SecurityUtils.getUserId()); + List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); if (data.size() > 0) { BigDecimal finalOrderPayMoney = orderPayMoney; List<TLotteryEvent> collect = data.stream().filter(s -> s.getPayMoney().compareTo(finalOrderPayMoney) <= 0).collect(Collectors.toList()); @@ -868,7 +875,10 @@ appPlaceOrderVo.setLotteryDraw(false); // 返回AppPlaceOrderVo对象 - List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); + GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); + getLotteryEventList.setActivityType(2); + getLotteryEventList.setUserId(SecurityUtils.getUserId()); + List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); if (data.size() > 0) { BigDecimal finalOrderPayMoney = orderPayMoney; List<TLotteryEvent> collect = data.stream().filter(s -> s.getPayMoney().compareTo(finalOrderPayMoney) <= 0).collect(Collectors.toList()); @@ -1361,7 +1371,10 @@ redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId, surpNum - buyNum); appPlaceOrderVo.setLotteryDraw(false); // 返回AppPlaceOrderVo对象 - List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); + GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); + getLotteryEventList.setActivityType(2); + getLotteryEventList.setUserId(SecurityUtils.getUserId()); + List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); if (data.size() > 0) { BigDecimal finalOrderPayMoney = orderPayMoney; List<TLotteryEvent> collect = data.stream().filter(s -> s.getPayMoney().compareTo(finalOrderPayMoney) <= 0).collect(Collectors.toList()); @@ -1649,7 +1662,10 @@ appPlaceOrderVo.setPrepayId(orderPayment.getPrepayId()); appPlaceOrderVo.setLotteryDraw(false); // 返回AppPlaceOrderVo对象 - List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); + GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); + getLotteryEventList.setActivityType(2); + getLotteryEventList.setUserId(SecurityUtils.getUserId()); + List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); if (data.size() > 0) { List<TLotteryEvent> collect = data.stream().filter(s -> s.getPayMoney().compareTo(order.getPayMoney()) <= 0).collect(Collectors.toList()); if (collect.size() > 0) { @@ -1910,6 +1926,10 @@ @Override public MerVerifyOrderVo verifyOrderDouYin(String orderId, Long shopId) { + Shop shop = remoteShopService.getShop(shopId).getData(); + if(StringUtils.isEmpty(shop.getDyPoiId())){ + throw new ServiceException("请先绑定抖音门店ID"); + } CertificatePrepareResponseData data = VerifyUtil.certificatePrepare(orderId); if (null == data) { throw new ServiceException("查询券信息失败"); @@ -1948,6 +1968,10 @@ @Override public MerVerifyOrderVo verifyOrderKuaiShou(String orderId, Long shopId) { + Shop shop = remoteShopService.getShop(shopId).getData(); + if(StringUtils.isEmpty(shop.getKsPoiId())){ + throw new ServiceException("请先绑定快手门店ID"); + } VerifyPrepareDataNew data = KSVerifyUtil.certificatePrepare(redisService, orderId); if (null == data) { throw new ServiceException("查询券信息失败"); @@ -2240,8 +2264,15 @@ // @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 public MerVerifyOrderVo sureVerifyOrderDouYin(MerVerifyOrderDto merVerifyOrderDto) { String phone = merVerifyOrderDto.getPhone(); + String name = merVerifyOrderDto.getName(); String orderId = merVerifyOrderDto.getOrderId(); Long shopId = merVerifyOrderDto.getShopId(); + if(StringUtils.isEmpty(phone)){ + throw new ServiceException("请填写核销用户电话号码"); + } + if(StringUtils.isEmpty(name)){ + throw new ServiceException("请填写核销用户姓名"); + } //获取核销商户 Shop shop = remoteShopService.getShop(shopId).getData(); CertificatePrepareResponseData data = VerifyUtil.certificatePrepare(orderId); @@ -2252,7 +2283,14 @@ if (null == itemList && itemList.isEmpty()) { throw new ServiceException("查询券信息失败"); } - CertificatePrepareResponseDataCertificatesItem certificatesItem = itemList.get(0); + List<CertificatePrepareResponseDataCertificatesItem> collect = itemList.stream().filter(s -> s.getStatus().intValue() == 1).collect(Collectors.toList()); + if(collect.size() < merVerifyOrderDto.getNumber()){ + throw new ServiceException("验券数量超过可使用数量"); + } + List<CertificatePrepareResponseDataCertificatesItem> certificatePrepareResponseDataCertificatesItems = collect.subList(0, merVerifyOrderDto.getNumber()); + + + CertificatePrepareResponseDataCertificatesItem certificatesItem = certificatePrepareResponseDataCertificatesItems.get(0); //商品信息 CertificatePrepareResponseDataCertificatesItemSku sku = certificatesItem.getSku(); //次卡信息 @@ -2266,7 +2304,28 @@ } Member member = remoteMemberService.getMemberByMobile(phone).getData();//绑定用户判断核销商户 if(null == member){ - throw new ServiceException("手机号还未注册账户,请先进行注册"); + //创建新用户 + String memberId = IdUtils.simpleUUID(); + SysUser sysUser = new SysUser(); + sysUser.setUserName(memberId); + sysUser.setUserType("03"); + sysUser.setNickName(name); + sysUser.setPhonenumber(phone); + sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + String password = "hongruitang"; + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + sysUser = remoteUserService.registerUser(sysUser).getData(); + member = new Member(); + member.setMemberId(memberId); + member.setUserId(sysUser.getUserId()); + member.setMobile(phone); + member.setRealName(name); + member.setNickName(name); + member.setBindingFlag(1); + member.setBindingType(3); + member.setRelationShopId(shopId); + member.setRelationShopName(shop.getShopName()); + remoteMemberService.createNewMember(member); } if (member.getBindingFlag() == 1) { if (!member.getRelationShopId().equals(shopId)) { @@ -2280,10 +2339,11 @@ throw new ServiceException("该抖音券不能重复核销"); } } - String encryptedCode = certificatesItem.getEncryptedCode(); - List<CertificateVerifyResponseDataVerifyResultsItem> items = VerifyUtil.certificateVerify(data.getVerifyToken(), shop.getDyPoiId(), new ArrayList<String>() {{ - add(encryptedCode); - }}); + List<String> encryptedCodes = new ArrayList<>(); + for (CertificatePrepareResponseDataCertificatesItem certificatePrepareResponseDataCertificatesItem : certificatePrepareResponseDataCertificatesItems) { + encryptedCodes.add(certificatePrepareResponseDataCertificatesItem.getEncryptedCode()); + } + List<CertificateVerifyResponseDataVerifyResultsItem> items = VerifyUtil.certificateVerify(data.getVerifyToken(), shop.getDyPoiId(), encryptedCodes); if (null == items || items.isEmpty()) { throw new ServiceException("抖音券核销失败"); } @@ -2331,7 +2391,7 @@ order.setUseTime(nowTime); order.setUseUserId(merVerifyOrderDto.getUserId()); order.setCloseFlag(1); - order.setGoodsNum(1); + order.setGoodsNum(itemList.size()); order.setCouponMoney(BigDecimal.ZERO); this.save(order); //创建服务商品 @@ -2344,15 +2404,14 @@ orderGoods.setGoodsPrice(originAmount); orderGoods.setGoodsTotalMoney(originAmount); orderGoods.setGoodsReceivableMoney(originAmount); - orderGoods.setBuyNum(1); + orderGoods.setBuyNum(itemList.size()); ConsumerGoods consumerGoods = new ConsumerGoods(); + consumerGoods.setUsedNum(merVerifyOrderDto.getNumber()); if(null != timeCard){ - //核销一次加一次 - orderGoods.setBuyNum(1); - orderGoods.setServiceNum(1); - consumerGoods.setServiceNum(timeCard.getTimesCount()); - consumerGoods.setUsedNum(1); + orderGoods.setBuyNum(itemList.size()); + orderGoods.setServiceNum(merVerifyOrderDto.getNumber()); + consumerGoods.setServiceNum(itemList.size()); consumerGoods.setUseTime(new Date()); } orderGoods.setCycleNumFlag(1); @@ -2365,7 +2424,7 @@ consumerGoods.setServiceStatus(1); consumerGoods.setShopId(order.getShopId()); consumerGoods.setUserId(order.getUserId()); - consumerGoods.setOrderId(orderId); + consumerGoods.setOrderId(order.getOrderId()); consumerGoods.setOrderGoodsId(orderGoods.getOrderGoodsId()); consumerGoods.setGoodsName(sku.getTitle()); consumerGoods.setCycleNumFlag(1); @@ -2376,7 +2435,7 @@ //生成返回 MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); - merVerifyOrderVo.setOrderId(orderId); + merVerifyOrderVo.setOrderId(order.getOrderId()); merVerifyOrderVo.setOrderNo(order.getOrderNo()); merVerifyOrderVo.setOrderStatus(order.getOrderStatus()); merVerifyOrderVo.setOrderFrom(order.getOrderFrom()); @@ -2445,7 +2504,7 @@ if (integral > 0) { memberTotalChangeDto.setChangeIntegral(integral); memberTotalChangeDto.setTypeIntegral(1); - memberTotalChangeDto.setOrderId(orderId); + memberTotalChangeDto.setOrderId(order.getOrderId()); memberTotalChangeDto.setOrderNo(order.getOrderNo()); } } @@ -2456,14 +2515,12 @@ }else{ //扣减剩余次数 OrderGoods orderGoods = orderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>().eq(OrderGoods::getOrderId, order.getOrderId())); - //核销一次加一次数量 - orderGoods.setBuyNum(orderGoods.getBuyNum() + 1); if(null != orderGoods.getServiceNum()){ - orderGoods.setServiceNum(orderGoods.getServiceNum() + 1); + orderGoods.setServiceNum(orderGoods.getServiceNum() + merVerifyOrderDto.getNumber()); } orderGoodsService.updateById(orderGoods); ConsumerGoods consumerGoods = consumerGoodsService.getOne(new LambdaQueryWrapper<ConsumerGoods>().eq(ConsumerGoods::getOrderId, order.getOrderId()).eq(ConsumerGoods::getOrderGoodsId, orderGoods.getOrderGoodsId())); - consumerGoods.setUsedNum(consumerGoods.getUsedNum() + 1); + consumerGoods.setUsedNum(consumerGoods.getUsedNum() + merVerifyOrderDto.getNumber()); consumerGoods.setUseTime(new Date()); if(consumerGoods.getUsedNum() == consumerGoods.getServiceNum()){ consumerGoods.setCompleteTime(new Date()); @@ -2471,7 +2528,7 @@ consumerGoodsService.updateById(consumerGoods); //生成返回 MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); - merVerifyOrderVo.setOrderId(orderId); + merVerifyOrderVo.setOrderId(order.getOrderId()); merVerifyOrderVo.setOrderNo(order.getOrderNo()); merVerifyOrderVo.setOrderStatus(order.getOrderStatus()); merVerifyOrderVo.setOrderFrom(order.getOrderFrom()); @@ -2525,8 +2582,15 @@ // @GlobalTransactional(rollbackFor = Exception.class) todo 放开分布式事务注解 public MerVerifyOrderVo sureVerifyOrderKuaiShou(MerVerifyOrderDto merVerifyOrderDto) { String phone = merVerifyOrderDto.getPhone(); + String name = merVerifyOrderDto.getName(); String orderId = merVerifyOrderDto.getOrderId(); Long shopId = merVerifyOrderDto.getShopId(); + if(StringUtils.isEmpty(phone)){ + throw new ServiceException("请填写核销用户电话号码"); + } + if(StringUtils.isEmpty(name)){ + throw new ServiceException("请填写核销用户姓名"); + } //获取核销商户 Shop shop = remoteShopService.getShop(shopId).getData(); VerifyPrepareDataNew data = KSVerifyUtil.certificatePrepare(redisService, orderId); @@ -2537,7 +2601,8 @@ if (null == itemList || itemList.isEmpty()) { throw new ServiceException("查询券信息失败"); } - SimpleCertificateTimesCard certificatesItem = itemList.get(0); + List<SimpleCertificateTimesCard> timesCards = itemList.subList(0, merVerifyOrderDto.getNumber()); + SimpleCertificateTimesCard certificatesItem = timesCards.get(0); Long expire_time = certificatesItem.getExpire_time(); if(LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) > expire_time){ throw new ServiceException("优惠券已过期"); @@ -2558,11 +2623,12 @@ throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); } } - - String encryptedCode = certificatesItem.getEncrypted_code(); - List<VerifyResult> items = KSVerifyUtil.certificateVerify(redisService, data.getVerify_token(), shop.getKsPoiId(), new ArrayList<String>() {{ - add(encryptedCode); - }}, data.getOrder_id()); + + List<String> encryptedCodes = new ArrayList<>(); + for (SimpleCertificateTimesCard timesCard : timesCards) { + encryptedCodes.add(timesCard.getEncrypted_code()); + } + List<VerifyResult> items = KSVerifyUtil.certificateVerify(redisService, data.getVerify_token(), shop.getKsPoiId(), encryptedCodes, data.getOrder_id()); if (null == items || items.isEmpty()) { throw new ServiceException("快手券核销失败"); } @@ -2610,7 +2676,7 @@ order.setUseTime(nowTime); order.setUseUserId(merVerifyOrderDto.getUserId()); order.setCloseFlag(1); - order.setGoodsNum(1); + order.setGoodsNum(itemList.size()); order.setCouponMoney(BigDecimal.ZERO); this.save(order); //创建服务商品 @@ -2621,13 +2687,12 @@ orderGoods.setDelFlag(0); orderGoods.setOrderId(order.getOrderId()); orderGoods.setGoodsId(sku.getSku_id()); - orderGoods.setBuyNum(1); - orderGoods.setServiceNum(1); + orderGoods.setBuyNum(itemList.size()); orderGoods.setGoodsPrice(originAmount); orderGoods.setGoodsTotalMoney(originAmount); orderGoods.setGoodsReceivableMoney(originAmount); orderGoods.setCycleNumFlag(1); - orderGoods.setServiceNum(sku.getTimes_count()); + orderGoods.setServiceNum(merVerifyOrderDto.getNumber()); orderGoods.setGoodsType(2); orderGoods.setGoodsName(sku.getTitle()); orderGoodsService.save(orderGoods); @@ -2638,13 +2703,13 @@ consumerGoods.setServiceStatus(1); consumerGoods.setShopId(order.getShopId()); consumerGoods.setUserId(order.getUserId()); - consumerGoods.setOrderId(orderId); + consumerGoods.setOrderId(order.getOrderId()); consumerGoods.setGoodsId(sku.getSku_id()); consumerGoods.setOrderGoodsId(orderGoods.getOrderGoodsId()); consumerGoods.setGoodsName(sku.getTitle()); consumerGoods.setCycleNumFlag(1); - consumerGoods.setServiceNum(sku.getTimes_count()); - consumerGoods.setUsedNum(1); + consumerGoods.setServiceNum(itemList.size()); + consumerGoods.setUsedNum(merVerifyOrderDto.getNumber()); consumerGoods.setUseTime(new Date()); consumerGoods.setCreateTime(nowTime); consumerGoods.setGoodsType(2); @@ -2652,7 +2717,7 @@ consumerGoodsService.save(consumerGoods); //生成返回 MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); - merVerifyOrderVo.setOrderId(orderId); + merVerifyOrderVo.setOrderId(order.getOrderId()); merVerifyOrderVo.setOrderNo(order.getOrderNo()); merVerifyOrderVo.setOrderStatus(order.getOrderStatus()); merVerifyOrderVo.setOrderFrom(order.getOrderFrom()); @@ -2721,7 +2786,7 @@ if (integral > 0) { memberTotalChangeDto.setChangeIntegral(integral); memberTotalChangeDto.setTypeIntegral(1); - memberTotalChangeDto.setOrderId(orderId); + memberTotalChangeDto.setOrderId(order.getOrderId()); memberTotalChangeDto.setOrderNo(order.getOrderNo()); } } @@ -2732,12 +2797,11 @@ }else{ //扣减剩余次数 OrderGoods orderGoods = orderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>().eq(OrderGoods::getOrderId, order.getOrderId())); - orderGoods.setBuyNum(orderGoods.getBuyNum() + 1); - orderGoods.setServiceNum(orderGoods.getServiceNum() + 1); + orderGoods.setServiceNum(orderGoods.getServiceNum() + itemList.size()); orderGoodsService.updateById(orderGoods); ConsumerGoods consumerGoods = consumerGoodsService.getOne(new LambdaQueryWrapper<ConsumerGoods>().eq(ConsumerGoods::getOrderId, order.getOrderId()).eq(ConsumerGoods::getOrderGoodsId, orderGoods.getOrderGoodsId())); - consumerGoods.setUsedNum(consumerGoods.getUsedNum() + 1); + consumerGoods.setUsedNum(consumerGoods.getUsedNum() + itemList.size()); consumerGoods.setUseTime(new Date()); if(consumerGoods.getUsedNum() == consumerGoods.getServiceNum()){ consumerGoods.setCompleteTime(new Date()); @@ -2745,7 +2809,7 @@ consumerGoodsService.updateById(consumerGoods); //生成返回 MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); - merVerifyOrderVo.setOrderId(orderId); + merVerifyOrderVo.setOrderId(order.getOrderId()); merVerifyOrderVo.setOrderNo(order.getOrderNo()); merVerifyOrderVo.setOrderStatus(order.getOrderStatus()); merVerifyOrderVo.setOrderFrom(order.getOrderFrom()); @@ -4229,6 +4293,7 @@ } // 设置订单编号 mgtOrderDetailVo.setOrderNo(order.getOrderNo()); + mgtOrderDetailVo.setTripartiteOrderId(order.getTripartiteOrderId()); mgtOrderDetailVo.setOutTradeNo(order.getOutTradeNo()); // 设置订单来源 switch (order.getOrderFrom()) { @@ -4965,6 +5030,9 @@ for (int i = 0; i < MgtMapIntTotalVoGoodsType.size(); i++) { mgtMapIntTotalVo = new MgtMapIntTotalVo(); mgtMapBigTotalVo = new MgtMapBigTotalVo(); + if(null == MgtMapIntTotalVoGoodsType.get(i).getMapKey()){ + continue; + } mgtMapIntTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); mgtMapBigTotalVo.setMapValue(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond()); if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("1")) { @@ -5668,7 +5736,8 @@ if (memberGiftRecord.getGiftFrom() == 2 && !memberGiftRecord.getShopId().equals(shopId)) { throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); } - + + merVerifyAwardVo.setUserId(member.getUserId()); merVerifyAwardVo.setUserName(member.getRealName()); merVerifyAwardVo.setUserMobile(member.getMobile()); if (1 == memberGiftRecord.getPrizeFrom()) { -- Gitblit v1.7.1